parent
ff7447e7ec
commit
d494aec2d0
6 changed files with 110 additions and 3 deletions
7
jest.config.js
Normal file
7
jest.config.js
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
module.exports = {
|
||||||
|
preset: 'ts-jest',
|
||||||
|
testEnvironment: "jsdom",
|
||||||
|
"moduleNameMapper": {
|
||||||
|
"^~/(.*)$": "<rootDir>/src/js/$1"
|
||||||
|
}
|
||||||
|
};
|
|
@ -1,6 +1,5 @@
|
||||||
export type TResponse = {
|
export type TResponse = {
|
||||||
IPAddress: string;
|
IPAddress: string;
|
||||||
Location: string;
|
|
||||||
ISP: string;
|
ISP: string;
|
||||||
City: string;
|
City: string;
|
||||||
Country: string;
|
Country: string;
|
||||||
|
@ -20,7 +19,6 @@ export function Response(res: TServerResponse): TResponse {
|
||||||
const self = Object.create(null);
|
const self = Object.create(null);
|
||||||
|
|
||||||
self.IPAddress = res.YourFuckingIPAddress;
|
self.IPAddress = res.YourFuckingIPAddress;
|
||||||
self.Location = res.YourFuckingLocation;
|
|
||||||
self.ISP = res.YourFuckingISP;
|
self.ISP = res.YourFuckingISP;
|
||||||
self.City = res.YourFuckingCity;
|
self.City = res.YourFuckingCity;
|
||||||
self.Country = res.YourFuckingCountry;
|
self.Country = res.YourFuckingCountry;
|
||||||
|
|
24
test/ErrorRenderer.test.tsx
Normal file
24
test/ErrorRenderer.test.tsx
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import React from "react";
|
||||||
|
import '@testing-library/jest-dom'
|
||||||
|
import { render, screen } from "@testing-library/react";
|
||||||
|
import { ErrorRenderer } from "~/components/ErrorRenderer";
|
||||||
|
import { getMessage } from "./mocks/chrome.i18n";
|
||||||
|
|
||||||
|
describe("ErrorRenderer.tsx", () => {
|
||||||
|
const error = new Error("This is an example error message");
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
const chrome: any = {i18n: {getMessage}};
|
||||||
|
global.chrome = chrome;
|
||||||
|
render(<ErrorRenderer error={error}/>);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
global.chrome = undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
test("an error is rendered", () => {
|
||||||
|
expect(screen.getByText("Error")).toBeInTheDocument();
|
||||||
|
expect(screen.getByText(error.message)).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
});
|
70
test/ResponseRenderer.test.tsx
Normal file
70
test/ResponseRenderer.test.tsx
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
import React from "react";
|
||||||
|
import '@testing-library/jest-dom'
|
||||||
|
import { render, screen } from "@testing-library/react";
|
||||||
|
import { ResponseRenderer } from "~/components/ResponseRenderer";
|
||||||
|
import { getMessage } from "./mocks/chrome.i18n";
|
||||||
|
|
||||||
|
describe("ResponseRenderer.tsx", () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
const chrome: any = {i18n: {getMessage}};
|
||||||
|
global.chrome = chrome;
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
global.chrome = undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
const defaultResponse = {
|
||||||
|
IPAddress: "89.222.123.45",
|
||||||
|
ISP: "FooBar Ltd",
|
||||||
|
City: "FooBar City",
|
||||||
|
Country: "United States of FooBar",
|
||||||
|
isTorExitNode: false
|
||||||
|
};
|
||||||
|
|
||||||
|
describe("when isTorExitNode is false", () => {
|
||||||
|
const response = {...defaultResponse};
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
render(<ResponseRenderer response={response}/>);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("an IP address is rendered", () => {
|
||||||
|
expect(screen.getByText("IP Address")).toBeInTheDocument();
|
||||||
|
expect(screen.getByText(response.IPAddress)).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("an ISP is rendered", () => {
|
||||||
|
expect(screen.getByText("ISP")).toBeInTheDocument();
|
||||||
|
expect(screen.getByText(response.ISP)).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("a city is rendered", () => {
|
||||||
|
expect(screen.getByText("City")).toBeInTheDocument();
|
||||||
|
expect(screen.getByText(response.City)).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("a country is rendered", () => {
|
||||||
|
expect(screen.getByText("Country")).toBeInTheDocument();
|
||||||
|
expect(screen.getByText(response.Country)).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("isTorExitNode is rendered as No", () => {
|
||||||
|
expect(screen.getByText("Tor exit node")).toBeInTheDocument();
|
||||||
|
expect(screen.getByText("No")).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("when isTorExitNode is true", () => {
|
||||||
|
const response = {...defaultResponse, isTorExitNode: true};
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
render(<ResponseRenderer response={response}/>);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("isTorExitNode is rendered as Yes", () => {
|
||||||
|
expect(screen.getByText("Tor exit node")).toBeInTheDocument();
|
||||||
|
expect(screen.getByText("Yes")).toBeInTheDocument();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
});
|
8
test/mocks/chrome.i18n.ts
Normal file
8
test/mocks/chrome.i18n.ts
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import { readFileSync } from "fs";
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
export function getMessage(key: string) {
|
||||||
|
const buf = readFileSync(path.resolve("src/_locales/en/messages.json"));
|
||||||
|
const messages = JSON.parse(buf.toString());
|
||||||
|
return messages[key].message;
|
||||||
|
}
|
|
@ -10,8 +10,8 @@
|
||||||
"jsx": "react",
|
"jsx": "react",
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"lib": [ "ES2020", "DOM" ],
|
"lib": [ "ES2020", "DOM" ],
|
||||||
|
|
||||||
"baseUrl": "src/",
|
"baseUrl": "src/",
|
||||||
"paths": { "~/*": ["js/*"] },
|
"paths": { "~/*": ["js/*"] },
|
||||||
|
"types": ["node", "jest", "@testing-library/jest-dom", "@types/chrome"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue