88 lines
3.3 KiB
Go
88 lines
3.3 KiB
Go
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")
|
|
}
|
|
}
|