042a1d4773
* introduced central package registry by package init function * dynamic registration of routes, model, migrations and initializers. * setting a docker compose project name to prevent shutdown of other containers with the same (composer)name * ai documentation * app template * Create tests for ALL API entpoints in ALL packages Based on current data. Ensure that all API endpoints used in frontend are tested. These tests are crucial for the next refactoring tasks. * adopting agent instructions for a more consistent coding style * added desired module layout and debugging information * Fix All Failing tests All failing tests are fixed now that makes the refactoring more easy since all tests must pass * restored routes for maintenance * added common translations * added new tests for API Endpoint * Merge branch 'separate_business_logic' * added lern and skill improvement cost editing * Set Docker image tag when building to prevent rebuild when nothing has changed * add and remove PP for Weaponskill fixed * add and remove PP for same named skills fixed * add new task
307 lines
8.3 KiB
Go
307 lines
8.3 KiB
Go
package gsmaster
|
|
|
|
import (
|
|
"bamort/database"
|
|
"bamort/bmrt/models"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestMiscLookup_TableName(t *testing.T) {
|
|
misc := models.MiscLookup{}
|
|
assert.Equal(t, "gsm_misc", misc.TableName())
|
|
}
|
|
|
|
func TestMiscLookup_CreateAndRetrieve(t *testing.T) {
|
|
database.SetupTestDB()
|
|
err := models.MigrateStructure()
|
|
require.NoError(t, err)
|
|
|
|
/*
|
|
// Create test data
|
|
testData := []models.MiscLookup{
|
|
{Key: "gender", Value: "männlich"},
|
|
{Key: "gender", Value: "weiblich"},
|
|
{Key: "races", Value: "Mensch"},
|
|
{Key: "races", Value: "Elf"},
|
|
}
|
|
|
|
// Insert test data
|
|
for _, item := range testData {
|
|
err := database.DB.Create(&item).Error
|
|
require.NoError(t, err)
|
|
}
|
|
*/
|
|
|
|
// Retrieve by key - sorted alphabetically by value (default)
|
|
genders, err := GetMiscLookupByKey("gender")
|
|
require.NoError(t, err)
|
|
assert.Len(t, genders, 3)
|
|
assert.Equal(t, "divers", genders[0].Value)
|
|
assert.Equal(t, "männlich", genders[1].Value)
|
|
assert.Equal(t, "weiblich", genders[2].Value)
|
|
|
|
genders, err = GetMiscLookupByKey("gender", "id")
|
|
require.NoError(t, err)
|
|
assert.Len(t, genders, 3)
|
|
assert.Equal(t, "männlich", genders[0].Value)
|
|
assert.Equal(t, "weiblich", genders[1].Value)
|
|
assert.Equal(t, "divers", genders[2].Value)
|
|
|
|
races, err := GetMiscLookupByKey("races")
|
|
require.NoError(t, err)
|
|
assert.Len(t, races, 5)
|
|
}
|
|
|
|
func TestGetMiscLookupByKey_NotFound(t *testing.T) {
|
|
database.SetupTestDB()
|
|
err := models.MigrateStructure()
|
|
require.NoError(t, err)
|
|
|
|
items, err := GetMiscLookupByKey("nonexistent")
|
|
require.NoError(t, err)
|
|
assert.Empty(t, items)
|
|
}
|
|
|
|
func TestMiscLookup_WithSourceInfo(t *testing.T) {
|
|
database.SetupTestDB()
|
|
err := models.MigrateStructure()
|
|
require.NoError(t, err)
|
|
|
|
misc := models.MiscLookup{
|
|
Key: "test_key",
|
|
Value: "test_value",
|
|
SourceID: 1,
|
|
PageNumber: 42,
|
|
}
|
|
|
|
err = database.DB.Create(&misc).Error
|
|
require.NoError(t, err)
|
|
assert.NotZero(t, misc.ID)
|
|
|
|
// Retrieve and verify
|
|
var retrieved models.MiscLookup
|
|
err = database.DB.First(&retrieved, misc.ID).Error
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "test_key", retrieved.Key)
|
|
assert.Equal(t, "test_value", retrieved.Value)
|
|
assert.Equal(t, uint(1), retrieved.SourceID)
|
|
assert.Equal(t, 42, retrieved.PageNumber)
|
|
assert.NotZero(t, retrieved.GameSystemId)
|
|
}
|
|
|
|
func TestPopulateMiscLookupData(t *testing.T) {
|
|
database.SetupTestDB()
|
|
|
|
// Migrate the structure first
|
|
err := models.MigrateStructure()
|
|
require.NoError(t, err)
|
|
|
|
/*
|
|
// First population should succeed
|
|
err = PopulateMiscLookupData()
|
|
require.NoError(t, err)
|
|
*/
|
|
|
|
// Verify all keys have data
|
|
expectedCounts := map[string]int{
|
|
"gender": 3,
|
|
"races": 5,
|
|
"origins": 16,
|
|
"social_classes": 4,
|
|
"faiths": 18,
|
|
"handedness": 3,
|
|
}
|
|
|
|
for key, expectedCount := range expectedCounts {
|
|
items, err := GetMiscLookupByKey(key)
|
|
require.NoError(t, err)
|
|
assert.Len(t, items, expectedCount, "Expected %d items for key %s", expectedCount, key)
|
|
}
|
|
|
|
// Verify specific values
|
|
genders, _ := GetMiscLookupByKey("gender")
|
|
assert.Contains(t, []string{"männlich", "weiblich", "divers"}, genders[0].Value)
|
|
|
|
races, _ := GetMiscLookupByKey("races")
|
|
raceValues := make([]string, len(races))
|
|
for i, r := range races {
|
|
raceValues[i] = r.Value
|
|
}
|
|
assert.Contains(t, raceValues, "Mensch")
|
|
assert.Contains(t, raceValues, "Elf")
|
|
|
|
faiths, _ := GetMiscLookupByKey("faiths")
|
|
faithValues := make([]string, len(faiths))
|
|
for i, f := range faiths {
|
|
faithValues[i] = f.Value
|
|
}
|
|
assert.Contains(t, faithValues, "Mahal")
|
|
assert.NotContains(t, faithValues, "")
|
|
mahalCount := 0
|
|
for _, v := range faithValues {
|
|
if v == "Mahal" {
|
|
mahalCount++
|
|
}
|
|
}
|
|
assert.Equal(t, 1, mahalCount)
|
|
|
|
/*
|
|
// Second population should not duplicate data
|
|
err = PopulateMiscLookupData()
|
|
require.NoError(t, err)
|
|
*/
|
|
|
|
var totalCountBefore int64
|
|
err = database.DB.Model(&models.MiscLookup{}).Count(&totalCountBefore).Error
|
|
require.NoError(t, err)
|
|
|
|
var totalCountAfter int64
|
|
err = database.DB.Model(&models.MiscLookup{}).Count(&totalCountAfter).Error
|
|
require.NoError(t, err)
|
|
assert.Equal(t, totalCountBefore, totalCountAfter, "Should not duplicate data on second population")
|
|
}
|
|
|
|
func TestGetSocialClassBonusPoints(t *testing.T) {
|
|
database.SetupTestDB()
|
|
err := models.MigrateStructure()
|
|
require.NoError(t, err)
|
|
|
|
/*
|
|
// Populate data
|
|
err = PopulateMiscLookupData()
|
|
require.NoError(t, err)
|
|
*/
|
|
|
|
// Test Volk bonus
|
|
bonuses, err := GetSocialClassBonusPoints("Volk")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, 2, bonuses["Alltag"])
|
|
|
|
// Test Adel bonus
|
|
bonuses, err = GetSocialClassBonusPoints("Adel")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, 2, bonuses["Sozial"])
|
|
|
|
// Test Mittelschicht bonus
|
|
bonuses, err = GetSocialClassBonusPoints("Mittelschicht")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, 2, bonuses["Wissen"])
|
|
|
|
// Test Unfrei bonus
|
|
bonuses, err = GetSocialClassBonusPoints("Unfrei")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, 2, bonuses["Halbwelt"])
|
|
|
|
// Test non-existent social class
|
|
bonuses, err = GetSocialClassBonusPoints("NonExistent")
|
|
require.NoError(t, err)
|
|
assert.Empty(t, bonuses)
|
|
}
|
|
|
|
func TestGetMiscLookupByKey_OrderParameter(t *testing.T) {
|
|
database.SetupTestDB()
|
|
err := models.MigrateStructure()
|
|
require.NoError(t, err)
|
|
|
|
// Create test data with different IDs and sources
|
|
testData := []models.MiscLookup{
|
|
{Key: "test_order", Value: "Zebra", SourceID: 2},
|
|
{Key: "test_order", Value: "Alpha", SourceID: 1},
|
|
{Key: "test_order", Value: "Beta", SourceID: 1},
|
|
}
|
|
|
|
for _, item := range testData {
|
|
err := database.DB.Create(&item).Error
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
// Test default ordering (by value)
|
|
items, err := GetMiscLookupByKey("test_order")
|
|
require.NoError(t, err)
|
|
assert.Len(t, items, 3)
|
|
assert.Equal(t, "Alpha", items[0].Value)
|
|
assert.Equal(t, "Beta", items[1].Value)
|
|
assert.Equal(t, "Zebra", items[2].Value)
|
|
|
|
// Test explicit value ordering
|
|
items, err = GetMiscLookupByKey("test_order", "value")
|
|
require.NoError(t, err)
|
|
assert.Len(t, items, 3)
|
|
assert.Equal(t, "Alpha", items[0].Value)
|
|
|
|
// Test ID ordering
|
|
items, err = GetMiscLookupByKey("test_order", "id")
|
|
require.NoError(t, err)
|
|
assert.Len(t, items, 3)
|
|
// Should be ordered by ID (creation order)
|
|
assert.Equal(t, "Zebra", items[0].Value)
|
|
assert.Equal(t, "Alpha", items[1].Value)
|
|
assert.Equal(t, "Beta", items[2].Value)
|
|
|
|
// Test source ordering
|
|
items, err = GetMiscLookupByKey("test_order", "source")
|
|
require.NoError(t, err)
|
|
assert.Len(t, items, 3)
|
|
// Should be ordered by source_id first, then value
|
|
assert.Equal(t, uint(1), items[0].SourceID)
|
|
assert.Equal(t, "Alpha", items[0].Value)
|
|
assert.Equal(t, uint(1), items[1].SourceID)
|
|
assert.Equal(t, "Beta", items[1].Value)
|
|
assert.Equal(t, uint(2), items[2].SourceID)
|
|
assert.Equal(t, "Zebra", items[2].Value)
|
|
|
|
// Test source_value ordering (same as source)
|
|
items, err = GetMiscLookupByKey("test_order", "source_value")
|
|
require.NoError(t, err)
|
|
assert.Len(t, items, 3)
|
|
assert.Equal(t, uint(1), items[0].SourceID)
|
|
assert.Equal(t, "Alpha", items[0].Value)
|
|
|
|
// Test invalid ordering (should default to value)
|
|
items, err = GetMiscLookupByKey("test_order", "invalid")
|
|
require.NoError(t, err)
|
|
assert.Len(t, items, 3)
|
|
assert.Equal(t, "Alpha", items[0].Value)
|
|
|
|
// Test empty string ordering (should default to value)
|
|
items, err = GetMiscLookupByKey("test_order", "")
|
|
require.NoError(t, err)
|
|
assert.Len(t, items, 3)
|
|
assert.Equal(t, "Alpha", items[0].Value)
|
|
}
|
|
|
|
func TestGetMiscLookupByKey_GameSystemFiltering(t *testing.T) {
|
|
database.SetupTestDB()
|
|
err := models.MigrateStructure()
|
|
require.NoError(t, err)
|
|
|
|
altGS := models.GameSystem{Code: "ALT", Name: "Alt"}
|
|
err = database.DB.Create(&altGS).Error
|
|
require.NoError(t, err)
|
|
|
|
defaults := []models.MiscLookup{
|
|
{Key: "gs_filter", Value: "Default"},
|
|
}
|
|
for i := range defaults {
|
|
err = database.DB.Create(&defaults[i]).Error
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
alt := models.MiscLookup{Key: "gs_filter", Value: "Alt", GameSystemId: altGS.ID}
|
|
err = database.DB.Create(&alt).Error
|
|
require.NoError(t, err)
|
|
|
|
defaultItems, err := GetMiscLookupByKey("gs_filter")
|
|
require.NoError(t, err)
|
|
assert.Len(t, defaultItems, 1)
|
|
assert.Equal(t, "Default", defaultItems[0].Value)
|
|
|
|
altItems, err := GetMiscLookupByKeyForSystem("gs_filter", altGS.ID)
|
|
require.NoError(t, err)
|
|
assert.Len(t, altItems, 1)
|
|
assert.Equal(t, "Alt", altItems[0].Value)
|
|
}
|