133 lines
3.9 KiB
Go
133 lines
3.9 KiB
Go
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")
|
|
}
|
|
}
|