xref: /openbmc/webui-vue/tests/unit/i18n.vendor.spec.js (revision d2483622fc31f6b965a052d0c4f999ad963d0a0f)
1*d2483622Sjason westover// How to run this test in isolation:
2*d2483622Sjason westover//   npm run test:unit -- i18n.vendor.spec.js
3*d2483622Sjason westover// This verifies vendor overlays (e.g., nvidia shared folder) and vendor-root fallback
4*d2483622Sjason westover// without requiring component mounts or full app boot.
5*d2483622Sjason westoverdescribe('i18n vendor overlays', () => {
6*d2483622Sjason westover  const ORIGINAL_ENV = process.env;
7*d2483622Sjason westover  beforeEach(() => {
8*d2483622Sjason westover    jest.resetModules();
9*d2483622Sjason westover    process.env = { ...ORIGINAL_ENV };
10*d2483622Sjason westover    // Ensure default locale is deterministic for the test
11*d2483622Sjason westover    window.localStorage.setItem('storedLanguage', 'en-US');
12*d2483622Sjason westover  });
13*d2483622Sjason westover
14*d2483622Sjason westover  afterEach(() => {
15*d2483622Sjason westover    process.env = ORIGINAL_ENV;
16*d2483622Sjason westover  });
17*d2483622Sjason westover
18*d2483622Sjason westover  test('falls back to vendor root overlays when env has hyphenated suffix', async () => {
19*d2483622Sjason westover    // Simulate running in nvidia-gb but having overlays only in src/env/locales/nvidia
20*d2483622Sjason westover    process.env.VUE_APP_ENV_NAME = 'nvidia-gb';
21*d2483622Sjason westover
22*d2483622Sjason westover    const { createI18nInstance } = await import('@/i18n');
23*d2483622Sjason westover    const vendorEn = require('@/env/locales/nvidia/en-US.json');
24*d2483622Sjason westover    const stubLoader = () => ({ 'en-US': vendorEn.default || vendorEn });
25*d2483622Sjason westover    const i18nInstance = createI18nInstance('nvidia-gb', 'en-US', stubLoader);
26*d2483622Sjason westover
27*d2483622Sjason westover    // System HGX dump is NVIDIA-specific and defined in src/env/locales/nvidia/en-US.json
28*d2483622Sjason westover    const translated = i18nInstance.global.t(
29*d2483622Sjason westover      'pageDumps.dumpTypes.systemHgxDump',
30*d2483622Sjason westover    );
31*d2483622Sjason westover    expect(translated).toBe('System [HGX] dump (disruptive)');
32*d2483622Sjason westover  });
33*d2483622Sjason westover
34*d2483622Sjason westover  test('base locales do not contain vendor-only keys', async () => {
35*d2483622Sjason westover    process.env.VUE_APP_ENV_NAME = undefined;
36*d2483622Sjason westover    const { createI18nInstance } = await import('@/i18n');
37*d2483622Sjason westover    const i18nInstance = createI18nInstance(undefined, 'en-US');
38*d2483622Sjason westover    const translated = i18nInstance.global.t(
39*d2483622Sjason westover      'pageDumps.dumpTypes.systemHgxDump',
40*d2483622Sjason westover    );
41*d2483622Sjason westover    // When no env overlays are loaded, accessing vendor-only keys should return the key path
42*d2483622Sjason westover    expect(translated).toBe('pageDumps.dumpTypes.systemHgxDump');
43*d2483622Sjason westover  });
44*d2483622Sjason westover});
45