695508042a
Tests · Go / test (push) Successful in 6s
Tests · Integration / integration (push) Successful in 11s
Tests · UI / test (push) Successful in 18s
Tests · Go / test (pull_request) Successful in 6s
Tests · Integration / integration (pull_request) Successful in 12s
Tests · UI / test (pull_request) Successful in 18s
Lock the polish behaviours so a future edit surfaces as a failing test: - backend: UpdateProfile now rejects a bad name layout, an away window over 12h, and a malformed offset timezone (confirming it wires the Stage 8 validators); a new integration test accepts and resolves a "+03:00" offset timezone. - e2e (mock): the lobby notification badge count, the play-with-friends required game type + invitation send, the in-game add-to-friends flipping to a disabled "request sent", the profile-edit invalid-name Save guard, and the chat send/nudge icon buttons.
42 lines
1.5 KiB
Go
42 lines
1.5 KiB
Go
package account
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// TestUpdateProfileValidation checks that bad fields are rejected before any
|
|
// database access, so a nil-backed Store is enough to exercise the guards. It also
|
|
// confirms UpdateProfile wires the Stage 8 validators (name format, away window,
|
|
// offset/IANA timezone), not just their unit tests in validate_test.go.
|
|
func TestUpdateProfileValidation(t *testing.T) {
|
|
s := &Store{}
|
|
base := ProfileUpdate{DisplayName: "Kaya", PreferredLanguage: "en", TimeZone: "UTC"}
|
|
hm := func(h, m int) time.Time { return time.Date(0, 1, 1, h, m, 0, 0, time.UTC) }
|
|
tests := []struct {
|
|
name string
|
|
mut func(p *ProfileUpdate)
|
|
}{
|
|
{"unknown language", func(p *ProfileUpdate) { p.PreferredLanguage = "fr" }},
|
|
{"invalid timezone", func(p *ProfileUpdate) { p.TimeZone = "Mars/Olympus" }},
|
|
{"bad offset timezone", func(p *ProfileUpdate) { p.TimeZone = "+15:00" }},
|
|
{"over-long name", func(p *ProfileUpdate) { p.DisplayName = strings.Repeat("x", maxDisplayName+1) }},
|
|
{"bad name layout", func(p *ProfileUpdate) { p.DisplayName = "Bad__Name" }},
|
|
{"away over 12h", func(p *ProfileUpdate) { p.AwayStart, p.AwayEnd = hm(8, 0), hm(21, 0) }},
|
|
}
|
|
for _, tc := range tests {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
p := base
|
|
tc.mut(&p)
|
|
if _, err := s.UpdateProfile(context.Background(), uuid.New(), p); !errors.Is(err, ErrInvalidProfile) {
|
|
t.Fatalf("err = %v, want ErrInvalidProfile", err)
|
|
}
|
|
})
|
|
}
|
|
}
|