import { storeToRefs } from 'pinia'; import { useLanguageStore } from '@/stores/language.store'; import OtaClient from '@crowdin/ota-client'; import { flushPromises } from '@vue/test-utils'; import { MockInstance } from '@vitest/spy'; import { mountAndFakePiniaWrapper } from '@test/plugins/pinia'; describe('language store', () => { let getStringsByLocaleSpy: MockInstance; let listLanguagesSpy: MockInstance; beforeEach(() => { getStringsByLocaleSpy = vi.spyOn(OtaClient.prototype, 'getStringsByLocale').mockResolvedValue({}); listLanguagesSpy = vi.spyOn(OtaClient.prototype, 'listLanguages').mockResolvedValue([]); }); afterEach(() => { getStringsByLocaleSpy.mockRestore(); listLanguagesSpy.mockRestore(); }); it('should have preference default to english', () => { const { preference } = storeToRefs(useLanguageStore()); expect(preference.value).toBe('en-US'); }); it('should have preference default to english', () => { Object.defineProperty(window, 'navigator', { value: { languages: [] }, writable: true // possibility to override }); const { preference } = storeToRefs(useLanguageStore()); expect(preference.value).toBe('en'); }); it('should have preference default to english', () => { Object.defineProperty(window, 'navigator', { value: { languages: undefined, language: 'en-US' }, writable: true // possibility to override }); const { preference } = storeToRefs(useLanguageStore()); expect(preference.value).toBe('en'); }); it('should have preference default to english', () => { Object.defineProperty(window, 'navigator', { value: { languages: undefined, language: undefined }, writable: true // possibility to override }); const { preference } = storeToRefs(useLanguageStore()); expect(preference.value).toBe('en'); }); it('should have language default to preference', () => { const { language } = storeToRefs(useLanguageStore()); expect(language.value).toBe('en-US'); }); it('should query crowdin for locale messages', async () => { const { language } = storeToRefs(useLanguageStore()); language.value = 'xyz'; await flushPromises(); expect(getStringsByLocaleSpy).toHaveBeenCalledWith('xyz'); }); it('should query crowdin for locale messages', async () => { mountAndFakePiniaWrapper(); const { getLanguages } = useLanguageStore(); await flushPromises(); const langs = await getLanguages(); expect(langs).toStrictEqual([]); }); });