392 lines
7.8 KiB
Go
392 lines
7.8 KiB
Go
package gsmaster
|
|
|
|
import (
|
|
"bamort/database"
|
|
"bamort/models"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestSkill_Create(t *testing.T) {
|
|
database.SetupTestDB()
|
|
testDefinition := []struct {
|
|
name string
|
|
skill *models.Skill
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "valid skill",
|
|
skill: &models.Skill{
|
|
Name: "Test Skill",
|
|
Beschreibung: "Test Description",
|
|
Quelle: "Test Source",
|
|
Initialwert: 5,
|
|
Bonuseigenschaft: "st",
|
|
Improvable: true,
|
|
InnateSkill: false,
|
|
Category: "Test Category",
|
|
},
|
|
wantErr: false,
|
|
},
|
|
/*{
|
|
name: "nil skill",
|
|
skill: nil,
|
|
wantErr: true,
|
|
},*/
|
|
}
|
|
|
|
for _, tt := range testDefinition {
|
|
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.GameSystemId)
|
|
assert.NotZero(t, tt.skill.ID)
|
|
})
|
|
}
|
|
database.ResetTestDB()
|
|
}
|
|
|
|
func TestWeaponSkill_Create(t *testing.T) {
|
|
database.SetupTestDB()
|
|
testDefinition := []struct {
|
|
name string
|
|
weaponSkill *models.WeaponSkill
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "valid weapon skill",
|
|
weaponSkill: &models.WeaponSkill{
|
|
Skill: models.Skill{
|
|
Name: "Test Weapon Skill",
|
|
Beschreibung: "Test Description",
|
|
Quelle: "Test Source",
|
|
Initialwert: 5,
|
|
Bonuseigenschaft: "st",
|
|
Improvable: true,
|
|
InnateSkill: false,
|
|
Category: "Test Category",
|
|
},
|
|
},
|
|
wantErr: false,
|
|
},
|
|
/*{
|
|
name: "nil weapon skill",
|
|
weaponSkill: nil,
|
|
wantErr: true,
|
|
},*/
|
|
}
|
|
|
|
for _, tt := range testDefinition {
|
|
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.GameSystemId)
|
|
assert.NotZero(t, tt.weaponSkill.ID)
|
|
})
|
|
}
|
|
database.ResetTestDB()
|
|
}
|
|
|
|
func TestSkill_TableName(t *testing.T) {
|
|
database.SetupTestDB()
|
|
skill := &models.Skill{}
|
|
expected := "gsm_skills"
|
|
assert.Equal(t, expected, skill.TableName())
|
|
database.ResetTestDB()
|
|
}
|
|
|
|
func TestSkill_First(t *testing.T) {
|
|
database.SetupTestDB()
|
|
testDefinition := []struct {
|
|
name string
|
|
skill *models.Skill
|
|
findName string
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "existing skill",
|
|
skill: &models.Skill{
|
|
Name: "Test Skill",
|
|
GameSystemId: 1,
|
|
},
|
|
findName: "Test Skill",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "non-existing skill",
|
|
skill: &models.Skill{},
|
|
findName: "NonExistent",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "empty name",
|
|
skill: &models.Skill{},
|
|
findName: "",
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range testDefinition {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if !tt.wantErr {
|
|
// Create test data first
|
|
err := tt.skill.Create()
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
s := &models.Skill{}
|
|
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)
|
|
assert.NotZero(t, s.GameSystemId)
|
|
})
|
|
}
|
|
database.ResetTestDB()
|
|
}
|
|
|
|
func TestSkill_FirstId(t *testing.T) {
|
|
database.SetupTestDB()
|
|
testDefinition := []struct {
|
|
name string
|
|
skill *models.Skill
|
|
findId uint
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "existing skill",
|
|
skill: &models.Skill{
|
|
Name: "Test Skill",
|
|
GameSystemId: 1,
|
|
},
|
|
findId: 1,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "non-existing id",
|
|
skill: &models.Skill{},
|
|
findId: 9999,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "zero id",
|
|
skill: &models.Skill{},
|
|
findId: 0,
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range testDefinition {
|
|
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
|
|
}
|
|
|
|
s := &models.Skill{}
|
|
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.NotZero(t, s.GameSystemId)
|
|
assert.Equal(t, tt.findId, s.ID)
|
|
})
|
|
}
|
|
database.ResetTestDB()
|
|
}
|
|
|
|
func TestSkill_Save(t *testing.T) {
|
|
database.SetupTestDB()
|
|
testDefinition := []struct {
|
|
name string
|
|
skill *models.Skill
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "update existing skill",
|
|
skill: &models.Skill{
|
|
Name: "Test Skill",
|
|
Beschreibung: "Original Description",
|
|
GameSystem: "midgard",
|
|
},
|
|
wantErr: false,
|
|
},
|
|
/*{
|
|
name: "nil skill",
|
|
skill: nil,
|
|
wantErr: true,
|
|
},*/
|
|
}
|
|
|
|
for _, tt := range testDefinition {
|
|
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
|
|
saved := &models.Skill{}
|
|
err = saved.FirstId(tt.skill.ID)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "Updated Description", saved.Beschreibung)
|
|
assert.NotZero(t, saved.GameSystemId)
|
|
}
|
|
})
|
|
}
|
|
database.ResetTestDB()
|
|
}
|
|
|
|
func TestSkill_Delete(t *testing.T) {
|
|
database.SetupTestDB()
|
|
testDefinition := []struct {
|
|
name string
|
|
skill *models.Skill
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "delete existing skill",
|
|
skill: &models.Skill{
|
|
Name: "Test Skill",
|
|
GameSystemId: 1,
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "delete non-existing skill",
|
|
skill: &models.Skill{
|
|
ID: 9999,
|
|
},
|
|
wantErr: true,
|
|
},
|
|
/*{
|
|
name: "delete nil skill",
|
|
skill: nil,
|
|
wantErr: true,
|
|
},*/
|
|
}
|
|
|
|
for _, tt := range testDefinition {
|
|
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
|
|
s := &models.Skill{}
|
|
err = s.FirstId(tt.skill.ID)
|
|
assert.Error(t, err) // Should error since record is deleted
|
|
})
|
|
}
|
|
database.ResetTestDB()
|
|
}
|
|
|
|
func TestSkill_GetSkillCategories(t *testing.T) {
|
|
database.SetupTestDB()
|
|
// Create test skill categories in the lookup table
|
|
// Note: GetSkillCategories() reads from gsm_skill_categories table, not from skills
|
|
testCategories := []*models.SkillCategory{
|
|
{
|
|
Name: "Category1",
|
|
GameSystemId: 1,
|
|
},
|
|
{
|
|
Name: "Category2",
|
|
GameSystemId: 1,
|
|
},
|
|
}
|
|
|
|
// Create test categories in the lookup table
|
|
for _, cat := range testCategories {
|
|
err := cat.Create()
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
testDefinition := []struct {
|
|
name string
|
|
expectedMinCount int
|
|
expectedMustContain []string
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "get categories",
|
|
expectedMinCount: 2,
|
|
expectedMustContain: []string{"Category1", "Category2"},
|
|
wantErr: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range testDefinition {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
s := &models.Skill{}
|
|
categories, err := s.GetSkillCategories()
|
|
|
|
if tt.wantErr {
|
|
assert.Error(t, err)
|
|
return
|
|
}
|
|
|
|
assert.NoError(t, err)
|
|
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)
|
|
}
|
|
})
|
|
}
|
|
database.ResetTestDB()
|
|
}
|