Files
2025-12-29 23:06:04 +01:00

166 lines
4.1 KiB
Go

package transfer
import (
"bamort/database"
"bamort/models"
"encoding/json"
"os"
"testing"
)
func setupTestEnvironment(t *testing.T) {
original := os.Getenv("ENVIRONMENT")
os.Setenv("ENVIRONMENT", "test")
database.SetupTestDB(true, true)
models.MigrateStructure()
t.Cleanup(func() {
database.ResetTestDB()
if original == "" {
os.Unsetenv("ENVIRONMENT")
} else {
os.Setenv("ENVIRONMENT", original)
}
})
}
func TestExportCharacter(t *testing.T) {
setupTestEnvironment(t)
// Test with character ID 18 (Fanjo Vetrani - exists in test DB)
characterID := uint(18)
exportData, err := ExportCharacter(characterID)
if err != nil {
t.Fatalf("ExportCharacter failed: %v", err)
}
// Verify basic character data
if exportData.Character.ID != characterID {
t.Errorf("Expected character ID %d, got %d", characterID, exportData.Character.ID)
}
if exportData.Character.Name == "" {
t.Error("Character name should not be empty")
}
// Verify JSON serialization
jsonData, err := json.Marshal(exportData)
if err != nil {
t.Fatalf("Failed to marshal export data to JSON: %v", err)
}
if len(jsonData) == 0 {
t.Error("JSON export should not be empty")
}
// Verify we can unmarshal back
var reimported CharacterExport
err = json.Unmarshal(jsonData, &reimported)
if err != nil {
t.Fatalf("Failed to unmarshal JSON: %v", err)
}
if reimported.Character.ID != characterID {
t.Errorf("After JSON round-trip, expected character ID %d, got %d", characterID, reimported.Character.ID)
}
// Verify sensitive user data is removed
if exportData.Character.User.PasswordHash != "" {
t.Error("Password hash should be empty in export")
}
if !exportData.Character.User.UpdatedAt.IsZero() {
t.Error("UpdatedAt should be zero time in export")
}
}
func TestExportCharacterIncludesSkills(t *testing.T) {
setupTestEnvironment(t)
characterID := uint(18)
exportData, err := ExportCharacter(characterID)
if err != nil {
t.Fatalf("ExportCharacter failed: %v", err)
}
// Character should have some skills
if len(exportData.Character.Fertigkeiten) == 0 {
t.Error("Character should have skills")
}
// Verify GSM data for skills is included
if len(exportData.GSMSkills) == 0 {
t.Error("GSM skills should be included in export")
}
}
func TestExportCharacterIncludesSpells(t *testing.T) {
setupTestEnvironment(t)
characterID := uint(18)
exportData, err := ExportCharacter(characterID)
if err != nil {
t.Fatalf("ExportCharacter failed: %v", err)
}
// Verify GSM data for spells is included if character has spells
if len(exportData.Character.Zauber) > 0 && len(exportData.GSMSpells) == 0 {
t.Error("If character has spells, GSM spells should be included")
}
}
func TestExportCharacterIncludesEquipment(t *testing.T) {
setupTestEnvironment(t)
characterID := uint(18)
exportData, err := ExportCharacter(characterID)
if err != nil {
t.Fatalf("ExportCharacter failed: %v", err)
}
// Verify GSM data for equipment is included if character has weapons
if len(exportData.Character.Waffen) > 0 && len(exportData.GSMWeapons) == 0 {
t.Error("If character has weapons, GSM weapons should be included")
}
}
func TestExportCharacterIncludesLearningData(t *testing.T) {
setupTestEnvironment(t)
characterID := uint(18)
exportData, err := ExportCharacter(characterID)
if err != nil {
t.Fatalf("ExportCharacter failed: %v", err)
}
// Verify learning data structures exist (they might be empty)
if exportData.LearningData.Sources == nil {
t.Error("Learning sources should be initialized")
}
}
func TestExportCharacterIncludesAuditLog(t *testing.T) {
setupTestEnvironment(t)
characterID := uint(18)
exportData, err := ExportCharacter(characterID)
if err != nil {
t.Fatalf("ExportCharacter failed: %v", err)
}
// Audit log entries should be included (even if empty)
if exportData.AuditLogEntries == nil {
t.Error("Audit log entries should be initialized")
}
}
func TestExportNonExistentCharacter(t *testing.T) {
setupTestEnvironment(t)
// Try to export non-existent character
_, err := ExportCharacter(uint(999999))
if err == nil {
t.Error("Expected error when exporting non-existent character")
}
}