Files
GaCy-GO/internal/gameserver/currency_wars_quit_test.go
T

87 lines
3.3 KiB
Go
Raw Normal View History

2026-10-28 18:54:43 +07:00
package gameserver
import (
"testing"
"gac-hkrpg-go/internal/common"
pb "gac-hkrpg-go/protocol/proto"
)
func TestCurrencyWarsQuitSettleIsRegistered(t *testing.T) {
requestID, ok := pb.CmdIDByName["GridFightQuitSettleCsReq"]
if !ok || typedHandlers[uint16(requestID)] == nil {
t.Fatal("GridFightQuitSettle must have a typed handler")
}
if _, ok := dummyResponses[uint16(requestID)]; ok {
t.Fatal("GridFightQuitSettle must not use an empty dummy response")
}
}
func TestCurrencyWarsAbandonRunPreservesOtherGetData(t *testing.T) {
metadata := &pb.CLEDCMIOIPF{}
data := &pb.GridFightGetDataScRsp{
LFLCDNGALME: metadata,
DHFOFLFCLAH: &pb.MPIMAEMCEFH{UniqueId: 42, IsOverlock: true},
}
runID, active := currencyWarsAbandonRun(data)
if !active || runID != 42 {
t.Fatalf("abandon result = (run %d, active %t); want (42, true)", runID, active)
}
if data.DHFOFLFCLAH != nil || data.LFLCDNGALME != metadata {
t.Fatal("abandon must clear only the active run and preserve season data")
}
if _, active = currencyWarsAbandonRun(data); active {
t.Fatal("abandon without an active run must be rejected")
}
}
func TestCurrencyWarsQuitSettlementUsesActiveRunData(t *testing.T) {
catalog, err := common.LoadCurrencyWarsCatalog()
if err != nil {
t.Fatal(err)
}
divisions := catalog.SeasonDivisions(catalog.ActiveSeasonID)
if len(divisions) == 0 {
t.Fatal("active season has no captured divisions")
}
division := divisions[0]
run := &pb.MPIMAEMCEFH{
UniqueId: 42,
DivisionId: division.ID,
IsOverlock: true,
JLDDDLDNFEF: &pb.CLFABOEKMJI{},
NAGDJGMMCBE: []*pb.GridFightGameInfo{
{LEOIAOFBBFA: &pb.GridFightGameInfo_FAOCFBOFCJP{FAOCFBOFCJP: &pb.NIHNGPKHEPC{PPKKHHNEOHB: 90, GridFightLineupHp: 72, GDAKCOICIDA: 3}}},
{LEOIAOFBBFA: &pb.GridFightGameInfo_EJIPINIKNCK{EJIPINIKNCK: &pb.HKFECLCHBFJ{GridGameRoleList: []*pb.CDEAABODKCP{
{Id: 8001, RoleStar: 2, Pos: 1},
{Id: 8002, RoleStar: 1, Pos: 2},
}}}},
{LEOIAOFBBFA: &pb.GridFightGameInfo_KLCPAAHDPJF{KLCPAAHDPJF: &pb.BEEFLEJAOCN{
DCAHJELNJNP: 4, EMOHLJHPOPC: 7001, SectionId: 5,
}}},
},
}
keepWin, settlement, err := currencyWarsQuitSettlement(catalog, run)
if err != nil {
t.Fatal(err)
}
if keepWin.EHBLJGIENPI != 3 {
t.Fatalf("keep-win count = %d, want 3", keepWin.EHBLJGIENPI)
}
finish := settlement.BFLLJJBHLDF
if settlement.FLHOPMMEGAI != division.ID || finish == nil || finish.Reason != pb.PEIJNEFOCHI_PEIJNEFOCHI_NOCIJDINKPJ {
t.Fatalf("quit settlement identity/reason = division %d finish %v", settlement.FLHOPMMEGAI, finish)
}
if settlement.NMCKJPEMACM != catalog.ActiveSeasonModule().MaxRewardExp || settlement.CDANKDNACJP == 0 {
t.Fatalf("settlement season metadata is incomplete: exp=%d highest_division=%d", settlement.NMCKJPEMACM, settlement.CDANKDNACJP)
}
if finish.NDLIKNEKDLL == nil || finish.NDLIKNEKDLL.LKCJAPIGEND != 90 || finish.NDLIKNEKDLL.PAGPKOKMDBK != 72 || finish.NDLIKNEKDLL.DCAHJELNJNP != 4 || finish.NDLIKNEKDLL.EMOHLJHPOPC != 7001 || finish.NDLIKNEKDLL.SectionId != 5 {
t.Fatalf("settlement basic info does not match saved run: %v", finish.NDLIKNEKDLL)
}
if !finish.IsOverlock || finish.PPJFPNMIFHL == nil || len(finish.PPJFPNMIFHL.GridFightAvatarList) != 2 || finish.PPJFPNMIFHL.GridFightAvatarList[0] != 8001 || finish.PPJFPNMIFHL.GridFightAvatarList[1] != 8002 {
t.Fatal("settlement did not preserve mode and sorted team avatar data")
}
}