package controller import ( "blazing/common/data/xmlres" "blazing/common/socket/errorcode" "blazing/logic/service/player" playermodel "blazing/modules/player/model" "testing" ) func firstPetIDForControllerTest(t *testing.T) int { t.Helper() for id := range xmlres.PetMAP { return id } t.Fatal("xmlres.PetMAP is empty") return 0 } func TestSetPetExpCapsLevelAt100(t *testing.T) { petID := firstPetIDForControllerTest(t) petInfo := playermodel.GenPetInfo(petID, 31, 0, 0, 99, nil, 0) if petInfo == nil { t.Fatal("failed to generate test pet") } expPool := petInfo.NextLvExp + 10_000 testPlayer := player.NewPlayer(nil) testPlayer.Info = &playermodel.PlayerInfo{ ExpPool: expPool, PetList: []playermodel.PetInfo{*petInfo}, } currentPet := &testPlayer.Info.PetList[0] result, err := (Controller{}).SetPetExp(&PetSetExpInboundInfo{ CatchTime: currentPet.CatchTime, Exp: expPool, }, testPlayer) if err != 0 { t.Fatalf("expected SetPetExp to succeed, got err=%d", err) } if currentPet.Level != 100 { t.Fatalf("expected pet level to stop at 100, got %d", currentPet.Level) } if result.Exp != 10_000 { t.Fatalf("expected overflow exp to remain in pool, got %d", result.Exp) } } func TestSetPetExpRejectsPetAtLevel100(t *testing.T) { petID := firstPetIDForControllerTest(t) petInfo := playermodel.GenPetInfo(petID, 31, 0, 0, 100, nil, 0) if petInfo == nil { t.Fatal("failed to generate test pet") } testPlayer := player.NewPlayer(nil) testPlayer.Info = &playermodel.PlayerInfo{ ExpPool: 50_000, PetList: []playermodel.PetInfo{*petInfo}, } result, err := (Controller{}).SetPetExp(&PetSetExpInboundInfo{ CatchTime: petInfo.CatchTime, Exp: 12_345, }, testPlayer) if err != errorcode.ErrorCodes.ErrSystemError { t.Fatalf("expected level-100 pet to be rejected, got err=%d", err) } if result.Exp != 50_000 { t.Fatalf("expected exp pool to remain unchanged, got %d", result.Exp) } }