feat(go): M6.6.1 — QR payment popup modal on /adults and /juniors
All checks were successful
Deploy to K8s / deploy (push) Successful in 9s

Replace bare <a href=/qr> Pay buttons with <button data-*> elements that
open an in-page #qrModal (matching Python's showPayQR UX), driven by a
new payment-qr.js vanilla-JS IIFE module.  Remove the now-dead qrHref /
qrHrefAll template helpers from render.go.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-08 14:49:35 +02:00
parent fe935235e8
commit 919845518c
7 changed files with 501 additions and 38 deletions

View File

@@ -314,6 +314,52 @@ func TestServeSync(t *testing.T) {
}
}
func TestPaymentQRMarkup(t *testing.T) {
renderer, err := web.NewRenderer()
if err != nil {
t.Fatalf("NewRenderer: %v", err)
}
b := web.BuildInfo{Version: "v0", Commit: "abc1234", BuildDate: "2026-01-01"}
h := web.NewHTMLHandler(renderer, b, fixtureHandler(t), web.ActionHandlers{})
cases := []struct {
path string
handler http.HandlerFunc
}{
{"/adults", h.ServeAdults},
{"/juniors", h.ServeJuniors},
}
for _, tc := range cases {
t.Run(tc.path, func(t *testing.T) {
req := httptest.NewRequest(http.MethodGet, tc.path, nil)
w := httptest.NewRecorder()
tc.handler(w, req)
body := w.Body.String()
for _, want := range []string{
`id="qrModal"`,
`id="qrImg"`,
`id="qrTitle"`,
`id="qrAccount"`,
`id="qrAmount"`,
`id="qrMessage"`,
`/static/js/payment-qr.js`,
`data-bank-account="CZ0000000000000000000000"`,
} {
if !strings.Contains(body, want) {
t.Errorf("body missing %q", want)
}
}
// Pay buttons must use <button>, never a bare href to /qr.
if strings.Contains(body, `href="/qr`) {
t.Error("body must not contain href=/qr (Pay buttons should be <button>, not <a>)")
}
})
}
}
func TestServeVersion(t *testing.T) {
req := httptest.NewRequest(http.MethodGet, "/api/version", nil)
w := httptest.NewRecorder()