package gameprovider import ( "context" "testing" "chatapp3-golang/internal/integration" ) type stubVisibilityGateway struct { region integration.UserRegion } func (s stubVisibilityGateway) GetUserRegion(context.Context, int64, string) (integration.UserRegion, error) { return s.region, nil } const account1007500UserID int64 = 2054163533368717314 func TestVisibilityPolicyAllowsAllRegions(t *testing.T) { tests := []struct { name string region integration.UserRegion }{ { name: "turkey region is visible without wealth gate", region: integration.UserRegion{RegionID: "2046066409959649281", RegionCode: "土耳其"}, }, { name: "south asia region is visible", region: integration.UserRegion{RegionID: "2045389832842178561", RegionCode: "南亚"}, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { policy := NewVisibilityPolicy(stubVisibilityGateway{region: tt.region}) result, err := policy.Evaluate(context.Background(), AuthUser{UserID: account1007500UserID, SysOrigin: "LIKEI"}) if err != nil { t.Fatalf("Evaluate() error = %v", err) } if !result.Allow { t.Fatalf("Evaluate() allow = false, want true") } if result.RegionID != tt.region.RegionID || result.RegionCode != tt.region.RegionCode { t.Fatalf("Evaluate() region = %#v, want %#v", result, tt.region) } }) } } func TestVisibilityPolicySkipsOtherSysOrigin(t *testing.T) { policy := NewVisibilityPolicy(stubVisibilityGateway{ region: integration.UserRegion{RegionID: "2046067036517363714", RegionCode: "AR"}, }) result, err := policy.Evaluate(context.Background(), AuthUser{UserID: 1001, SysOrigin: "ASWAT", RegionID: "r-1", RegionCode: "SA"}) if err != nil { t.Fatalf("Evaluate() error = %v", err) } if !result.Allow { t.Fatalf("Evaluate() allow = false, want true") } if result.RegionID != "r-1" || result.RegionCode != "SA" { t.Fatalf("Evaluate() region = %#v, want user-provided region", result) } } func TestVisibilityPolicyDeniesInvalidUser(t *testing.T) { policy := NewVisibilityPolicy(stubVisibilityGateway{}) result, err := policy.Evaluate(context.Background(), AuthUser{UserID: 0, SysOrigin: "LIKEI"}) if err != nil { t.Fatalf("Evaluate() error = %v", err) } if result.Allow { t.Fatalf("Evaluate() allow = true, want false for invalid user") } }