| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- /**
- * @file Tests for the locale service.
- * @author Inigo Valentin
- * @since 4.0.0
- */
- // This fixes some encoding errors with Jest
- require('../../node_modules/mysql2/node_modules/iconv-lite/lib').encodingExists('foo');
- const httpMocks = require('node-mocks-http');
- const dotenv = require('dotenv');
- dotenv.config({path: './env/test.env'});
- const Lang = require("../models").langs;
- const Text = require("../models").texts;
- const LocaleService = require("./locale.service.js");
- test('Select language - empty request, english exists', async () => {
- const req = {query: {}, body: {}};
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const lang = localeService.selectLanguage(req);
- expect(lang).toBe("en");
- });
- test('Select language - empty request, english doesn\'t exists', async () => {
- const req = {query: {}, body: {}};
- var testLangs = []
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const lang = localeService.selectLanguage(req);
- expect(lang).toBe("eu");
- });
- test('Select language - empty request, no languages defined', async () => {
- const req = {query: {}, body: {}};
- var testLangs = []
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const lang = localeService.selectLanguage(req);
- expect(lang).toBe("en");
- });
- test('Select language - existing language in query', async () => {
- const req = {query: {lang: "es"}, body: {}};
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const lang = localeService.selectLanguage(req);
- expect(lang).toBe("es");
- });
- test('Select language - existing language in body', async () => {
- const req = {query: {}, body: {lang: "es"}};
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const lang = localeService.selectLanguage(req);
- expect(lang).toBe("es");
- });
- test('Select language - non-existing language in query', async () => {
- const req = {query: {lang: "eu"}, body: {}};
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const lang = localeService.selectLanguage(req);
- expect(lang).toBe("en");
- });
- test('Select language - existing language in body', async () => {
- const req = {query: {}, body: {lang: "eu"}};
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const lang = localeService.selectLanguage(req);
- expect(lang).toBe("en");
- });
- test('Select language - existing but conflicting languages in in query and body', async () => {
- const req = {query: {lang: "es"}, body: {lang: "eu"}};
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const lang = localeService.selectLanguage(req);
- expect(lang).toBe("eu");
- });
- test('Select language - non existing and conflicting languages in in query and body', async () => {
- const req = {query: {lang: "ru"}, body: {lang: "ja"}};
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const lang = localeService.selectLanguage(req);
- expect(lang).toBe("en");
- });
- test('Select language - existing language in query, non existing language in body', async () => {
- const req = {query: {lang: "es"}, body: {lang: "ru"}};
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const lang = localeService.selectLanguage(req);
- expect(lang).toBe("es");
- });
- test('Select language - non-existing language in query, existing language in body', async () => {
- const req = {query: {lang: "ru"}, body: {lang: "es"}};
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const lang = localeService.selectLanguage(req);
- expect(lang).toBe("es");
- });
- test('Generate localized object - all available languages included', async () => {
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const obj = localeService.generateLocalizedObject('{"es": "testes", "en": "testen", "eu": "testeu"}', "key", "section");
- expect(obj.valid).toBe(true);
- expect(obj.key).toBe("key");
- expect(obj.section).toBe("section");
- expect(Reflect.ownKeys(obj.texts).length).toBe(3);
- expect(obj.texts.es).toBe("testes");
- expect(obj.texts.en).toBe("testen");
- expect(obj.texts.eu).toBe("testeu");
- });
- test('Generate localized object - some available languages included', async () => {
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const obj = localeService.generateLocalizedObject('{"es": "testes", "en": "testen"}', "key", "section");
- expect(obj.valid).toBe(true);
- expect(obj.key).toBe("key");
- expect(obj.section).toBe("section");
- expect(Reflect.ownKeys(obj.texts).length).toBe(2);
- expect(obj.texts.es).toBe("testes");
- expect(obj.texts.en).toBe("testen");
- expect(obj.texts.eu).toBe(undefined);
- });
- test('Generate localized object - available and unavailablelanguages included', async () => {
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const obj = localeService.generateLocalizedObject('{"es": "testes", "en": "testen", "ru": "testru"}', "key", "section");
- expect(obj.valid).toBe(true);
- expect(obj.key).toBe("key");
- expect(obj.section).toBe("section");
- expect(Reflect.ownKeys(obj.texts).length).toBe(2);
- expect(obj.texts.es).toBe("testes");
- expect(obj.texts.en).toBe("testen");
- expect(obj.texts.eu).toBe(undefined);
- expect(obj.texts.ru).toBe(undefined);
- });
- test('Generate localized object - no available languages included', async () => {
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const obj = localeService.generateLocalizedObject('{"ru": "testru", "ja": "testja"}', "key", "section");
- expect(obj.valid).toBe(false);
- });
- test('Generate localized object - available languages included, duplicated, both the same', async () => {
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const obj = localeService.generateLocalizedObject('{"es": "testes", "es": "testes"}', "key", "section");
- expect(obj.valid).toBe(true);
- expect(obj.key).toBe("key");
- expect(obj.section).toBe("section");
- expect(Reflect.ownKeys(obj.texts).length).toBe(1);
- expect(obj.texts.es).toBe("testes");
- expect(obj.texts.en).toBe(undefined);
- expect(obj.texts.eu).toBe(undefined);
- });
- test('Generate localized object - available languages included, duplicated, both different', async () => {
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const obj = localeService.generateLocalizedObject('{"es": "testes1", "es": "testes2"}', "key", "section");
- expect(obj.valid).toBe(true);
- expect(obj.key).toBe("key");
- expect(obj.section).toBe("section");
- expect(Reflect.ownKeys(obj.texts).length).toBe(1);
- expect(obj.texts.es).toBe("testes2");
- expect(obj.texts.en).toBe(undefined);
- expect(obj.texts.eu).toBe(undefined);
- });
- test('Generate localized object - valid object, no key', async () => {
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const obj = localeService.generateLocalizedObject('{"es": "testes", "en": "testen", "eu": "testeu"}', null, "section");
- expect(obj.valid).toBe(false);
- });
- test('Generate localized object - valid object, no section', async () => {
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const obj = localeService.generateLocalizedObject('{"es": "testes", "en": "testen", "eu": "testeu"}', "key", null);
- expect(obj.valid).toBe(false);
- });
- test('Generate localized object - bad object', async () => {
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const obj = localeService.generateLocalizedObject("bad", "key", "section");
- expect(obj.valid).toBe(false);
- });
- test('Save localized object - valid object', async () => {
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- jest.spyOn(Text, 'create').mockImplementation((options) => Promise.resolve(true));
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const obj = localeService.generateLocalizedObject('{"es": "testes", "en": "testen", "eu": "testeu"}', "key", "section");
- expect(await localeService.saveLocalizedObject(obj)).toBe(true);
- });
- test('Save localized object - invalid object', async () => {
- var testLangs = []
- testLangs.push(Lang.build({'code': 'en', 'name': 'English', 'priority': 1, 'active': true}));
- testLangs.push(Lang.build({'code': 'es', 'name': 'Espanol', 'priority': 2, 'active': true}));
- testLangs.push(Lang.build({'code': 'eu', 'name': 'Euskara', 'priority': 3, 'active': true}));
- jest.spyOn(Lang, 'findAll').mockImplementation(() => testLangs);
- jest.spyOn(Text, 'create').mockImplementation((options) => Promise.resolve(true));
- const localeService = new LocaleService();
- await new Promise((r) => setTimeout(r, 30));
- const obj = localeService.generateLocalizedObject('{"es": "testes", "en": "testen", "eu": "testeu"}', "key", null);
- expect(await localeService.saveLocalizedObject(obj)).toBe(false);
- });
- // TODO: Implement test for localization functions once they are complete
|