Files
Bardioc26 95f0fc0b7a editing and maintenance and user suggestions
* every user has a right of a username and a display name and has the right to change it
* System information page now shows information about database user count, char count, and database schema version
* more maintenance lists
* show the right values in columns and fields
* move similar from inside of frontend component functions to utility js when used multiple times
* display help on mouse over
* add more than one believe to character
* make char name editable with better char info in headline
* GiT Gifttoleranz value not calculated correctly
* Bump backend to 0.2.3, frontend to 0.2.2
2026-02-03 17:21:43 +01:00

307 lines
8.2 KiB
Go

package gsmaster
import (
"bamort/database"
"bamort/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": 15,
"social_classes": 4,
"faiths": 15,
"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, "Torkin")
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)
}