mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-22 23:54:33 +01:00
mockGuildRepoForMail and mockGuildRepoOps each implemented different subsets of the 68-method GuildRepo interface. Adding any new method required updating both mocks. Merged into a single mockGuildRepo with configurable struct fields for error injection and no-op defaults for the rest.
307 lines
6.5 KiB
Go
307 lines
6.5 KiB
Go
package channelserver
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"erupe-ce/network/mhfpacket"
|
|
)
|
|
|
|
// --- handleMsgMhfLoadGuildCooking tests ---
|
|
|
|
func TestLoadGuildCooking_NoMeals(t *testing.T) {
|
|
server := createMockServer()
|
|
guildMock := &mockGuildRepo{
|
|
meals: []*GuildMeal{},
|
|
}
|
|
guildMock.guild = &Guild{ID: 10}
|
|
server.guildRepo = guildMock
|
|
session := createMockSession(1, server)
|
|
|
|
pkt := &mhfpacket.MsgMhfLoadGuildCooking{AckHandle: 100}
|
|
|
|
handleMsgMhfLoadGuildCooking(session, pkt)
|
|
|
|
select {
|
|
case <-session.sendPackets:
|
|
default:
|
|
t.Error("No response packet queued")
|
|
}
|
|
}
|
|
|
|
func TestLoadGuildCooking_WithActiveMeals(t *testing.T) {
|
|
server := createMockServer()
|
|
guildMock := &mockGuildRepo{
|
|
meals: []*GuildMeal{
|
|
{ID: 1, MealID: 100, Level: 3, CreatedAt: TimeAdjusted()}, // active (within 60 min)
|
|
{ID: 2, MealID: 200, Level: 1, CreatedAt: TimeAdjusted().Add(-2 * time.Hour)}, // expired
|
|
},
|
|
}
|
|
guildMock.guild = &Guild{ID: 10}
|
|
server.guildRepo = guildMock
|
|
session := createMockSession(1, server)
|
|
|
|
pkt := &mhfpacket.MsgMhfLoadGuildCooking{AckHandle: 100}
|
|
|
|
handleMsgMhfLoadGuildCooking(session, pkt)
|
|
|
|
select {
|
|
case p := <-session.sendPackets:
|
|
if len(p.data) < 4 {
|
|
t.Fatal("Response too short")
|
|
}
|
|
default:
|
|
t.Error("No response packet queued")
|
|
}
|
|
}
|
|
|
|
func TestLoadGuildCooking_DBError(t *testing.T) {
|
|
server := createMockServer()
|
|
guildMock := &mockGuildRepo{
|
|
listMealsErr: errNotFound,
|
|
}
|
|
guildMock.guild = &Guild{ID: 10}
|
|
server.guildRepo = guildMock
|
|
session := createMockSession(1, server)
|
|
|
|
pkt := &mhfpacket.MsgMhfLoadGuildCooking{AckHandle: 100}
|
|
|
|
handleMsgMhfLoadGuildCooking(session, pkt)
|
|
|
|
select {
|
|
case <-session.sendPackets:
|
|
default:
|
|
t.Error("No response packet queued")
|
|
}
|
|
}
|
|
|
|
// --- handleMsgMhfRegistGuildCooking tests ---
|
|
|
|
func TestRegistGuildCooking_NewMeal(t *testing.T) {
|
|
server := createMockServer()
|
|
guildMock := &mockGuildRepo{
|
|
createdMealID: 42,
|
|
}
|
|
guildMock.guild = &Guild{ID: 10}
|
|
server.guildRepo = guildMock
|
|
session := createMockSession(1, server)
|
|
|
|
pkt := &mhfpacket.MsgMhfRegistGuildCooking{
|
|
AckHandle: 100,
|
|
OverwriteID: 0, // New meal
|
|
MealID: 5,
|
|
Success: 1,
|
|
}
|
|
|
|
handleMsgMhfRegistGuildCooking(session, pkt)
|
|
|
|
select {
|
|
case p := <-session.sendPackets:
|
|
if len(p.data) < 8 {
|
|
t.Errorf("Response too short: %d bytes", len(p.data))
|
|
}
|
|
default:
|
|
t.Error("No response packet queued")
|
|
}
|
|
}
|
|
|
|
func TestRegistGuildCooking_UpdateMeal(t *testing.T) {
|
|
server := createMockServer()
|
|
guildMock := &mockGuildRepo{}
|
|
guildMock.guild = &Guild{ID: 10}
|
|
server.guildRepo = guildMock
|
|
session := createMockSession(1, server)
|
|
|
|
pkt := &mhfpacket.MsgMhfRegistGuildCooking{
|
|
AckHandle: 100,
|
|
OverwriteID: 42, // Update existing
|
|
MealID: 5,
|
|
Success: 2,
|
|
}
|
|
|
|
handleMsgMhfRegistGuildCooking(session, pkt)
|
|
|
|
select {
|
|
case <-session.sendPackets:
|
|
default:
|
|
t.Error("No response packet queued")
|
|
}
|
|
}
|
|
|
|
func TestRegistGuildCooking_CreateError(t *testing.T) {
|
|
server := createMockServer()
|
|
guildMock := &mockGuildRepo{
|
|
createMealErr: errNotFound,
|
|
}
|
|
guildMock.guild = &Guild{ID: 10}
|
|
server.guildRepo = guildMock
|
|
session := createMockSession(1, server)
|
|
|
|
pkt := &mhfpacket.MsgMhfRegistGuildCooking{
|
|
AckHandle: 100,
|
|
OverwriteID: 0,
|
|
MealID: 5,
|
|
Success: 1,
|
|
}
|
|
|
|
handleMsgMhfRegistGuildCooking(session, pkt)
|
|
|
|
// Should return fail ack
|
|
select {
|
|
case <-session.sendPackets:
|
|
default:
|
|
t.Error("No response packet queued")
|
|
}
|
|
}
|
|
|
|
// --- handleMsgMhfGuildHuntdata tests ---
|
|
|
|
func TestGuildHuntdata_Acquire(t *testing.T) {
|
|
server := createMockServer()
|
|
guildMock := &mockGuildRepo{}
|
|
guildMock.guild = &Guild{ID: 10}
|
|
server.guildRepo = guildMock
|
|
session := createMockSession(1, server)
|
|
|
|
pkt := &mhfpacket.MsgMhfGuildHuntdata{
|
|
AckHandle: 100,
|
|
Operation: 0, // Acquire
|
|
GuildID: 10,
|
|
}
|
|
|
|
handleMsgMhfGuildHuntdata(session, pkt)
|
|
|
|
if !guildMock.claimBoxCalled {
|
|
t.Error("ClaimHuntBox should be called")
|
|
}
|
|
|
|
select {
|
|
case <-session.sendPackets:
|
|
default:
|
|
t.Error("No response packet queued")
|
|
}
|
|
}
|
|
|
|
func TestGuildHuntdata_Enumerate(t *testing.T) {
|
|
server := createMockServer()
|
|
guildMock := &mockGuildRepo{
|
|
guildKills: []*GuildKill{
|
|
{ID: 1, Monster: 100},
|
|
{ID: 2, Monster: 200},
|
|
},
|
|
}
|
|
guildMock.guild = &Guild{ID: 10}
|
|
server.guildRepo = guildMock
|
|
session := createMockSession(1, server)
|
|
|
|
pkt := &mhfpacket.MsgMhfGuildHuntdata{
|
|
AckHandle: 100,
|
|
Operation: 1, // Enumerate
|
|
GuildID: 10,
|
|
}
|
|
|
|
handleMsgMhfGuildHuntdata(session, pkt)
|
|
|
|
select {
|
|
case p := <-session.sendPackets:
|
|
if len(p.data) < 1 {
|
|
t.Fatal("Response too short")
|
|
}
|
|
default:
|
|
t.Error("No response packet queued")
|
|
}
|
|
}
|
|
|
|
func TestGuildHuntdata_Check_HasKills(t *testing.T) {
|
|
server := createMockServer()
|
|
guildMock := &mockGuildRepo{
|
|
countKills: 5,
|
|
}
|
|
guildMock.guild = &Guild{ID: 10}
|
|
server.guildRepo = guildMock
|
|
session := createMockSession(1, server)
|
|
|
|
pkt := &mhfpacket.MsgMhfGuildHuntdata{
|
|
AckHandle: 100,
|
|
Operation: 2, // Check
|
|
GuildID: 10,
|
|
}
|
|
|
|
handleMsgMhfGuildHuntdata(session, pkt)
|
|
|
|
select {
|
|
case <-session.sendPackets:
|
|
default:
|
|
t.Error("No response packet queued")
|
|
}
|
|
}
|
|
|
|
func TestGuildHuntdata_Check_NoKills(t *testing.T) {
|
|
server := createMockServer()
|
|
guildMock := &mockGuildRepo{
|
|
countKills: 0,
|
|
}
|
|
guildMock.guild = &Guild{ID: 10}
|
|
server.guildRepo = guildMock
|
|
session := createMockSession(1, server)
|
|
|
|
pkt := &mhfpacket.MsgMhfGuildHuntdata{
|
|
AckHandle: 100,
|
|
Operation: 2,
|
|
GuildID: 10,
|
|
}
|
|
|
|
handleMsgMhfGuildHuntdata(session, pkt)
|
|
|
|
select {
|
|
case <-session.sendPackets:
|
|
default:
|
|
t.Error("No response packet queued")
|
|
}
|
|
}
|
|
|
|
// --- handleMsgMhfAddGuildWeeklyBonusExceptionalUser tests ---
|
|
|
|
func TestAddGuildWeeklyBonusExceptionalUser_Success(t *testing.T) {
|
|
server := createMockServer()
|
|
guildMock := &mockGuildRepo{}
|
|
guildMock.guild = &Guild{ID: 10}
|
|
server.guildRepo = guildMock
|
|
session := createMockSession(1, server)
|
|
|
|
pkt := &mhfpacket.MsgMhfAddGuildWeeklyBonusExceptionalUser{
|
|
AckHandle: 100,
|
|
NumUsers: 3,
|
|
}
|
|
|
|
handleMsgMhfAddGuildWeeklyBonusExceptionalUser(session, pkt)
|
|
|
|
select {
|
|
case <-session.sendPackets:
|
|
default:
|
|
t.Error("No response packet queued")
|
|
}
|
|
}
|
|
|
|
func TestAddGuildWeeklyBonusExceptionalUser_NoGuild(t *testing.T) {
|
|
server := createMockServer()
|
|
guildMock := &mockGuildRepo{}
|
|
guildMock.getErr = errNotFound
|
|
server.guildRepo = guildMock
|
|
session := createMockSession(1, server)
|
|
|
|
pkt := &mhfpacket.MsgMhfAddGuildWeeklyBonusExceptionalUser{
|
|
AckHandle: 100,
|
|
NumUsers: 3,
|
|
}
|
|
|
|
// Should not panic; just skips the bonus
|
|
handleMsgMhfAddGuildWeeklyBonusExceptionalUser(session, pkt)
|
|
|
|
select {
|
|
case <-session.sendPackets:
|
|
default:
|
|
t.Error("No response packet queued")
|
|
}
|
|
}
|