package gameprovider import ( "context" "testing" "chatapp3-golang/internal/integration" ) type stubVisibilityGateway struct { region integration.UserRegion level integration.UserLevel targetRegionCode string } func (s stubVisibilityGateway) GetUserRegion(context.Context, int64, string) (integration.UserRegion, error) { return s.region, nil } func (s stubVisibilityGateway) GetUserLevel(context.Context, string, int64) (integration.UserLevel, error) { return s.level, nil } func (s stubVisibilityGateway) ResolveRegionCodeByCountryCode(context.Context, string, string) (string, error) { return s.targetRegionCode, nil } type stubIPCountryResolver struct { countryCode string } func (s stubIPCountryResolver) CountryCode(context.Context, string) (string, error) { return s.countryCode, nil } func TestVisibilityPolicyAllowsTurkeyRegionTurkeyIPAndWealthLevel2(t *testing.T) { policy := NewVisibilityPolicy( stubVisibilityGateway{ region: integration.UserRegion{RegionID: "2046066409959649281", RegionCode: "TR"}, level: integration.UserLevel{WealthLevel: 2}, targetRegionCode: "TR", }, stubIPCountryResolver{countryCode: "TR"}, ) result, err := policy.Evaluate(context.Background(), AuthUser{UserID: 1001, SysOrigin: "LIKEI"}, "1.1.1.1") if err != nil { t.Fatalf("Evaluate() error = %v", err) } if !result.Allow { t.Fatalf("Evaluate() allow = false, want true") } if result.RegionID != "2046066409959649281" || result.RegionCode != "TR" { t.Fatalf("Evaluate() region = %#v", result) } } func TestVisibilityPolicyDeniesNonTurkeyIP(t *testing.T) { policy := NewVisibilityPolicy( stubVisibilityGateway{ region: integration.UserRegion{RegionID: "2046066409959649281", RegionCode: "TR"}, level: integration.UserLevel{WealthLevel: 2}, targetRegionCode: "TR", }, stubIPCountryResolver{countryCode: "SA"}, ) result, err := policy.Evaluate(context.Background(), AuthUser{UserID: 1001, SysOrigin: "LIKEI"}, "1.1.1.1") if err != nil { t.Fatalf("Evaluate() error = %v", err) } if result.Allow { t.Fatalf("Evaluate() allow = true, want false") } } func TestVisibilityPolicyDeniesLowWealthLevel(t *testing.T) { policy := NewVisibilityPolicy( stubVisibilityGateway{ region: integration.UserRegion{RegionID: "2046066409959649281", RegionCode: "TR"}, level: integration.UserLevel{WealthLevel: 1}, targetRegionCode: "TR", }, stubIPCountryResolver{countryCode: "TR"}, ) result, err := policy.Evaluate(context.Background(), AuthUser{UserID: 1001, SysOrigin: "LIKEI"}, "1.1.1.1") if err != nil { t.Fatalf("Evaluate() error = %v", err) } if result.Allow { t.Fatalf("Evaluate() allow = true, want false") } } func TestVisibilityPolicyDeniesNonTurkeyRegion(t *testing.T) { policy := NewVisibilityPolicy( stubVisibilityGateway{ region: integration.UserRegion{RegionID: "2046067036517363714", RegionCode: "AR"}, level: integration.UserLevel{WealthLevel: 2}, targetRegionCode: "TR", }, stubIPCountryResolver{countryCode: "TR"}, ) result, err := policy.Evaluate(context.Background(), AuthUser{UserID: 1001, SysOrigin: "LIKEI"}, "1.1.1.1") if err != nil { t.Fatalf("Evaluate() error = %v", err) } if result.Allow { t.Fatalf("Evaluate() allow = true, want false") } } func TestVisibilityPolicySkipsOtherSysOrigin(t *testing.T) { policy := NewVisibilityPolicy( stubVisibilityGateway{ region: integration.UserRegion{RegionID: "2046067036517363714", RegionCode: "AR"}, level: integration.UserLevel{WealthLevel: 0}, targetRegionCode: "TR", }, stubIPCountryResolver{countryCode: "SA"}, ) result, err := policy.Evaluate(context.Background(), AuthUser{UserID: 1001, SysOrigin: "ASWAT"}, "1.1.1.1") if err != nil { t.Fatalf("Evaluate() error = %v", err) } if !result.Allow { t.Fatalf("Evaluate() allow = false, want true") } }