chore: refresh gramsrv public release
This commit is contained in:
parent
75cebe8dbf
commit
70b6820474
1274 changed files with 378751 additions and 59919 deletions
93
internal/domain/boost_test.go
Normal file
93
internal/domain/boost_test.go
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
package domain
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestPremiumBoostStatusDefaultPolicyIsBoundedLinear(t *testing.T) {
|
||||
peer := Peer{Type: PeerTypeChannel, ID: 100}
|
||||
|
||||
empty := PremiumBoostStatusForCount(peer, 0, nil)
|
||||
if empty.Level != 0 || empty.CurrentLevelBoosts != 0 || empty.Boosts != 0 || empty.NextLevelBoosts != 1 || !empty.HasNextLevelBoosts {
|
||||
t.Fatalf("empty status = %+v, want level 0 next 1", empty)
|
||||
}
|
||||
|
||||
one := PremiumBoostStatusForCount(peer, 1, nil)
|
||||
if one.Level != 1 || one.CurrentLevelBoosts != 1 || one.Boosts != 1 || one.NextLevelBoosts != 2 || !one.HasNextLevelBoosts {
|
||||
t.Fatalf("one boost status = %+v, want level 1 next 2", one)
|
||||
}
|
||||
|
||||
max := PremiumBoostStatusForCount(peer, MaxDefaultPremiumBoostLevel, nil)
|
||||
if max.Level != MaxDefaultPremiumBoostLevel || max.CurrentLevelBoosts != MaxDefaultPremiumBoostLevel || max.HasNextLevelBoosts {
|
||||
t.Fatalf("max status = %+v, want capped max level without next", max)
|
||||
}
|
||||
|
||||
over := PremiumBoostStatusForCount(peer, MaxDefaultPremiumBoostLevel+50, nil)
|
||||
if over.Level != MaxDefaultPremiumBoostLevel || over.CurrentLevelBoosts != MaxDefaultPremiumBoostLevel || over.HasNextLevelBoosts {
|
||||
t.Fatalf("over max status = %+v, want capped max level without next", over)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPremiumBoostStatusCustomPolicy(t *testing.T) {
|
||||
policy := NewPremiumBoostLevelPolicy([]int{6, 1, 3, 3, 0})
|
||||
peer := Peer{Type: PeerTypeChannel, ID: 100}
|
||||
|
||||
status := PremiumBoostStatusForPolicy(peer, 4, nil, policy)
|
||||
if status.Level != 2 || status.CurrentLevelBoosts != 3 || status.NextLevelBoosts != 6 || !status.HasNextLevelBoosts {
|
||||
t.Fatalf("custom policy status = %+v, want level 2 current 3 next 6", status)
|
||||
}
|
||||
|
||||
status = PremiumBoostStatusForPolicy(peer, 6, nil, policy)
|
||||
if status.Level != 3 || status.CurrentLevelBoosts != 6 || status.HasNextLevelBoosts {
|
||||
t.Fatalf("custom max status = %+v, want level 3 without next", status)
|
||||
}
|
||||
}
|
||||
|
||||
func TestApplyPremiumBoostSlotLifecycle(t *testing.T) {
|
||||
peer := Peer{Type: PeerTypeChannel, ID: 100}
|
||||
slot, changed, err := ApplyPremiumBoostSlot(PremiumBoostSlot{}, 10, DefaultPremiumBoostSlotID, peer, 1000, 2000, 0)
|
||||
if err != nil || !changed {
|
||||
t.Fatalf("apply free slot changed=%v err=%v", changed, err)
|
||||
}
|
||||
if slot.UserID != 10 || slot.Slot != DefaultPremiumBoostSlotID || slot.Peer != peer || slot.Date != 1000 || slot.Expires != 2000 || slot.Multiplier != 1 {
|
||||
t.Fatalf("applied slot = %+v", slot)
|
||||
}
|
||||
|
||||
_, changed, err = ApplyPremiumBoostSlot(slot, 10, DefaultPremiumBoostSlotID, peer, 1001, 2000, 0)
|
||||
if !errors.Is(err, ErrBoostNotModified) || changed {
|
||||
t.Fatalf("reapply same peer changed=%v err=%v, want ErrBoostNotModified", changed, err)
|
||||
}
|
||||
|
||||
extended, changed, err := ApplyPremiumBoostSlot(slot, 10, DefaultPremiumBoostSlotID, peer, 1002, 3000, 0)
|
||||
if err != nil || !changed || extended.Expires != 3000 || extended.Date != slot.Date {
|
||||
t.Fatalf("extend same peer slot=%+v changed=%v err=%v", extended, changed, err)
|
||||
}
|
||||
|
||||
shortened, changed, err := ApplyPremiumBoostSlot(extended, 10, DefaultPremiumBoostSlotID, peer, 1003, 2500, 0)
|
||||
if err != nil || !changed || shortened.Expires != 2500 || shortened.Date != slot.Date {
|
||||
t.Fatalf("refresh same peer expiry slot=%+v changed=%v err=%v", shortened, changed, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestApplyPremiumBoostSlotCooldown(t *testing.T) {
|
||||
first := Peer{Type: PeerTypeChannel, ID: 100}
|
||||
second := Peer{Type: PeerTypeChannel, ID: 200}
|
||||
slot := PremiumBoostSlot{
|
||||
UserID: 10,
|
||||
Slot: DefaultPremiumBoostSlotID,
|
||||
Peer: first,
|
||||
Date: 1000,
|
||||
Expires: 3000,
|
||||
CooldownUntil: 1500,
|
||||
Multiplier: 1,
|
||||
}
|
||||
|
||||
_, changed, err := ApplyPremiumBoostSlot(slot, 10, DefaultPremiumBoostSlotID, second, 1200, 3000, 0)
|
||||
if changed || err == nil {
|
||||
t.Fatalf("cooldown apply changed=%v err=%v, want flood wait", changed, err)
|
||||
}
|
||||
if seconds, ok := PremiumBoostFloodWaitSeconds(err); !ok || seconds != 300 {
|
||||
t.Fatalf("cooldown err = %v seconds=%d ok=%v, want 300", err, seconds, ok)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue