mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-21 23:22:34 +01:00
Move ~300 test functions from 21 catch-all files (handlers_core_test.go, handlers_coverage*_test.go, *_coverage_test.go) into the *_test.go file matching each handler's source file. This makes tests discoverable by convention: tests for handlers_guild.go live in handlers_guild_test.go. New files: handlers_guild_mission_test.go, sys_time_test.go. No test logic changed — pure file reorganization.
282 lines
6.6 KiB
Go
282 lines
6.6 KiB
Go
package channelserver
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
func TestLoadCharacterData_Success(t *testing.T) {
|
|
server := createMockServer()
|
|
charRepo := newMockCharacterRepo()
|
|
charRepo.columns["test_col"] = []byte{0xAA, 0xBB, 0xCC}
|
|
server.charRepo = charRepo
|
|
session := createMockSession(1, server)
|
|
|
|
loadCharacterData(session, 100, "test_col", nil)
|
|
|
|
select {
|
|
case pkt := <-session.sendPackets:
|
|
if pkt.data == nil {
|
|
t.Fatal("Response packet should have data")
|
|
}
|
|
default:
|
|
t.Fatal("No response packet queued")
|
|
}
|
|
}
|
|
|
|
func TestLoadCharacterData_EmptyUsesDefault(t *testing.T) {
|
|
server := createMockServer()
|
|
charRepo := newMockCharacterRepo()
|
|
server.charRepo = charRepo
|
|
session := createMockSession(1, server)
|
|
|
|
defaultData := []byte{0x01, 0x02, 0x03}
|
|
loadCharacterData(session, 100, "missing_col", defaultData)
|
|
|
|
select {
|
|
case pkt := <-session.sendPackets:
|
|
if pkt.data == nil {
|
|
t.Fatal("Response packet should have data")
|
|
}
|
|
default:
|
|
t.Fatal("No response packet queued")
|
|
}
|
|
}
|
|
|
|
func TestLoadCharacterData_Error(t *testing.T) {
|
|
server := createMockServer()
|
|
charRepo := newMockCharacterRepo()
|
|
charRepo.loadColumnErr = errors.New("db error")
|
|
server.charRepo = charRepo
|
|
session := createMockSession(1, server)
|
|
|
|
defaultData := []byte{0xFF}
|
|
loadCharacterData(session, 100, "test_col", defaultData)
|
|
|
|
// Should still send a response (with default data)
|
|
select {
|
|
case pkt := <-session.sendPackets:
|
|
if pkt.data == nil {
|
|
t.Fatal("Response packet should have data even on error")
|
|
}
|
|
default:
|
|
t.Fatal("No response packet queued")
|
|
}
|
|
}
|
|
|
|
func TestSaveCharacterData_Success(t *testing.T) {
|
|
server := createMockServer()
|
|
charRepo := newMockCharacterRepo()
|
|
server.charRepo = charRepo
|
|
session := createMockSession(1, server)
|
|
|
|
data := []byte{0x01, 0x02, 0x03}
|
|
saveCharacterData(session, 100, "test_col", data, 100)
|
|
|
|
// Should save and ack
|
|
if saved := charRepo.columns["test_col"]; saved == nil {
|
|
t.Error("Data should be saved to repo")
|
|
}
|
|
|
|
select {
|
|
case pkt := <-session.sendPackets:
|
|
if pkt.data == nil {
|
|
t.Fatal("Response packet should have data")
|
|
}
|
|
default:
|
|
t.Fatal("No response packet queued")
|
|
}
|
|
}
|
|
|
|
func TestSaveCharacterData_TooLarge(t *testing.T) {
|
|
server := createMockServer()
|
|
charRepo := newMockCharacterRepo()
|
|
server.charRepo = charRepo
|
|
session := createMockSession(1, server)
|
|
|
|
data := make([]byte, 200)
|
|
saveCharacterData(session, 100, "test_col", data, 50)
|
|
|
|
// Should fail with ack
|
|
if _, ok := charRepo.columns["test_col"]; ok {
|
|
t.Error("Data should NOT be saved when too large")
|
|
}
|
|
|
|
select {
|
|
case pkt := <-session.sendPackets:
|
|
if pkt.data == nil {
|
|
t.Fatal("Response packet should have data")
|
|
}
|
|
default:
|
|
t.Fatal("Should queue a fail ack")
|
|
}
|
|
}
|
|
|
|
func TestSaveCharacterData_SaveError(t *testing.T) {
|
|
server := createMockServer()
|
|
charRepo := newMockCharacterRepo()
|
|
charRepo.saveErr = errors.New("save failed")
|
|
server.charRepo = charRepo
|
|
session := createMockSession(1, server)
|
|
|
|
data := []byte{0x01}
|
|
saveCharacterData(session, 100, "test_col", data, 100)
|
|
|
|
// Should still queue a fail ack
|
|
select {
|
|
case pkt := <-session.sendPackets:
|
|
if pkt.data == nil {
|
|
t.Fatal("Response packet should have data")
|
|
}
|
|
default:
|
|
t.Fatal("Should queue a fail ack on save error")
|
|
}
|
|
}
|
|
|
|
func TestSaveCharacterData_NoMaxSize(t *testing.T) {
|
|
server := createMockServer()
|
|
charRepo := newMockCharacterRepo()
|
|
server.charRepo = charRepo
|
|
session := createMockSession(1, server)
|
|
|
|
data := make([]byte, 5000)
|
|
saveCharacterData(session, 100, "test_col", data, 0)
|
|
|
|
// maxSize=0 means no limit
|
|
if saved := charRepo.columns["test_col"]; saved == nil {
|
|
t.Error("Data should be saved when maxSize is 0 (no limit)")
|
|
}
|
|
|
|
select {
|
|
case <-session.sendPackets:
|
|
default:
|
|
t.Fatal("Should queue success ack")
|
|
}
|
|
}
|
|
|
|
func TestDoAckEarthSucceed(t *testing.T) {
|
|
server := createMockServer()
|
|
server.erupeConfig.EarthID = 42
|
|
session := createMockSession(1, server)
|
|
|
|
doAckEarthSucceed(session, 100, nil)
|
|
|
|
select {
|
|
case pkt := <-session.sendPackets:
|
|
if pkt.data == nil {
|
|
t.Fatal("Response should have data")
|
|
}
|
|
default:
|
|
t.Fatal("Should queue a packet")
|
|
}
|
|
}
|
|
|
|
func TestUpdateRights(t *testing.T) {
|
|
server := createMockServer()
|
|
userRepo := &mockUserRepoGacha{}
|
|
userRepo.rights = 30
|
|
server.userRepo = userRepo
|
|
session := createMockSession(1, server)
|
|
|
|
updateRights(session)
|
|
|
|
select {
|
|
case pkt := <-session.sendPackets:
|
|
if pkt.data == nil {
|
|
t.Fatal("Should queue MsgSysUpdateRight")
|
|
}
|
|
default:
|
|
t.Fatal("updateRights should queue a packet")
|
|
}
|
|
}
|
|
|
|
// Tests consolidated from handlers_coverage3_test.go
|
|
|
|
func TestStubHelpers(t *testing.T) {
|
|
server := createMockServer()
|
|
|
|
t.Run("stubEnumerateNoResults", func(t *testing.T) {
|
|
session := createMockSession(1, server)
|
|
stubEnumerateNoResults(session, 1)
|
|
select {
|
|
case p := <-session.sendPackets:
|
|
if len(p.data) == 0 {
|
|
t.Error("response should have data")
|
|
}
|
|
default:
|
|
t.Error("no response queued")
|
|
}
|
|
})
|
|
|
|
t.Run("doAckBufSucceed", func(t *testing.T) {
|
|
session := createMockSession(1, server)
|
|
doAckBufSucceed(session, 1, []byte{0x01, 0x02, 0x03})
|
|
select {
|
|
case p := <-session.sendPackets:
|
|
if len(p.data) == 0 {
|
|
t.Error("response should have data")
|
|
}
|
|
default:
|
|
t.Error("no response queued")
|
|
}
|
|
})
|
|
|
|
t.Run("doAckBufFail", func(t *testing.T) {
|
|
session := createMockSession(1, server)
|
|
doAckBufFail(session, 1, []byte{0x01, 0x02, 0x03})
|
|
select {
|
|
case p := <-session.sendPackets:
|
|
if len(p.data) == 0 {
|
|
t.Error("response should have data")
|
|
}
|
|
default:
|
|
t.Error("no response queued")
|
|
}
|
|
})
|
|
|
|
t.Run("doAckSimpleSucceed", func(t *testing.T) {
|
|
session := createMockSession(1, server)
|
|
doAckSimpleSucceed(session, 1, []byte{0x00, 0x00, 0x00, 0x00})
|
|
select {
|
|
case p := <-session.sendPackets:
|
|
if len(p.data) == 0 {
|
|
t.Error("response should have data")
|
|
}
|
|
default:
|
|
t.Error("no response queued")
|
|
}
|
|
})
|
|
|
|
t.Run("doAckSimpleFail", func(t *testing.T) {
|
|
session := createMockSession(1, server)
|
|
doAckSimpleFail(session, 1, []byte{0x00, 0x00, 0x00, 0x00})
|
|
select {
|
|
case p := <-session.sendPackets:
|
|
if len(p.data) == 0 {
|
|
t.Error("response should have data")
|
|
}
|
|
default:
|
|
t.Error("no response queued")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestUpdateRights_Error(t *testing.T) {
|
|
server := createMockServer()
|
|
userRepo := &mockUserRepoGacha{rightsErr: errors.New("db error")}
|
|
server.userRepo = userRepo
|
|
session := createMockSession(1, server)
|
|
|
|
// Should not panic, falls back to rights=2
|
|
updateRights(session)
|
|
|
|
select {
|
|
case pkt := <-session.sendPackets:
|
|
if pkt.data == nil {
|
|
t.Fatal("Should queue MsgSysUpdateRight even on error")
|
|
}
|
|
default:
|
|
t.Fatal("updateRights should queue a packet even on error")
|
|
}
|
|
}
|