Files
bamort/backend/bmrt/gsmaster/misclookup_test.go
T
Bardioc26 042a1d4773 Learncost frontend (#42)
* 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
2026-05-01 18:15:31 +02:00

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)
}