Files
bamort/backend/bmrt/character/skill_update_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

195 lines
6.0 KiB
Go

package character
/*
func TestImproveSkillUpdatesLevel(t *testing.T) {
// Setup test database
database.SetupTestDB()
defer database.ResetTestDB()
// Migrate the schema
err := models.MigrateStructure()
assert.NoError(t, err)
// Try to migrate equipment if it exists
if equipmentDB := database.DB.Exec("CREATE TABLE IF NOT EXISTS equi_equipments (id INTEGER PRIMARY KEY, character_id INTEGER, name TEXT)"); equipmentDB.Error != nil {
t.Logf("Warning: Could not create equipment table: %v", equipmentDB.Error)
}
// Create audit log table for tests
database.DB.Exec(`CREATE TABLE IF NOT EXISTS audit_log_entries (
id INTEGER PRIMARY KEY AUTOINCREMENT,
character_id INTEGER,
field_name TEXT,
old_value INTEGER,
new_value INTEGER,
difference INTEGER,
reason TEXT,
user_id INTEGER,
timestamp DATETIME,
notes TEXT
)`)
// Create container table to avoid preload errors
database.DB.Exec("CREATE TABLE IF NOT EXISTS equi_containers (id INTEGER PRIMARY KEY, character_id INTEGER)")
database.DB.Exec("CREATE TABLE IF NOT EXISTS equi_weapons (id INTEGER PRIMARY KEY, character_id INTEGER)")
database.DB.Exec("CREATE TABLE IF NOT EXISTS equi_transportmittel (id INTEGER PRIMARY KEY, character_id INTEGER)")
database.DB.Exec("CREATE TABLE IF NOT EXISTS equi_equipments (id INTEGER PRIMARY KEY, character_id INTEGER)")
// Create test character with ID 20
testChar := models.Char{
BamortBase: models.BamortBase{
ID: 20,
Name: "Test Krieger",
},
Typ: "Krieger",
Rasse: "Mensch",
Grad: 1,
Erfahrungsschatz: models.Erfahrungsschatz{
BamortCharTrait: models.BamortCharTrait{
CharacterID: 20,
},
EP: 326, // Starting EP
},
Vermoegen: models.Vermoegen{
BamortCharTrait: models.BamortCharTrait{
CharacterID: 20,
},
Goldstücke: 390, // Starting Gold
},
}
// Add Athletik skill at level 9
athletikSkill := models.SkFertigkeit{
BamortCharTrait: models.BamortCharTrait{
BamortBase: models.BamortBase{
Name: "Athletik",
},
CharacterID: 20,
},
Fertigkeitswert: 9,
Improvable: true,
}
testChar.Fertigkeiten = append(testChar.Fertigkeiten, athletikSkill)
err = testChar.Create()
assert.NoError(t, err)
// Verify character was created correctly
var verifyChar models.Char
err = database.DB.Preload("Fertigkeiten").Preload("Erfahrungsschatz").Preload("Vermoegen").First(&verifyChar, 20).Error
assert.NoError(t, err)
t.Logf("Character created with ID: %d, EP: %d, Skills: %d", verifyChar.ID, verifyChar.Erfahrungsschatz.EP, len(verifyChar.Fertigkeiten))
// Setup Gin in test mode
gin.SetMode(gin.TestMode)
t.Run("ImproveSkill updates skill level from 9 to 10", func(t *testing.T) {
// Create request body
requestData := map[string]interface{}{
"char_id": 20,
"name": "Athletik",
"current_level": 9,
"target_level": 10,
"type": "skill",
"action": "improve",
"reward": "default",
"use_pp": 1,
"use_gold": 0,
"notes": "Fertigkeit Athletik von 9 auf 10 verbessert (1 Level)",
}
requestBody, _ := json.Marshal(requestData)
// Create HTTP request
req, _ := http.NewRequest("POST", "/api/characters/improve-skill", bytes.NewBuffer(requestBody))
req.Header.Set("Content-Type", "application/json")
// Create response recorder
w := httptest.NewRecorder()
// Create Gin context
c, _ := gin.CreateTestContext(w)
c.Request = req
// Call the actual handler function
ImproveSkillOld(c)
// Print the actual response to see what we get
t.Logf("Response Status: %d", w.Code)
t.Logf("Response Body: %s", w.Body.String())
// Check if we got a successful response
assert.Equal(t, http.StatusOK, w.Code, "Status code should be 200 OK")
// Verify that the skill level was actually updated in the database
var updatedChar models.Char
err = database.DB.Preload("Fertigkeiten").First(&updatedChar, 20).Error
assert.NoError(t, err)
// Find the Athletik skill and check its level
skillFound := false
for _, skill := range updatedChar.Fertigkeiten {
if skill.Name == "Athletik" {
assert.Equal(t, 10, skill.Fertigkeitswert, "Athletik skill should be level 10 after improvement")
skillFound = true
t.Logf("Found Athletik skill with level: %d", skill.Fertigkeitswert)
break
}
}
assert.True(t, skillFound, "Athletik skill should be found in character's skills")
t.Logf("Test completed successfully!")
t.Logf("Athletik skill successfully updated from level 9 to level 10")
})
t.Run("LearnSkill creates new skill at level 1", func(t *testing.T) {
// Create request body for learning a new skill
requestData := map[string]interface{}{
"name": "Schwimmen",
"current_level": 0,
"target_level": 1,
"type": "skill",
"action": "learn",
"reward": "default",
"notes": "Neue Fertigkeit Schwimmen gelernt",
}
requestBody, _ := json.Marshal(requestData)
// Create HTTP request
req, _ := http.NewRequest("POST", "/api/characters/20/learn-skill", bytes.NewBuffer(requestBody))
req.Header.Set("Content-Type", "application/json")
// Create response recorder
w := httptest.NewRecorder()
// Create Gin context with character ID parameter
c, _ := gin.CreateTestContext(w)
c.Request = req
c.Params = gin.Params{gin.Param{Key: "id", Value: "20"}}
// Call the actual handler function
LearnSkillOld(c)
// Check if we got a successful response
assert.Equal(t, http.StatusOK, w.Code, "Status code should be 200 OK")
// Verify that the new skill was created in the database
var updatedChar models.Char
err = updatedChar.FirstID("20")
assert.NoError(t, err)
// Find the Schwimmen skill and check its level
skillFound := false
for _, skill := range updatedChar.Fertigkeiten {
if skill.Name == "Schwimmen" {
assert.Equal(t, 1, skill.Fertigkeitswert, "Schwimmen skill should be level 1 after learning")
skillFound = true
break
}
}
assert.True(t, skillFound, "Schwimmen skill should be found in character's skills")
t.Logf("New skill 'Schwimmen' successfully created at level 1")
})
}
*/