2026-06-08 14:12:23 +08:00

62 lines
1.8 KiB
Go

package cprelation
import (
"errors"
"testing"
)
func TestNormalizeRelationsForcesCPMaxCountAndKeepsSiblingLimits(t *testing.T) {
relations, err := normalizeRelations([]relationDTO{
relationInput(relationTypeCP, 99),
relationInput(relationTypeBrother, 7),
relationInput(relationTypeSister, 8),
})
if err != nil {
t.Fatalf("normalizeRelations() error = %v", err)
}
got := map[string]int32{}
for _, relation := range relations {
got[relation.RelationType] = relation.MaxCountPerUser
}
if got[relationTypeCP] != 1 {
t.Fatalf("CP max count = %d, want 1", got[relationTypeCP])
}
if got[relationTypeBrother] != 7 {
t.Fatalf("brother max count = %d, want 7", got[relationTypeBrother])
}
if got[relationTypeSister] != 8 {
t.Fatalf("sister max count = %d, want 8", got[relationTypeSister])
}
}
func TestNormalizeRelationsRequiresIncreasingLevelThresholds(t *testing.T) {
input := relationInput(relationTypeBrother, 5)
input.Levels[2].IntimacyThreshold = input.Levels[1].IntimacyThreshold
_, err := normalizeRelations([]relationDTO{
relationInput(relationTypeCP, 1),
input,
relationInput(relationTypeSister, 5),
})
if !errors.Is(err, ErrInvalidArgument) {
t.Fatalf("normalizeRelations() error = %v, want ErrInvalidArgument", err)
}
}
func relationInput(relationType string, maxCount int32) relationDTO {
return relationDTO{
RelationType: relationType,
MaxCountPerUser: maxCount,
ApplicationExpireHours: defaultExpireHours,
Status: statusActive,
Levels: []levelDTO{
{Level: 1, IntimacyThreshold: 0, Status: statusActive},
{Level: 2, IntimacyThreshold: 10_000, Status: statusActive},
{Level: 3, IntimacyThreshold: 30_000, Status: statusActive},
{Level: 4, IntimacyThreshold: 60_000, Status: statusActive},
{Level: 5, IntimacyThreshold: 100_000, Status: statusActive},
},
}
}