package web import ( "errors" "net/http" "strings" "testing" ) // R-1254 H2 (the household's sentence): a confirm whose upload answer is late or lost must not promise „your previous // code still works" — the hub may hold the new package. Since agent 0.168.0 the agent asks the hub and answers 502 only // when the hub holds ANOTHER package; 504 = unknown. A controller-side transport failure (status 0 — the call itself // timed out while the agent may still store) is unknown too. // RED-PROOF: drop the 504/0 case from escrowConfirmAPIHandler → the default sentence („a régi kódod továbbra is // érvényes") is shown → FAILS. func TestR1254_AnUnknownConfirmOutcomePromisesNothing(t *testing.T) { for _, tc := range []struct { name string status int }{{"agent 504", http.StatusGatewayTimeout}, {"transport failure", 0}} { t.Run(tc.name, func(t *testing.T) { h := newEscrowWizardHarness(t) h.configureOffbox(t, "pending") h.agent.confirmStatus, h.agent.confirmErr = tc.status, errors.New("late") for _, lang := range []string{"hu", "en"} { w := postConfirm(t, h.s, lang, `{"words":["ketto","negy"]}`) low := strings.ToLower(w.Body.String()) // ASCII fragments (the accented forms carry these stems): „régi kódod továbbra is érvényes" / „still works". if strings.Contains(low, "tovabbra is") || strings.Contains(low, "továbbra is") || strings.Contains(low, "still works") { t.Fatalf("%s: an unknown outcome promised the previous code: %s", lang, w.Body.String()) } if !strings.Contains(low, "mindket") && !strings.Contains(low, "mindkét") && !strings.Contains(low, "both") { t.Fatalf("%s: the sentence must tell the household to keep both codes: %s", lang, w.Body.String()) } } if ceremonyStamped(t, h) { t.Fatal("an unknown outcome stamped the ceremony completed") } }) } // Control: the agent says the hub holds another package (502) → the old sentence, now true. h := newEscrowWizardHarness(t) h.configureOffbox(t, "pending") h.agent.confirmStatus, h.agent.confirmErr = http.StatusBadGateway, errors.New("not stored") if w := postConfirm(t, h.s, "en", `{"words":["ketto","negy"]}`); !strings.Contains(w.Body.String(), "still works") { t.Fatalf("502 must keep the store-failed sentence: %s", w.Body.String()) } }