fix: follow-ups of the lot-v018 stack reviews #482

Merged
maximus merged 25 commits from review-followups-lot-v018 into main 2026-10-21 00:31:46 +00:00
Showing only changes of commit ffe6288e4a - Show all commits

View file

@ -24,6 +24,9 @@ vi.mock("../services/db", () => {
import { readFileSync } from "fs"; import { readFileSync } from "fs";
import { resolve } from "path"; import { resolve } from "path";
import i18next from "i18next";
import fr from "../i18n/locales/fr.json";
import en from "../i18n/locales/en.json";
import { import {
wizardReducer, wizardReducer,
initialWizardState, initialWizardState,
@ -271,6 +274,35 @@ describe("sampleFolderError — the refusals of create_sample_import_folders (#3
expect(sampleFolderError("invalid_date")).toEqual({ key: "import.empty.sampleErrors.invalidDate" }); expect(sampleFolderError("invalid_date")).toEqual({ key: "import.empty.sampleErrors.invalidDate" });
}); });
it("the real messages name the folder, in French and in English, as the banner renders them", async () => {
// The tests of the page take the marked `t`, and the key guard (#453)
// compares no value: only the real locale files, through a real i18next
// with the app's options, prove the `{{name}}` of the message.
const i18n = i18next.createInstance();
await i18n.init({
resources: { fr: { translation: fr }, en: { translation: en } },
lng: "fr",
fallbackLng: "en",
interpolation: { escapeValue: false },
});
for (const lng of ["fr", "en"]) {
const t = i18n.getFixedT(lng);
for (const name of ["Exemple Desjardins", "Exemple Tangerine"]) {
const error = sampleFolderError(`sample_folder_exists:${name}`)!;
// ImportPage: t(state.error, { ...errorValues, defaultValue: state.error }).
const text = t(error.key, { ...error.values, defaultValue: error.key });
expect(text, `${lng} ${name}`).toContain(name);
expect(text, `${lng} ${name}`).not.toContain("{{");
}
for (const code of ["import_folder_missing", "invalid_date"]) {
const error = sampleFolderError(code)!;
const text = t(error.key, { defaultValue: error.key });
expect(text, `${lng} ${code}`).not.toBe(error.key);
expect(text, `${lng} ${code}`).not.toContain("{{");
}
}
});
it("any other message is unknown, so the banner shows it raw", () => { it("any other message is unknown, so the banner shows it raw", () => {
for (const raw of [ for (const raw of [
"Cannot write Exemple Desjardins/releve-2026-09.csv: Permission denied (os error 13)", "Cannot write Exemple Desjardins/releve-2026-09.csv: Permission denied (os error 13)",