修复 背包礼物不增加 火箭能量

This commit is contained in:
hy001 2026-05-20 14:17:45 +08:00
parent c4d4f03ddf
commit 4926d5dfd2
2 changed files with 78 additions and 6 deletions

View File

@ -207,7 +207,7 @@ func containsGiftToken(list []string, token string) bool {
func isDefaultBlockedGiftToken(token string) bool {
switch normalizeGiftToken(token) {
case "BACKPACK", "BAG", "DIAMOND", "LUCKY", "ACTIVITY", "CP", "MAGIC", "FREE":
case "DIAMOND", "LUCKY", "ACTIVITY", "CP", "MAGIC", "FREE":
return true
default:
return false

View File

@ -217,11 +217,83 @@ func TestDecodeGiftEventPayloadEnvelope(t *testing.T) {
}
}
func TestGiftEnergyRulesRejectUnsupportedAndAllowConfiguredGift(t *testing.T) {
func TestBackpackGiftIncreasesRocketEnergy(t *testing.T) {
service, db := newTestService(t)
ctx := context.Background()
seedRocketConfig(t, db)
seedLevelConfigs(t, db, []int64{100, 200, 300, 400, 500, 600})
seedLevelConfigs(t, db, []int64{1000, 2000, 3000, 4000, 5000, 6000})
payloads := []struct {
raw string
energy int64
}{
{
energy: 30,
raw: `{
"trackId":"track-root-bag-gift",
"sysOrigin":"LIKEI",
"sendUserId":"1001",
"roomId":"9001",
"quantity":1,
"bagGift":true,
"giftConfig":{"id":"11","giftCandy":30,"type":"GOLD","giftTab":"NORMAL"},
"giftValue":{"actualAmount":30},
"createTime":` + strconvFormatMillis(time.Now()) + `
}`,
},
{
energy: 40,
raw: `{
"trackId":"track-value-bag-gift",
"sysOrigin":"LIKEI",
"sendUserId":"1001",
"roomId":"9001",
"quantity":1,
"giftConfig":{"id":"11","giftCandy":40,"type":"GOLD","giftTab":"NORMAL"},
"giftValue":{"actualAmount":40,"bag":true},
"createTime":` + strconvFormatMillis(time.Now().Add(time.Second)) + `
}`,
},
}
for _, payload := range payloads {
processed, err := service.ProcessGiftPayload(ctx, payload.raw)
if err != nil {
t.Fatalf("ProcessGiftPayload(backpack) error = %v", err)
}
if !processed.Processed || processed.AcceptedEnergy != payload.energy {
t.Fatalf("processed = %+v, want accepted energy %d", processed, payload.energy)
}
}
var status model.VoiceRoomRocketStatus
if err := db.Where("sys_origin = ? AND room_id = ?", "LIKEI", 9001).
First(&status).Error; err != nil {
t.Fatalf("find status: %v", err)
}
if status.CurrentEnergy != 70 {
t.Fatalf("current energy = %d, want 70", status.CurrentEnergy)
}
var logs []model.VoiceRoomRocketGiftEventLog
if err := db.Where("track_id IN ?", []string{"track-root-bag-gift", "track-value-bag-gift"}).
Find(&logs).Error; err != nil {
t.Fatalf("find logs: %v", err)
}
if len(logs) != 2 {
t.Fatalf("logs = %d, want 2", len(logs))
}
for _, log := range logs {
if log.Status != eventStatusSuccess || log.AcceptedEnergy <= 0 {
t.Fatalf("log = %+v, want success with accepted energy", log)
}
}
}
func TestGiftEnergyRulesAllowBackpackAndConfiguredGift(t *testing.T) {
service, db := newTestService(t)
ctx := context.Background()
seedRocketConfig(t, db)
seedLevelConfigs(t, db, []int64{1000, 2000, 3000, 4000, 5000, 6000})
backpackPayload := `{
"trackId":"track-backpack",
@ -232,12 +304,12 @@ func TestGiftEnergyRulesRejectUnsupportedAndAllowConfiguredGift(t *testing.T) {
"giftConfig":{"id":"11","giftCandy":99,"type":"GOLD","giftTab":"BACKPACK"},
"createTime":` + strconvFormatMillis(time.Now()) + `
}`
ignored, err := service.ProcessGiftPayload(ctx, backpackPayload)
backpack, err := service.ProcessGiftPayload(ctx, backpackPayload)
if err != nil {
t.Fatalf("ProcessGiftPayload(backpack) error = %v", err)
}
if ignored.Processed || ignored.Reason != "unsupported_gift" {
t.Fatalf("ignored = %+v, want unsupported_gift", ignored)
if !backpack.Processed || backpack.AcceptedEnergy != 99 {
t.Fatalf("backpack = %+v, want 99 energy", backpack)
}
if err := db.Model(&model.VoiceRoomRocketConfig{}).