Files
bamort/backend/gsmaster/gsm_model_test.go
T

404 lines
8.1 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"
2026-01-29 09:49:36 +01:00
"github.com/stretchr/testify/require"
2025-01-18 23:50:02 +01:00
)
2026-01-29 09:49:36 +01:00
func defaultGameSystem(t *testing.T) *models.GameSystem {
gs := models.GetGameSystem(0, "midgard")
require.NotNil(t, gs)
require.NotZero(t, gs.ID)
return gs
}
2025-01-18 23:50:02 +01:00
func TestSkill_Create(t *testing.T) {
2025-07-24 07:39:43 +02:00
database.SetupTestDB()
2026-01-29 09:49:36 +01:00
gs := defaultGameSystem(t)
2025-07-24 07:39:43 +02:00
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)
2026-01-29 09:49:36 +01:00
assert.Equal(t, gs.ID, tt.skill.GameSystemId)
assert.NotZero(t, tt.skill.GameSystemId)
2025-01-18 23:50:02 +01:00
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()
2026-01-29 09:49:36 +01:00
gs := defaultGameSystem(t)
2025-07-24 07:39:43 +02:00
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)
2026-01-29 09:49:36 +01:00
assert.Equal(t, gs.ID, tt.weaponSkill.GameSystemId)
assert.NotZero(t, tt.weaponSkill.GameSystemId)
2025-01-18 23:50:02 +01:00
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()
2026-01-29 09:49:36 +01:00
gs := defaultGameSystem(t)
2025-07-24 07:39:43 +02:00
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{
Name: "Test Skill",
GameSystemId: 1,
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)
2026-01-29 09:49:36 +01:00
assert.Equal(t, gs.ID, s.GameSystemId)
assert.NotZero(t, s.GameSystemId)
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
}
func TestSkill_FirstId(t *testing.T) {
2025-07-24 07:39:43 +02:00
database.SetupTestDB()
2026-01-29 09:49:36 +01:00
gs := defaultGameSystem(t)
2025-07-24 07:39:43 +02:00
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{
Name: "Test Skill",
GameSystemId: 1,
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)
2026-01-29 09:49:36 +01:00
assert.Equal(t, gs.ID, s.GameSystemId)
assert.NotZero(t, s.GameSystemId)
2025-01-18 23:50:02 +01:00
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",
2026-01-29 09:49:36 +01:00
GameSystemId: 1,
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)
assert.NotZero(t, saved.GameSystemId)
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
}
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{
Name: "Test Skill",
GameSystemId: 1,
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",
GameSystemId: 1,
2025-01-18 23:50:02 +01:00
},
{
Name: "Category2",
GameSystemId: 1,
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
}