diff --git a/config/cypress.frontend.config.js b/config/cypress.frontend.config.js new file mode 100644 index 00000000..eecdcb8d --- /dev/null +++ b/config/cypress.frontend.config.js @@ -0,0 +1,10 @@ +const { defineConfig } = require("cypress"); + +module.exports = defineConfig({ + e2e: { + supportFile: false, + specPattern: [ + "test/cypress/unit/**/*.js" + ], + } +}); diff --git a/package.json b/package.json index ebe305f9..190ef247 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "start-pr-test": "node extra/checkout-pr.js && npm install && npm run dev", "cy:test": "node test/prepare-test-server.js && node server/server.js --port=3002 --data-dir=./data/test/ --e2e", "cy:run": "npx cypress run --browser chrome --headless --config-file ./config/cypress.config.js", + "cy:run:unit": "npx cypress run --browser chrome --headless --config-file ./config/cypress.frontend.config.js", "cypress-open": "concurrently -k -r \"node test/prepare-test-server.js && node server/server.js --port=3002 --data-dir=./data/test/\" \"cypress open --config-file ./config/cypress.config.js\"", "build-healthcheck-armv7": "cross-env GOOS=linux GOARCH=arm GOARM=7 go build -x -o ./extra/healthcheck-armv7 ./extra/healthcheck.go" }, diff --git a/test/cypress/unit/i18n.spec.js b/test/cypress/unit/i18n.spec.js new file mode 100644 index 00000000..da63d95a --- /dev/null +++ b/test/cypress/unit/i18n.spec.js @@ -0,0 +1,44 @@ +import { currentLocale } from "../../../src/i18n"; + +describe("Test i18n.js", () => { + + it("currentLocale()", () => { + const setLanguage = (language) => { + Object.defineProperty(window.navigator, 'language', { + value: language, + writable: true + }); + } + setLanguage('en-EN'); + + expect(currentLocale()).equal("en"); + + setLanguage('zh-HK'); + expect(currentLocale()).equal("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 + setLanguage('zh-hk'); + expect(currentLocale()).equal("en"); + + setLanguage('en-US'); + expect(currentLocale()).equal("en"); + + setLanguage('ja-ZZ'); + expect(currentLocale()).equal("ja"); + + setLanguage('zz-ZZ'); + expect(currentLocale()).equal("en"); + + setLanguage('zz-ZZ'); + expect(currentLocale()).equal("en"); + + setLanguage('en'); + localStorage.locale = "en"; + expect(currentLocale()).equal("en"); + + localStorage.locale = "zh-HK"; + expect(currentLocale()).equal("zh-HK"); + }); + +}); \ No newline at end of file