added import stammdaten
for Ferttigkeit and Zauber
This commit is contained in:
@@ -14,7 +14,7 @@ type ImAusruestung struct {
|
||||
BeinhaltetIn *string `json:"beinhaltet_in"`
|
||||
Bonus int `json:"bonus,omitempty"`
|
||||
Gewicht float64 `json:"gewicht"`
|
||||
Magisch ImMagisch `gorm:"foreignKey:ID" json:"magisch"`
|
||||
Magisch ImMagisch `json:"magisch"`
|
||||
Wert float64 `json:"wert"`
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ type ImBehaeltniss struct {
|
||||
Beschreibung string `json:"beschreibung"`
|
||||
BeinhaltetIn any `json:"beinhaltet_in"`
|
||||
Gewicht float64 `json:"gewicht"`
|
||||
Magisch ImMagisch `gorm:"foreignKey:ID" json:"magisch"`
|
||||
Magisch ImMagisch `json:"magisch"`
|
||||
Tragkraft float64 `json:"tragkraft"`
|
||||
Volumen float64 `json:"volumen"`
|
||||
Wert float64 `json:"wert"`
|
||||
@@ -129,7 +129,7 @@ type ImTransportation struct {
|
||||
Gewicht int `json:"gewicht"`
|
||||
Tragkraft float64 `json:"tragkraft"`
|
||||
Wert float64 `json:"wert"`
|
||||
Magisch ImMagisch `gorm:"foreignKey:ID" json:"magisch"`
|
||||
Magisch ImMagisch `json:"magisch"`
|
||||
//Magisch Magisch `gorm:"polymorphic:Item;polymorphicValue:Transportmittel" json:"magisch"`
|
||||
}
|
||||
|
||||
|
||||
@@ -1,57 +1,5 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"bamort/database"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func CheckFertigkeit(fertigkeit *ImFertigkeit, autocreate bool) (*ImStammFertigkeit, error) {
|
||||
stammF := ImStammFertigkeit{}
|
||||
|
||||
if strings.HasPrefix(fertigkeit.ID, "moam") {
|
||||
err := database.DB.First(&stammF, "system=? AND name = ?", "midgard", fertigkeit.Name).Error
|
||||
if err == nil {
|
||||
// Fertigkeit found
|
||||
return &stammF, nil
|
||||
}
|
||||
if !autocreate {
|
||||
return nil, fmt.Errorf("does not exist in Fertigkeit Stammdaten")
|
||||
}
|
||||
stammF.System = "midgard"
|
||||
stammF.Name = fertigkeit.Name
|
||||
stammF.Beschreibung = fertigkeit.Beschreibung
|
||||
if fertigkeit.Fertigkeitswert < 12 {
|
||||
stammF.Initialkeitswert = 5
|
||||
} else {
|
||||
stammF.Initialkeitswert = 12
|
||||
}
|
||||
stammF.Bonuseigenschaft = "keine"
|
||||
stammF.Quelle = fertigkeit.Quelle
|
||||
//fmt.Println(stammF)
|
||||
err = database.DB.Transaction(func(tx *gorm.DB) error {
|
||||
// Save the main character record
|
||||
if err := tx.Create(&stammF).Error; err != nil {
|
||||
return fmt.Errorf("failed to save Fertigkeit Stammdaten: %w", err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
// Fertigkeit found
|
||||
return nil, err
|
||||
}
|
||||
|
||||
}
|
||||
err := database.DB.First(&stammF, "system=? AND name = ?", "midgard", fertigkeit.Name).Error
|
||||
if err != nil {
|
||||
// Fertigkeit found
|
||||
return nil, err
|
||||
}
|
||||
return &stammF, nil
|
||||
}
|
||||
|
||||
type ImStammFertigkeit struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
System string `gorm:"index" json:"system"`
|
||||
@@ -61,3 +9,16 @@ type ImStammFertigkeit struct {
|
||||
Bonuseigenschaft string `json:"bonuseigenschaft,omitempty"`
|
||||
Quelle string `json:"quelle"`
|
||||
}
|
||||
|
||||
type ImStammZauber struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
System string `gorm:"index" json:"system"`
|
||||
Name string `json:"name"`
|
||||
Beschreibung string `json:"beschreibung"`
|
||||
Bonus int `json:"bonus"`
|
||||
Quelle string `json:"quelle"`
|
||||
Stufe int
|
||||
AP int
|
||||
Reichweite int
|
||||
Wirkungsziel string
|
||||
}
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
package stammdaten
|
||||
|
||||
import (
|
||||
"bamort/database"
|
||||
"bamort/models"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func CheckFertigkeit(fertigkeit *models.ImFertigkeit, autocreate bool) (*models.ImStammFertigkeit, error) {
|
||||
stammF := models.ImStammFertigkeit{}
|
||||
gameSystem := "none"
|
||||
if strings.HasPrefix(fertigkeit.ID, "moam") {
|
||||
gameSystem = "midgard"
|
||||
}
|
||||
err := database.DB.First(&stammF, "system=? AND name = ?", gameSystem, fertigkeit.Name).Error
|
||||
if err == nil {
|
||||
// Fertigkeit found
|
||||
return &stammF, nil
|
||||
}
|
||||
if !autocreate {
|
||||
return nil, fmt.Errorf("does not exist in Fertigkeit Stammdaten")
|
||||
}
|
||||
stammF.System = "midgard"
|
||||
stammF.Name = fertigkeit.Name
|
||||
if stammF.Name != "Sprache" {
|
||||
stammF.Beschreibung = fertigkeit.Beschreibung
|
||||
}
|
||||
if fertigkeit.Fertigkeitswert < 12 {
|
||||
stammF.Initialkeitswert = 5
|
||||
} else {
|
||||
stammF.Initialkeitswert = 12
|
||||
}
|
||||
stammF.Bonuseigenschaft = "keine"
|
||||
stammF.Quelle = fertigkeit.Quelle
|
||||
//fmt.Println(stammF)
|
||||
err = database.DB.Transaction(func(tx *gorm.DB) error {
|
||||
// Save the main character record
|
||||
if err := tx.Create(&stammF).Error; err != nil {
|
||||
return fmt.Errorf("failed to save Fertigkeit Stammdaten: %w", err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
// Fertigkeit found
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = database.DB.First(&stammF, "system=? AND name = ?", gameSystem, fertigkeit.Name).Error
|
||||
if err != nil {
|
||||
// Fertigkeit found
|
||||
return nil, err
|
||||
}
|
||||
return &stammF, nil
|
||||
}
|
||||
|
||||
func CheckZauber(zauber *models.ImZauber, autocreate bool) (*models.ImStammZauber, error) {
|
||||
stammF := models.ImStammZauber{}
|
||||
gameSystem := "none"
|
||||
if strings.HasPrefix(zauber.ID, "moam") {
|
||||
gameSystem = "midgard"
|
||||
}
|
||||
err := database.DB.First(&stammF, "system=? AND name = ?", gameSystem, zauber.Name).Error
|
||||
if err == nil {
|
||||
// zauber found
|
||||
return &stammF, nil
|
||||
}
|
||||
if !autocreate {
|
||||
return nil, fmt.Errorf("does not exist in zauber Stammdaten")
|
||||
}
|
||||
stammF.System = "midgard"
|
||||
stammF.Name = zauber.Name
|
||||
stammF.Beschreibung = zauber.Beschreibung
|
||||
stammF.AP = 1
|
||||
stammF.Stufe = 1
|
||||
stammF.Wirkungsziel = "Zauberer"
|
||||
stammF.Reichweite = 15
|
||||
|
||||
stammF.Quelle = zauber.Quelle
|
||||
//fmt.Println(stammF)
|
||||
err = database.DB.Transaction(func(tx *gorm.DB) error {
|
||||
// Save the main character record
|
||||
if err := tx.Create(&stammF).Error; err != nil {
|
||||
return fmt.Errorf("failed to save zauber Stammdaten: %w", err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
// zauber found
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = database.DB.First(&stammF, "system=? AND name = ?", gameSystem, zauber.Name).Error
|
||||
if err != nil {
|
||||
// zauber found
|
||||
return nil, err
|
||||
}
|
||||
return &stammF, nil
|
||||
}
|
||||
@@ -1,17 +1,49 @@
|
||||
package main
|
||||
package tests
|
||||
|
||||
import (
|
||||
"bamort/database"
|
||||
"bamort/models"
|
||||
"bamort/stammdaten"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func TestImportVTT(t *testing.T) {
|
||||
func initTestDB4Import() *gorm.DB {
|
||||
db := SetupTestDB()
|
||||
db.AutoMigrate(
|
||||
/*
|
||||
&models.ImAp{},
|
||||
&models.ImEigenschaft{},
|
||||
&models.ImAusruestung{},
|
||||
&models.ImFertigkeit{},
|
||||
&models.ImZauber{},
|
||||
&models.ImWaffenfertigkeit{},
|
||||
&models.ImWaffe{},
|
||||
&models.ImMerkmale{},
|
||||
&models.ImLp{},
|
||||
&models.ImGestalt{},
|
||||
&models.ImErfahrungsschatz{},
|
||||
&models.ImEigenschaften{},
|
||||
&models.ImBennies{},
|
||||
&models.ImBehaeltniss{},
|
||||
&models.ImAp{},
|
||||
&models.ImB{},
|
||||
&models.ImTransportation{},
|
||||
&models.ImMagisch{},
|
||||
&models.ImCharacterImport{},
|
||||
*/
|
||||
&models.ImStammFertigkeit{}, //needed for stammdaten.CheckFertigkeit
|
||||
&models.ImStammZauber{}, //needed for stammdaten.CheckZauber
|
||||
)
|
||||
return db
|
||||
}
|
||||
|
||||
func TestImportVTTStructure(t *testing.T) {
|
||||
// Setup test database
|
||||
//testDB := SetupTestDB()
|
||||
//DB = testDB // Assign test DB to global DB
|
||||
@@ -42,14 +74,14 @@ func TestImportVTT(t *testing.T) {
|
||||
assert.Equal(t, 3, len(character.Spezialisierung))
|
||||
assert.Equal(t, "Kriegshammer", character.Spezialisierung[0])
|
||||
assert.Equal(t, "Armbrust:schwer", character.Spezialisierung[1])
|
||||
|
||||
//fmt.Println(character)
|
||||
}
|
||||
|
||||
func TestImportFertigkeitenStammdaten(t *testing.T) {
|
||||
func TestImportFertigkeitenStammdatenSingle(t *testing.T) {
|
||||
// Setup test database
|
||||
testDB := SetupTestDB()
|
||||
testDB := initTestDB4Import()
|
||||
database.DB = testDB // Assign test DB to global DB
|
||||
|
||||
// loading file to Modell
|
||||
fileName := fmt.Sprintf("../testdata/%s", "VTT_Import1.json")
|
||||
assert.Equal(t, "../testdata/VTT_Import1.json", fileName)
|
||||
@@ -59,46 +91,121 @@ func TestImportFertigkeitenStammdaten(t *testing.T) {
|
||||
err = json.Unmarshal(fileContent, &character)
|
||||
assert.NoError(t, err, "Expected no error when Unmarshal filecontent")
|
||||
|
||||
//checke Fertigkeit auf vorhandensein in den Stammdaten
|
||||
fertigkeit := character.Fertigkeiten[1]
|
||||
//for _, fertigkeit := range character.Fertigkeiten {
|
||||
//fmt.Printf("Name: %s, Beschreibung: %s, Wert: %d\n",
|
||||
// fertigkeit.Name, fertigkeit.Beschreibung, fertigkeit.Fertigkeitswert)
|
||||
//fmt.Println(fertigkeit)
|
||||
/* stammF := StammFertigkeit{}
|
||||
if strings.HasPrefix(fertigkeit.ImportID, "moam") {
|
||||
err = DB.First(&stammF, "system=? AND name = ?", "midgard", fertigkeit.Name).Error
|
||||
assert.Error(t, err, "Expected not to find the Fertigkeit Stammdaten in the database")
|
||||
stammF.System = "midgard"
|
||||
stammF.Name = fertigkeit.Name
|
||||
stammF.Beschreibung = fertigkeit.Beschreibung
|
||||
if fertigkeit.Fertigkeitswert < 12 {
|
||||
stammF.Initialkeitswert = 5
|
||||
} else {
|
||||
stammF.Initialkeitswert = 12
|
||||
}
|
||||
stammF.Bonuseigenschaft = "keine"
|
||||
stammF.Quelle = fertigkeit.Quelle
|
||||
//fmt.Println(stammF)
|
||||
err = DB.Transaction(func(tx *gorm.DB) error {
|
||||
// Save the main character record
|
||||
if err := tx.Create(&stammF).Error; err != nil {
|
||||
return fmt.Errorf("failed to save Fertigkeit Stammdaten: %w", err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
assert.NoError(t, err, "Expected no error saving Fertigkeit Stammdaten in the database")
|
||||
}
|
||||
err = DB.First(&stammF, "system=? AND name = ?", "midgard", fertigkeit.Name).Error
|
||||
fmt.Println(stammF) */
|
||||
stammF, err := models.CheckFertigkeit(&fertigkeit, false)
|
||||
stammF, err := stammdaten.CheckFertigkeit(&fertigkeit, false)
|
||||
assert.Error(t, err, "expexted Error does not exist in Fertigkeit Stammdaten")
|
||||
if stammF == nil && err != nil {
|
||||
stammF, err = models.CheckFertigkeit(&fertigkeit, true)
|
||||
stammF, err = stammdaten.CheckFertigkeit(&fertigkeit, true)
|
||||
}
|
||||
assert.NoError(t, err, "Expected to finds the Fertigkeit Stammdaten in the database")
|
||||
assert.Equal(t, fertigkeit.Name, stammF.Name)
|
||||
assert.Equal(t, fertigkeit.Beschreibung, stammF.Beschreibung)
|
||||
assert.Equal(t, fertigkeit.Quelle, stammF.Quelle)
|
||||
assert.Equal(t, 5, stammF.Initialkeitswert)
|
||||
assert.Equal(t, "keine", stammF.Bonuseigenschaft)
|
||||
assert.Equal(t, "midgard", stammF.System)
|
||||
assert.Equal(t, 1, int(stammF.ID))
|
||||
|
||||
//}
|
||||
|
||||
// und noch mal
|
||||
//checke Fertigkeit auf vorhandensein in den Stammdaten
|
||||
//fertigkeit := character.Fertigkeiten[1]
|
||||
stammF, err = stammdaten.CheckFertigkeit(&fertigkeit, false)
|
||||
assert.NoError(t, err, "expexted no Error exist in Fertigkeit Stammdaten")
|
||||
if stammF == nil && err != nil {
|
||||
stammF, err = stammdaten.CheckFertigkeit(&fertigkeit, true)
|
||||
}
|
||||
assert.NoError(t, err, "Expected to finds the Fertigkeit Stammdaten in the database")
|
||||
assert.Equal(t, fertigkeit.Name, stammF.Name)
|
||||
assert.Equal(t, fertigkeit.Beschreibung, stammF.Beschreibung)
|
||||
assert.Equal(t, fertigkeit.Quelle, stammF.Quelle)
|
||||
assert.Equal(t, 5, stammF.Initialkeitswert)
|
||||
assert.Equal(t, "keine", stammF.Bonuseigenschaft)
|
||||
assert.Equal(t, "midgard", stammF.System)
|
||||
assert.Equal(t, 1, int(stammF.ID))
|
||||
}
|
||||
|
||||
func TestImportFertigkeitenStammdatenMulti(t *testing.T) {
|
||||
// Setup test database
|
||||
testDB := initTestDB4Import()
|
||||
database.DB = testDB // Assign test DB to global DB
|
||||
|
||||
// loading file to Modell
|
||||
fileName := fmt.Sprintf("../testdata/%s", "VTT_Import1.json")
|
||||
assert.Equal(t, "../testdata/VTT_Import1.json", fileName)
|
||||
fileContent, err := os.ReadFile(fileName)
|
||||
assert.NoError(t, err, "Expected no error when reading file "+fileName)
|
||||
character := models.ImCharacterImport{}
|
||||
err = json.Unmarshal(fileContent, &character)
|
||||
assert.NoError(t, err, "Expected no error when Unmarshal filecontent")
|
||||
|
||||
//for index, fertigkeit := range character.Fertigkeiten {
|
||||
for _, fertigkeit := range character.Fertigkeiten {
|
||||
fmt.Println(fertigkeit.Name)
|
||||
stammF, err := stammdaten.CheckFertigkeit(&fertigkeit, true)
|
||||
assert.NoError(t, err, "Expected to finds the Fertigkeit Stammdaten in the database")
|
||||
assert.Equal(t, fertigkeit.Name, stammF.Name, "Name should be equal")
|
||||
if fertigkeit.Name != "Sprache" {
|
||||
assert.Equal(t, fertigkeit.Beschreibung, stammF.Beschreibung, "Beschreibung should be equal")
|
||||
} else {
|
||||
assert.Equal(t, "", stammF.Beschreibung, "Beschreibung should be equal")
|
||||
}
|
||||
assert.Equal(t, fertigkeit.Quelle, stammF.Quelle, "Quelle should be equal")
|
||||
//assert.Equal(t, 5, stammF.Initialkeitswert, "Initialkeitswert should be equal")
|
||||
assert.Equal(t, "keine", stammF.Bonuseigenschaft, "Bonuseigenschaft should be equal")
|
||||
assert.Equal(t, "midgard", stammF.System, "System should be equal")
|
||||
//assert.NotEmpty(t, index+1, int(stammF.ID), "ID should be equal")
|
||||
}
|
||||
}
|
||||
|
||||
func TestImportZauberStammdatenSingle(t *testing.T) {
|
||||
// Setup test database
|
||||
testDB := initTestDB4Import()
|
||||
database.DB = testDB // Assign test DB to global DB
|
||||
|
||||
// loading file to Modell
|
||||
fileName := fmt.Sprintf("../testdata/%s", "VTT_Import1.json")
|
||||
assert.Equal(t, "../testdata/VTT_Import1.json", fileName)
|
||||
fileContent, err := os.ReadFile(fileName)
|
||||
assert.NoError(t, err, "Expected no error when reading file "+fileName)
|
||||
character := models.ImCharacterImport{}
|
||||
err = json.Unmarshal(fileContent, &character)
|
||||
assert.NoError(t, err, "Expected no error when Unmarshal filecontent")
|
||||
|
||||
//checke zauber auf vorhandensein in den Stammdaten
|
||||
zauber := character.Zauber[0]
|
||||
stammF, err := stammdaten.CheckZauber(&zauber, false)
|
||||
assert.Error(t, err, "expexted Error does not exist in zauber Stammdaten")
|
||||
if stammF == nil && err != nil {
|
||||
stammF, err = stammdaten.CheckZauber(&zauber, true)
|
||||
}
|
||||
assert.NoError(t, err, "Expected to finds the zauber Stammdaten in the database")
|
||||
assert.Equal(t, zauber.Name, stammF.Name)
|
||||
assert.Equal(t, zauber.Beschreibung, stammF.Beschreibung)
|
||||
assert.Equal(t, zauber.Quelle, stammF.Quelle)
|
||||
assert.Equal(t, 1, stammF.AP)
|
||||
assert.Equal(t, 1, stammF.Stufe)
|
||||
assert.Equal(t, "Zauberer", stammF.Wirkungsziel)
|
||||
assert.Equal(t, 15, stammF.Reichweite)
|
||||
assert.Equal(t, "midgard", stammF.System)
|
||||
assert.Equal(t, 1, int(stammF.ID))
|
||||
|
||||
// und noch mal
|
||||
//checke zauber auf vorhandensein in den Stammdaten
|
||||
//zauber := character.zauberen[1]
|
||||
stammF, err = stammdaten.CheckZauber(&zauber, false)
|
||||
assert.NoError(t, err, "expexted no Error exist in zauber Stammdaten")
|
||||
if stammF == nil && err != nil {
|
||||
stammF, err = stammdaten.CheckZauber(&zauber, true)
|
||||
}
|
||||
assert.NoError(t, err, "Expected to finds the zauber Stammdaten in the database")
|
||||
assert.Equal(t, zauber.Name, stammF.Name)
|
||||
assert.Equal(t, zauber.Beschreibung, stammF.Beschreibung)
|
||||
assert.Equal(t, zauber.Quelle, stammF.Quelle)
|
||||
assert.Equal(t, 1, stammF.AP)
|
||||
assert.Equal(t, 1, stammF.Stufe)
|
||||
assert.Equal(t, "Zauberer", stammF.Wirkungsziel)
|
||||
assert.Equal(t, 15, stammF.Reichweite)
|
||||
assert.Equal(t, "midgard", stammF.System)
|
||||
assert.Equal(t, 1, int(stammF.ID))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package tests
|
||||
|
||||
import (
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// SetupTestDB creates an in-memory SQLite database for testing
|
||||
func SetupTestDB() *gorm.DB {
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||||
if err != nil {
|
||||
panic("failed to connect to the test database")
|
||||
}
|
||||
|
||||
return db
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package main
|
||||
package tests
|
||||
|
||||
import (
|
||||
"bamort/character"
|
||||
@@ -7,17 +7,11 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// SetupTestDB creates an in-memory SQLite database for testing
|
||||
func SetupTestDB() *gorm.DB {
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||||
if err != nil {
|
||||
panic("failed to connect to the test database")
|
||||
}
|
||||
|
||||
func initTestDB4Char() *gorm.DB {
|
||||
db := SetupTestDB()
|
||||
// Auto-migrate the schemas for all related models
|
||||
db.AutoMigrate(&models.Char{},
|
||||
&models.Fertigkeit{}, &models.Zauber{}, &models.Lp{},
|
||||
@@ -42,7 +36,7 @@ func SetupTestDB() *gorm.DB {
|
||||
|
||||
func TestSaveCharacterToDB(t *testing.T) {
|
||||
// Setup test database
|
||||
testDB := SetupTestDB()
|
||||
testDB := initTestDB4Char()
|
||||
database.DB = testDB // Assign test DB to global DB
|
||||
|
||||
// Define a sample character for testing
|
||||
|
||||
Reference in New Issue
Block a user