eq2go/internal/achievements/achievements_test.go

170 lines
4.0 KiB
Go

package achievements
import (
"testing"
"eq2emu/internal/database"
)
// TestSimpleAchievement tests the basic new Achievement functionality
func TestSimpleAchievement(t *testing.T) {
db, err := database.NewSQLite("file::memory:?mode=memory&cache=shared")
if err != nil {
t.Fatalf("Failed to create test database: %v", err)
}
defer db.Close()
// Test creating a new achievement
achievement := New(db)
if achievement == nil {
t.Fatal("New returned nil")
}
if !achievement.IsNew() {
t.Error("New achievement should be marked as new")
}
// Test setting values
achievement.AchievementID = 1001
achievement.Title = "Test Achievement"
achievement.Category = "Testing"
if achievement.GetID() != 1001 {
t.Errorf("Expected GetID() to return 1001, got %d", achievement.GetID())
}
// Test adding requirements and rewards
achievement.AddRequirement("kill_monsters", 10)
achievement.AddReward("experience:1000")
if len(achievement.Requirements) != 1 {
t.Errorf("Expected 1 requirement, got %d", len(achievement.Requirements))
}
if len(achievement.Rewards) != 1 {
t.Errorf("Expected 1 reward, got %d", len(achievement.Rewards))
}
// Test ToLegacy conversion
legacy := achievement.ToLegacy()
if legacy == nil {
t.Fatal("ToLegacy returned nil")
}
if legacy.ID != achievement.AchievementID {
t.Errorf("Expected legacy ID %d, got %d", achievement.AchievementID, legacy.ID)
}
if legacy.Title != achievement.Title {
t.Errorf("Expected legacy title %s, got %s", achievement.Title, legacy.Title)
}
}
// TestMasterListWithGeneric tests the master list with generic base
func TestMasterListWithGeneric(t *testing.T) {
masterList := NewMasterList()
if masterList == nil {
t.Fatal("NewMasterList returned nil")
}
if masterList.Size() != 0 {
t.Errorf("Expected size 0, got %d", masterList.Size())
}
// Create a legacy achievement
achievement := NewLegacyAchievement()
achievement.ID = 1001
achievement.Title = "Test Achievement"
achievement.Category = "Testing"
// Test adding
if !masterList.AddAchievement(achievement) {
t.Error("Should successfully add achievement")
}
if masterList.Size() != 1 {
t.Errorf("Expected size 1, got %d", masterList.Size())
}
// Test retrieving
retrieved := masterList.GetAchievement(1001)
if retrieved == nil {
t.Error("Should retrieve added achievement")
}
if retrieved.Title != "Test Achievement" {
t.Errorf("Expected title 'Test Achievement', got '%s'", retrieved.Title)
}
// Test filtering
achievements := masterList.GetAchievementsByCategory("Testing")
if len(achievements) != 1 {
t.Errorf("Expected 1 achievement in Testing category, got %d", len(achievements))
}
}
// TestLegacyTypes tests the basic legacy types functionality
func TestLegacyTypes(t *testing.T) {
// Test NewLegacyAchievement
achievement := NewLegacyAchievement()
if achievement == nil {
t.Fatal("NewLegacyAchievement returned nil")
}
if achievement.Requirements == nil {
t.Error("Requirements slice should not be nil")
}
if achievement.Rewards == nil {
t.Error("Rewards slice should not be nil")
}
// Test GetID
achievement.ID = 1001
if achievement.GetID() != 1001 {
t.Errorf("Expected GetID() to return 1001, got %d", achievement.GetID())
}
// Test AddRequirement
req := Requirement{
AchievementID: 1001,
Name: "test_requirement",
QtyRequired: 5,
}
achievement.AddRequirement(req)
if len(achievement.Requirements) != 1 {
t.Errorf("Expected 1 requirement, got %d", len(achievement.Requirements))
}
// Test AddReward
reward := Reward{
AchievementID: 1001,
Reward: "test_reward",
}
achievement.AddReward(reward)
if len(achievement.Rewards) != 1 {
t.Errorf("Expected 1 reward, got %d", len(achievement.Rewards))
}
// Test Clone
clone := achievement.Clone()
if clone == nil {
t.Fatal("Clone returned nil")
}
if clone == achievement {
t.Error("Clone returned same instance")
}
if clone.ID != achievement.ID {
t.Error("Clone ID mismatch")
}
if clone.Title != achievement.Title {
t.Error("Clone Title mismatch")
}
}