Grinden talar organisationens språk — engelska som standard
Kvalitetsgrinden formulerade sina hinder på svenska, hårdkodat. I en produkt där engelska är standardspråket betyder det att en spärr kan neka ett avslut på ett språk teknikern inte läser. Det är en spärr utan väg förbi: teknikern ser att systemet vägrar men inte varför, och den enda utvägen blir att ringa någon. Det är då regeln slutar vara en regel och blir ett hinder man lär sig kringgå. Varje hinder bär nu både nyckel och färdig text. Nyckeln därför att en klient som byter språk ska kunna rendera om utan att fråga servern; texten därför att ett hinder som hamnar i en logg eller en PDF måste gå att läsa utan katalogen. Hindrets id och nyckel är språkoberoende — det är bara texten som byter. Språket är organisationens, inte användarens. En verkstad i Tyskland med en polsk tekniker ska ha ett gemensamt dokumentationsspråk; rapporten ska inte byta språk beroende på vem som råkade stänga ärendet. Det lagras i organisationens inställningar, och en felstavad landskod blir engelska i stället för ett fel — språkinställningen är en etikett och ska inte hindra någon från att spara sina objekttyper. SPARRFRAGOR bär nu nycklar i stället för svensk text. Testet som jämför serverns lista med klientens jämför nycklar, så listorna kan fortfarande inte glida isär. Två tester prövade svenska ord i grindens utdata och gick sönder, vilket var rätt av dem. De prövar nu nyckeln — texten är översatt och byter språk med organisationen, och att pröva svenska ord hade gjort dem till tester av vilket språk som råkar vara standard. Ett nytt test prövar det som faktiskt betyder något: samma id, samma nyckel, olika text. Integrationstestet följer språket hela vägen — organisationens inställning, genom servern, ut i det 409-svar som nekar avslutet: engelska som standard, tyska efter byte, engelska igen vid okänd kod. 582 tester, 186 integrationskontroller mot riktig Postgres, genomgång och portalspärr gröna. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
This commit is contained in:
@@ -10,6 +10,7 @@ import { describe, expect, it } from "vitest";
|
||||
import { granskaHändelse, tillPost } from "../../../../services/gemensam/handelser.mjs";
|
||||
import { SPARRFRAGOR as SPARR_SERVER, grinda, grindaArendetyp } from "../../../../services/gemensam/grind.mjs";
|
||||
import { ALLA_METODIKER } from "../../../../services/gemensam/metodiker.mjs";
|
||||
import { t } from "../../../../services/gemensam/sprak/index.mjs";
|
||||
import { SPARRFRAGOR } from "../metodik";
|
||||
|
||||
const GENERISK = ALLA_METODIKER.at(-1)!;
|
||||
@@ -203,7 +204,8 @@ describe("ärendetypens regelpaket", () => {
|
||||
it("en okänd kravtyp spärrar i stället för att tolkas som uppfylld", () => {
|
||||
const trasigt = { arendetyper: { Garanti: { krav: [{ typ: "hittepa" }] } } };
|
||||
const logg = [{ typ: "arendetyp_satt", arendetyp: "Garanti" }];
|
||||
expect(grindaArendetyp(logg, trasigt)[0].rubrik).toMatch(/Okänt krav/);
|
||||
expect(grindaArendetyp(logg, trasigt)[0].nyckel).toBe("grind.arendetyp.okant");
|
||||
expect(grindaArendetyp(logg, trasigt)[0].rubrik).toContain("hittepa");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -470,8 +472,24 @@ describe("mätarställningen ska vara fotograferad, inte bara inskriven", () =>
|
||||
});
|
||||
|
||||
it("hindret säger vad som saknas och vad man gör åt det", () => {
|
||||
// Prövas mot nyckeln, inte mot texten: texten är översatt och byter
|
||||
// språk med organisationen. Att pröva svenska ord här hade gjort
|
||||
// testet till ett test av vilket språk som råkar vara standard.
|
||||
const h = grinda(utanFoto(), GENERISK).find((x) => x.id === "matarstallning_ingaende");
|
||||
expect(h.detalj).toMatch(/fotografera/i);
|
||||
expect(h.detaljNyckel).toBe("grind.matarstallning.ej_foto");
|
||||
expect(h.detalj).toBe(t("en", "grind.matarstallning.ej_foto"));
|
||||
});
|
||||
|
||||
it("hindret följer organisationens språk", () => {
|
||||
// Det som faktiskt betyder något i drift: en tysk verkstad ska få
|
||||
// veta på tyska varför avslutet nekas. Ett hinder ingen förstår är
|
||||
// en spärr utan väg förbi.
|
||||
const engelska = grinda(utanFoto(), GENERISK).find((x) => x.id === "matarstallning_ingaende");
|
||||
const tyska = grinda(utanFoto(), GENERISK, "de").find((x) => x.id === "matarstallning_ingaende");
|
||||
expect(tyska.id).toBe(engelska.id);
|
||||
expect(tyska.nyckel).toBe(engelska.nyckel);
|
||||
expect(tyska.rubrik).not.toBe(engelska.rubrik);
|
||||
expect(tyska.rubrik).toBe(t("de", "grind.matarstallning.ingaende"));
|
||||
});
|
||||
|
||||
it("ett dataUrl-foto duger lika bra som en bilaga", () => {
|
||||
|
||||
Reference in New Issue
Block a user