Files
bamort/backend/gsmaster/gsm_model_test.go
T

387 lines
7.6 KiB
Go
Raw Normal View History

2025-07-24 07:39:43 +02:00
package gsmaster
2025-01-18 23:50:02 +01:00
import (
2025-07-24 07:39:43 +02:00
"bamort/database"
2025-07-27 22:25:17 +02:00
"bamort/models"
2025-01-18 23:50:02 +01:00
"testing"
"github.com/stretchr/testify/assert"
)
func TestSkill_Create(t *testing.T) {
2025-07-24 07:39:43 +02:00
database.SetupTestDB()
testDefinition := []struct {
2025-01-18 23:50:02 +01:00
name string
2025-07-27 23:13:04 +02:00
skill *models.Skill
2025-01-18 23:50:02 +01:00
wantErr bool
}{
{
name: "valid skill",
2025-07-27 23:13:04 +02:00
skill: &models.Skill{
2025-07-30 05:40:13 +02:00
Name: "Test Skill",
Beschreibung: "Test Description",
Quelle: "Test Source",
2025-01-18 23:50:02 +01:00
Initialwert: 5,
Bonuseigenschaft: "st",
Improvable: true,
InnateSkill: false,
Category: "Test Category",
},
wantErr: false,
},
/*{
name: "nil skill",
skill: nil,
wantErr: true,
},*/
}
2025-07-24 07:39:43 +02:00
for _, tt := range testDefinition {
2025-01-18 23:50:02 +01:00
t.Run(tt.name, func(t *testing.T) {
err := tt.skill.Create()
if tt.wantErr {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, "midgard", tt.skill.GameSystem)
assert.NotZero(t, tt.skill.ID)
})
}
2025-07-24 07:39:43 +02:00
database.ResetTestDB()
2025-01-18 23:50:02 +01:00
}
func TestWeaponSkill_Create(t *testing.T) {
2025-07-24 07:39:43 +02:00
database.SetupTestDB()
testDefinition := []struct {
2025-01-18 23:50:02 +01:00
name string
2025-07-27 23:36:47 +02:00
weaponSkill *models.WeaponSkill
2025-01-18 23:50:02 +01:00
wantErr bool
}{
{
name: "valid weapon skill",
2025-07-27 23:36:47 +02:00
weaponSkill: &models.WeaponSkill{
2025-07-27 23:13:04 +02:00
Skill: models.Skill{
2025-07-30 05:40:13 +02:00
Name: "Test Weapon Skill",
Beschreibung: "Test Description",
Quelle: "Test Source",
2025-01-18 23:50:02 +01:00
Initialwert: 5,
Bonuseigenschaft: "st",
Improvable: true,
InnateSkill: false,
Category: "Test Category",
},
},
wantErr: false,
},
/*{
name: "nil weapon skill",
weaponSkill: nil,
wantErr: true,
},*/
}
2025-07-24 07:39:43 +02:00
for _, tt := range testDefinition {
2025-01-18 23:50:02 +01:00
t.Run(tt.name, func(t *testing.T) {
err := tt.weaponSkill.Create()
if tt.wantErr {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, "midgard", tt.weaponSkill.GameSystem)
assert.NotZero(t, tt.weaponSkill.ID)
})
}
2025-07-24 07:39:43 +02:00
database.ResetTestDB()
2025-01-18 23:50:02 +01:00
}
func TestSkill_TableName(t *testing.T) {
2025-07-24 07:39:43 +02:00
database.SetupTestDB()
2025-07-27 23:13:04 +02:00
skill := &models.Skill{}
2025-01-18 23:50:02 +01:00
expected := "gsm_skills"
assert.Equal(t, expected, skill.TableName())
2025-07-24 07:39:43 +02:00
database.ResetTestDB()
2025-01-18 23:50:02 +01:00
}
func TestSkill_First(t *testing.T) {
2025-07-24 07:39:43 +02:00
database.SetupTestDB()
testDefinition := []struct {
2025-01-18 23:50:02 +01:00
name string
2025-07-27 23:13:04 +02:00
skill *models.Skill
2025-01-18 23:50:02 +01:00
findName string
wantErr bool
}{
{
name: "existing skill",
2025-07-27 23:13:04 +02:00
skill: &models.Skill{
2025-07-30 05:40:13 +02:00
Name: "Test Skill",
GameSystem: "midgard",
2025-01-18 23:50:02 +01:00
},
findName: "Test Skill",
wantErr: false,
},
{
name: "non-existing skill",
2025-07-27 23:13:04 +02:00
skill: &models.Skill{},
2025-01-18 23:50:02 +01:00
findName: "NonExistent",
wantErr: true,
},
{
name: "empty name",
2025-07-27 23:13:04 +02:00
skill: &models.Skill{},
2025-01-18 23:50:02 +01:00
findName: "",
wantErr: true,
},
}
2025-07-24 07:39:43 +02:00
for _, tt := range testDefinition {
2025-01-18 23:50:02 +01:00
t.Run(tt.name, func(t *testing.T) {
if !tt.wantErr {
// Create test data first
err := tt.skill.Create()
assert.NoError(t, err)
}
2025-07-27 23:13:04 +02:00
s := &models.Skill{}
2025-01-18 23:50:02 +01:00
err := s.First(tt.findName)
if tt.wantErr {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, tt.skill.Name, s.Name)
assert.Equal(t, "midgard", s.GameSystem)
})
}
2025-07-24 07:39:43 +02:00
database.ResetTestDB()
2025-01-18 23:50:02 +01:00
}
func TestSkill_FirstId(t *testing.T) {
2025-07-24 07:39:43 +02:00
database.SetupTestDB()
testDefinition := []struct {
2025-01-18 23:50:02 +01:00
name string
2025-07-27 23:13:04 +02:00
skill *models.Skill
2025-01-18 23:50:02 +01:00
findId uint
wantErr bool
}{
{
name: "existing skill",
2025-07-27 23:13:04 +02:00
skill: &models.Skill{
2025-07-30 05:40:13 +02:00
Name: "Test Skill",
GameSystem: "midgard",
2025-01-18 23:50:02 +01:00
},
findId: 1,
wantErr: false,
},
{
name: "non-existing id",
2025-07-27 23:13:04 +02:00
skill: &models.Skill{},
2025-01-18 23:50:02 +01:00
findId: 9999,
wantErr: true,
},
{
name: "zero id",
2025-07-27 23:13:04 +02:00
skill: &models.Skill{},
2025-01-18 23:50:02 +01:00
findId: 0,
wantErr: true,
},
}
2025-07-24 07:39:43 +02:00
for _, tt := range testDefinition {
2025-01-18 23:50:02 +01:00
t.Run(tt.name, func(t *testing.T) {
if !tt.wantErr {
// Create test data first
err := tt.skill.Create()
assert.NoError(t, err)
tt.findId = tt.skill.ID
}
2025-07-27 23:13:04 +02:00
s := &models.Skill{}
2025-01-18 23:50:02 +01:00
err := s.FirstId(tt.findId)
if tt.wantErr {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, tt.skill.Name, s.Name)
assert.Equal(t, "midgard", s.GameSystem)
assert.Equal(t, tt.findId, s.ID)
})
}
2025-07-24 07:39:43 +02:00
database.ResetTestDB()
2025-01-18 23:50:02 +01:00
}
func TestSkill_Save(t *testing.T) {
2025-07-24 07:39:43 +02:00
database.SetupTestDB()
testDefinition := []struct {
2025-01-18 23:50:02 +01:00
name string
2025-07-27 23:13:04 +02:00
skill *models.Skill
2025-01-18 23:50:02 +01:00
wantErr bool
}{
{
name: "update existing skill",
2025-07-27 23:13:04 +02:00
skill: &models.Skill{
2025-07-30 05:40:13 +02:00
Name: "Test Skill",
Beschreibung: "Original Description",
GameSystem: "midgard",
2025-01-18 23:50:02 +01:00
},
wantErr: false,
},
/*{
name: "nil skill",
skill: nil,
wantErr: true,
},*/
}
2025-07-24 07:39:43 +02:00
for _, tt := range testDefinition {
2025-01-18 23:50:02 +01:00
t.Run(tt.name, func(t *testing.T) {
if !tt.wantErr {
// Create initial record
err := tt.skill.Create()
assert.NoError(t, err)
// Modify the skill
tt.skill.Beschreibung = "Updated Description"
}
if tt.skill != nil {
err := tt.skill.Save()
if tt.wantErr {
assert.Error(t, err)
return
}
assert.NoError(t, err)
// Verify the update
2025-07-27 23:13:04 +02:00
saved := &models.Skill{}
2025-01-18 23:50:02 +01:00
err = saved.FirstId(tt.skill.ID)
assert.NoError(t, err)
assert.Equal(t, "Updated Description", saved.Beschreibung)
}
})
}
2025-07-24 07:39:43 +02:00
database.ResetTestDB()
2025-01-18 23:50:02 +01:00
}
func TestSkill_Delete(t *testing.T) {
2025-07-24 07:39:43 +02:00
database.SetupTestDB()
testDefinition := []struct {
2025-01-18 23:50:02 +01:00
name string
2025-07-27 23:13:04 +02:00
skill *models.Skill
2025-01-18 23:50:02 +01:00
wantErr bool
}{
{
name: "delete existing skill",
2025-07-27 23:13:04 +02:00
skill: &models.Skill{
2025-07-30 05:40:13 +02:00
Name: "Test Skill",
GameSystem: "midgard",
2025-01-18 23:50:02 +01:00
},
wantErr: false,
},
{
name: "delete non-existing skill",
2025-07-27 23:13:04 +02:00
skill: &models.Skill{
2025-07-30 05:40:13 +02:00
ID: 9999,
2025-01-18 23:50:02 +01:00
},
wantErr: true,
},
/*{
name: "delete nil skill",
skill: nil,
wantErr: true,
},*/
}
2025-07-24 07:39:43 +02:00
for _, tt := range testDefinition {
2025-01-18 23:50:02 +01:00
t.Run(tt.name, func(t *testing.T) {
if !tt.wantErr && tt.skill != nil {
// Create test data first
err := tt.skill.Create()
assert.NoError(t, err)
}
var err error
if tt.skill != nil {
err = tt.skill.Delete()
}
if tt.wantErr {
assert.Error(t, err)
return
}
assert.NoError(t, err)
// Verify deletion
2025-07-27 23:13:04 +02:00
s := &models.Skill{}
2025-01-18 23:50:02 +01:00
err = s.FirstId(tt.skill.ID)
assert.Error(t, err) // Should error since record is deleted
})
}
2025-07-24 07:39:43 +02:00
database.ResetTestDB()
2025-01-18 23:50:02 +01:00
}
func TestSkill_GetSkillCategories(t *testing.T) {
2025-07-24 07:39:43 +02:00
database.SetupTestDB()
// Create test skill categories in the lookup table
// Note: GetSkillCategories() reads from gsm_skill_categories table, not from skills
testCategories := []*models.SkillCategory{
2025-01-18 23:50:02 +01:00
{
Name: "Category1",
2025-07-30 05:40:13 +02:00
GameSystem: "midgard",
2025-01-18 23:50:02 +01:00
},
{
Name: "Category2",
2025-07-30 05:40:13 +02:00
GameSystem: "midgard",
2025-01-18 23:50:02 +01:00
},
}
// Create test categories in the lookup table
for _, cat := range testCategories {
err := cat.Create()
2025-01-18 23:50:02 +01:00
assert.NoError(t, err)
}
2025-07-24 07:39:43 +02:00
testDefinition := []struct {
2026-01-12 16:36:35 +01:00
name string
expectedMinCount int
expectedMustContain []string
wantErr bool
2025-01-18 23:50:02 +01:00
}{
{
2026-01-12 16:36:35 +01:00
name: "get categories",
expectedMinCount: 2,
expectedMustContain: []string{"Category1", "Category2"},
2026-01-12 16:36:35 +01:00
wantErr: false,
2025-01-18 23:50:02 +01:00
},
}
2025-07-24 07:39:43 +02:00
for _, tt := range testDefinition {
2025-01-18 23:50:02 +01:00
t.Run(tt.name, func(t *testing.T) {
2025-07-27 23:13:04 +02:00
s := &models.Skill{}
2025-01-18 23:50:02 +01:00
categories, err := s.GetSkillCategories()
if tt.wantErr {
assert.Error(t, err)
return
}
assert.NoError(t, err)
2026-01-12 16:36:35 +01:00
assert.GreaterOrEqual(t, len(categories), tt.expectedMinCount, "Should have at least %d categories", tt.expectedMinCount)
// Check that all expected categories are present
for _, expected := range tt.expectedMustContain {
assert.Contains(t, categories, expected, "Categories should contain %q", expected)
}
2025-01-18 23:50:02 +01:00
})
}
2025-07-24 07:39:43 +02:00
database.ResetTestDB()
2025-01-18 23:50:02 +01:00
}