From 157383748f19c40f524e72b07af02d19529af4d4 Mon Sep 17 00:00:00 2001 From: AdrienLSH Date: Tue, 13 Feb 2024 14:49:38 +0100 Subject: [PATCH] lang: unit tests in django/await first loading of dict --- frontend/static/js/api/LanguageManager.js | 8 ++++++-- frontend/static/js/index.js | 7 ++++++- frontend/tests.py | 23 ++++++++++++++++++++++- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/frontend/static/js/api/LanguageManager.js b/frontend/static/js/api/LanguageManager.js index 06325f2..e74724b 100644 --- a/frontend/static/js/api/LanguageManager.js +++ b/frontend/static/js/api/LanguageManager.js @@ -8,10 +8,10 @@ export default class LanguageManager { this.currentLang = 'en' this.chosenLang = localStorage.getItem('preferedLanguage') || this.currentLang; if (this.chosenLang !== this.currentLang && this.availableLanguages.includes(this.chosenLang)) { - this.translatePage(); + this.loading = this.translatePage(); this.currentLang = this.chosenLang; } else { - this.loadDict(this.chosenLang); + this.loading = this.loadDict(this.chosenLang); } document.getElementById('languageDisplay').innerHTML = document.querySelector(`#languageSelector > [value=${this.currentLang}]`)?.innerHTML; @@ -61,6 +61,10 @@ export default class LanguageManager { this.dict = await response.json(); } + async waitLoading() { + await this.loading; + } + get(key, defaultTxt) { if (!this.dict) return defaultTxt; diff --git a/frontend/static/js/index.js b/frontend/static/js/index.js index 537d1e7..c12354a 100644 --- a/frontend/static/js/index.js +++ b/frontend/static/js/index.js @@ -49,7 +49,10 @@ const navigateTo = async (uri) => { } }; -const reloadView = async _ => renderView(lastView); +const reloadView = async _ => { + await lastView?.leavePage(); + await renderView(lastView); +} async function renderView(view) { @@ -142,10 +145,12 @@ document.addEventListener("DOMContentLoaded", async () => { }); //Languages + await lang.waitLoading(); Array.from(document.getElementById('languageSelector').children).forEach(el => { el.onclick = async _ => { if (await lang.changeLanguage(el.value)) return; + console.log(lang); document.querySelector('#languageSelector > .active')?.classList.remove('active'); el.classList.add('active'); }; diff --git a/frontend/tests.py b/frontend/tests.py index 7ce503c..5ea3c31 100644 --- a/frontend/tests.py +++ b/frontend/tests.py @@ -1,3 +1,24 @@ -from django.test import TestCase +import json +from os import listdir + +from django.test import Client, TestCase +from django.contrib.staticfiles import finders # Create your tests here. + +class DictionnariesTest(TestCase): + def setUp(self) -> None: + self.client = Client(); + self.directory = finders.find('js/lang/'); + + def test_lang(self): + keys = None + + json_files = listdir(self.directory); + for file in json_files: + with open(f'{self.directory}/{file}') as f: + data: dict = json.load(f); + if (keys is None): + keys = set(data.keys()); + else: + self.assertEqual(set(data.keys()), keys);