mirror of
https://github.com/louislam/uptime-kuma.git
synced 2024-11-27 16:54:04 +00:00
[test] add test for i18n currentLocale
This commit is contained in:
parent
11abc1f1e0
commit
01812cc446
7 changed files with 2346 additions and 22 deletions
7
babel.config.js
Normal file
7
babel.config.js
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
const config = {};
|
||||||
|
|
||||||
|
if (process.env.TEST_FRONTEND) {
|
||||||
|
config.presets = ["@babel/preset-env"];
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = config;
|
5
jest-frontend.config.js
Normal file
5
jest-frontend.config.js
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
module.exports = {
|
||||||
|
"rootDir": ".",
|
||||||
|
"testRegex": "./test/frontend.spec.js",
|
||||||
|
};
|
||||||
|
|
|
@ -4,12 +4,8 @@ module.exports = {
|
||||||
"globals": {
|
"globals": {
|
||||||
"__DEV__": true
|
"__DEV__": true
|
||||||
},
|
},
|
||||||
"testRegex": "./test/*.spec.js",
|
"testRegex": "./test/e2e.spec.js",
|
||||||
"rootDir": ".",
|
"rootDir": ".",
|
||||||
"testTimeout": 30000,
|
"testTimeout": 30000,
|
||||||
"transform": {
|
|
||||||
"^.+\\.js$": "babel-jest",
|
|
||||||
".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "jest-transform-stub"
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
2281
package-lock.json
generated
2281
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -22,7 +22,8 @@
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"test": "node test/prepare-test-server.js && node server/server.js --port=3002 --data-dir=./data/test/ --test",
|
"test": "node test/prepare-test-server.js && node server/server.js --port=3002 --data-dir=./data/test/ --test",
|
||||||
"test-with-build": "npm run build && npm test",
|
"test-with-build": "npm run build && npm test",
|
||||||
"jest": "node test/prepare-jest.js && jest",
|
"jest": "node test/prepare-jest.js && npm run jest-frontend && jest ",
|
||||||
|
"jest-frontend": "cross-env TEST_FRONTEND=1 jest --config=./jest-frontend.config.js",
|
||||||
"tsc": "tsc",
|
"tsc": "tsc",
|
||||||
"vite-preview-dist": "vite preview --host",
|
"vite-preview-dist": "vite preview --host",
|
||||||
"build-docker": "npm run build-docker-debian && npm run build-docker-alpine",
|
"build-docker": "npm run build-docker-debian && npm run build-docker-alpine",
|
||||||
|
@ -98,6 +99,7 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/eslint-parser": "~7.15.7",
|
"@babel/eslint-parser": "~7.15.7",
|
||||||
|
"@babel/preset-env": "^7.15.8",
|
||||||
"@types/bootstrap": "~5.1.6",
|
"@types/bootstrap": "~5.1.6",
|
||||||
"@vitejs/plugin-legacy": "~1.6.1",
|
"@vitejs/plugin-legacy": "~1.6.1",
|
||||||
"@vitejs/plugin-vue": "~1.9.2",
|
"@vitejs/plugin-vue": "~1.9.2",
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
const { Page, Browser } = require("puppeteer");
|
const { Page, Browser } = require("puppeteer");
|
||||||
const { sleep } = require("../src/util");
|
const { sleep } = require("../src/util");
|
||||||
const axios = require("axios");
|
const axios = require("axios");
|
||||||
const { currentLocale } = require("../src/i18n");
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set back the correct data type for page object
|
* Set back the correct data type for page object
|
||||||
|
@ -37,7 +36,7 @@ describe("Init", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should be titled "${title}"`, async () => {
|
it(`should be titled "${title}"`, async () => {
|
||||||
await expect(page.title()).resolves.toMatch(title);
|
await expect(page.title()).resolves.toEqual(title);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Setup Page
|
// Setup Page
|
||||||
|
@ -76,11 +75,11 @@ describe("Init", () => {
|
||||||
|
|
||||||
await page.select("#language", "zh-HK");
|
await page.select("#language", "zh-HK");
|
||||||
let languageTitle = await page.evaluate(() => document.querySelector("[for=language]").innerText);
|
let languageTitle = await page.evaluate(() => document.querySelector("[for=language]").innerText);
|
||||||
expect(languageTitle).toMatch("語言");
|
expect(languageTitle).toEqual("語言");
|
||||||
|
|
||||||
await page.select("#language", "en");
|
await page.select("#language", "en");
|
||||||
languageTitle = await page.evaluate(() => document.querySelector("[for=language]").innerText);
|
languageTitle = await page.evaluate(() => document.querySelector("[for=language]").innerText);
|
||||||
expect(languageTitle).toMatch("Language");
|
expect(languageTitle).toEqual("Language");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Change Theme", async () => {
|
it("Change Theme", async () => {
|
||||||
|
@ -104,21 +103,21 @@ describe("Init", () => {
|
||||||
it("Search Engine Visibility", async () => {
|
it("Search Engine Visibility", async () => {
|
||||||
// Default
|
// Default
|
||||||
let res = await axios.get(baseURL + "/robots.txt");
|
let res = await axios.get(baseURL + "/robots.txt");
|
||||||
expect(res.data).toMatch("Disallow: /");
|
expect(res.data).toContain("Disallow: /");
|
||||||
|
|
||||||
// Yes
|
// Yes
|
||||||
await click(page, "#searchEngineIndexYes");
|
await click(page, "#searchEngineIndexYes");
|
||||||
await click(page, "form > div > .btn[type=submit]");
|
await click(page, "form > div > .btn[type=submit]");
|
||||||
await sleep(2000);
|
await sleep(2000);
|
||||||
res = await axios.get(baseURL + "/robots.txt");
|
res = await axios.get(baseURL + "/robots.txt");
|
||||||
expect(res.data).not.toMatch("Disallow: /");
|
expect(res.data).not.toContain("Disallow: /");
|
||||||
|
|
||||||
// No
|
// No
|
||||||
await click(page, "#searchEngineIndexNo");
|
await click(page, "#searchEngineIndexNo");
|
||||||
await click(page, "form > div > .btn[type=submit]");
|
await click(page, "form > div > .btn[type=submit]");
|
||||||
await sleep(2000);
|
await sleep(2000);
|
||||||
res = await axios.get(baseURL + "/robots.txt");
|
res = await axios.get(baseURL + "/robots.txt");
|
||||||
expect(res.data).toMatch("Disallow: /");
|
expect(res.data).toContain("Disallow: /");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Entry Page", async () => {
|
it("Entry Page", async () => {
|
||||||
|
@ -219,19 +218,11 @@ describe("Init", () => {
|
||||||
await page.goto(baseURL + "/status");
|
await page.goto(baseURL + "/status");
|
||||||
});
|
});
|
||||||
it(`should be titled "${title}"`, async () => {
|
it(`should be titled "${title}"`, async () => {
|
||||||
await expect(page.title()).resolves.toMatch(title);
|
await expect(page.title()).resolves.toEqual(title);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("Test i18n.js", () => {
|
|
||||||
|
|
||||||
it("currentLocale()", () => {
|
|
||||||
expect(currentLocale()).toMatch("");
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
async function login(username, password) {
|
async function login(username, password) {
|
||||||
await input(page, "#floatingInput", username);
|
await input(page, "#floatingInput", username);
|
||||||
await input(page, "#floatingPassword", password);
|
await input(page, "#floatingPassword", password);
|
42
test/frontend.spec.js
Normal file
42
test/frontend.spec.js
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// eslint-disable-next-line no-global-assign
|
||||||
|
global.localStorage = {};
|
||||||
|
global.navigator = {
|
||||||
|
language: "en"
|
||||||
|
};
|
||||||
|
|
||||||
|
const { currentLocale } = require("../src/i18n");
|
||||||
|
|
||||||
|
describe("Test i18n.js", () => {
|
||||||
|
|
||||||
|
it("currentLocale()", () => {
|
||||||
|
expect(currentLocale()).toEqual("en");
|
||||||
|
|
||||||
|
navigator.language = "zh-HK";
|
||||||
|
expect(currentLocale()).toEqual("zh-HK");
|
||||||
|
|
||||||
|
// Note that in Safari on iOS prior to 10.2, the country code returned is lowercase: "en-us", "fr-fr" etc.
|
||||||
|
// https://developer.mozilla.org/en-US/docs/Web/API/Navigator/language
|
||||||
|
navigator.language = "zh-hk";
|
||||||
|
expect(currentLocale()).toEqual("en");
|
||||||
|
|
||||||
|
navigator.language = "en-US";
|
||||||
|
expect(currentLocale()).toEqual("en");
|
||||||
|
|
||||||
|
navigator.language = "ja-ZZ";
|
||||||
|
expect(currentLocale()).toEqual("ja");
|
||||||
|
|
||||||
|
navigator.language = "zz";
|
||||||
|
expect(currentLocale()).toEqual("en");
|
||||||
|
|
||||||
|
navigator.language = "zz-ZZ";
|
||||||
|
expect(currentLocale()).toEqual("en");
|
||||||
|
|
||||||
|
localStorage.locale = "en";
|
||||||
|
expect(currentLocale()).toEqual("en");
|
||||||
|
|
||||||
|
localStorage.locale = "zh-HK";
|
||||||
|
expect(currentLocale()).toEqual("zh-HK");
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
Loading…
Reference in a new issue