mirror of
https://github.com/morbalint/kemkas-backend.git
synced 2026-07-17 21:23:46 +00:00
fix ef collection initilizers (#50)
* fix ef collection initilizers * add tests to catch regression
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
using Kemkas.Web.Db.Enums;
|
||||
using Kemkas.Web.Db.Models;
|
||||
|
||||
namespace Kemkas.Web.Tests.Db.Models;
|
||||
|
||||
public class CharacterCollectionMutabilityTests
|
||||
{
|
||||
[Fact]
|
||||
public void V1Karakter_CollectionsAreMutableForEfMaterialization()
|
||||
{
|
||||
var karakter = new V1Karakter { Nev = "Aron" };
|
||||
|
||||
Assert.False(karakter.KarakterKepzettsegek.GetType().IsArray);
|
||||
Assert.False(karakter.Szintlepesek.GetType().IsArray);
|
||||
Assert.False(karakter.Felszereles.GetType().IsArray);
|
||||
|
||||
karakter.KarakterKepzettsegek.Add(new V1KarakterKepzettseg
|
||||
{
|
||||
Kepzettseg = Kepzettseg1E.Alkimia,
|
||||
Karakter = null!
|
||||
});
|
||||
karakter.Szintlepesek.Add(new V1Szintlepes
|
||||
{
|
||||
KarakterSzint = 1,
|
||||
HpRoll = 8,
|
||||
Karakter = null!
|
||||
});
|
||||
karakter.Felszereles.Add(new V1Felszereles
|
||||
{
|
||||
Name = "kard",
|
||||
Karakter = null!
|
||||
});
|
||||
|
||||
Assert.Single(karakter.KarakterKepzettsegek);
|
||||
Assert.Single(karakter.Szintlepesek);
|
||||
Assert.Single(karakter.Felszereles);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void V2Karakter_CollectionsAreMutableForEfMaterialization()
|
||||
{
|
||||
var karakter = new V2Karakter { Nev = "Belia" };
|
||||
|
||||
Assert.False(karakter.KarakterKepzettsegek.GetType().IsArray);
|
||||
Assert.False(karakter.Szintlepesek.GetType().IsArray);
|
||||
Assert.False(karakter.Felszereles.GetType().IsArray);
|
||||
Assert.False(karakter.Varazslatok.GetType().IsArray);
|
||||
|
||||
karakter.KarakterKepzettsegek.Add(new V2KarakterKepzettseg
|
||||
{
|
||||
Kepzettseg = Kepzettseg2E.Alkimia,
|
||||
Karakter = null!
|
||||
});
|
||||
karakter.Szintlepesek.Add(new V2Szintlepes
|
||||
{
|
||||
KarakterSzint = 1,
|
||||
Osztaly = Osztaly2E.Harcos,
|
||||
HpRoll = 9,
|
||||
Karakter = null!
|
||||
});
|
||||
karakter.Felszereles.Add(new V2Felszereles
|
||||
{
|
||||
TargyId = "kard",
|
||||
Count = 1,
|
||||
Karakter = null!
|
||||
});
|
||||
karakter.Varazslatok.Add(new V2KarakterVarazslat
|
||||
{
|
||||
VarazslatId = "v_tuz",
|
||||
Osztaly = Osztaly2E.Varazslo,
|
||||
Karakter = null!
|
||||
});
|
||||
|
||||
Assert.Single(karakter.KarakterKepzettsegek);
|
||||
Assert.Single(karakter.Szintlepesek);
|
||||
Assert.Single(karakter.Felszereles);
|
||||
Assert.Single(karakter.Varazslatok);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
using System.Text.Json;
|
||||
using Kemkas.Web.ViewModels;
|
||||
|
||||
namespace Kemkas.Web.Tests.ViewModels;
|
||||
|
||||
public class CharacterDtoJsonDefaultsTests
|
||||
{
|
||||
[Fact]
|
||||
public void Deserialize1E_WithMissingArrayFields_UsesEmptyCollectionDefaults()
|
||||
{
|
||||
const string json = """
|
||||
{
|
||||
"name": "Aron",
|
||||
"jellem": "TJ",
|
||||
"faj": "f_ember",
|
||||
"osztaly": "o_harcos",
|
||||
"tulajdonsagok": {
|
||||
"t_ero": 10,
|
||||
"t_ugy": 10,
|
||||
"t_egs": 10,
|
||||
"t_int": 10,
|
||||
"t_bol": 10,
|
||||
"t_kar": 10
|
||||
},
|
||||
"felszereles": {
|
||||
"pancelID": "lancruha",
|
||||
"pajzsID": "fa_pajzs"
|
||||
}
|
||||
}
|
||||
""";
|
||||
|
||||
var dto = JsonSerializer.Deserialize<Karakter1eDto>(json);
|
||||
|
||||
Assert.NotNull(dto);
|
||||
Assert.Empty(dto.Kepzettsegek);
|
||||
Assert.Null(dto.Tolvajkepzettsegek);
|
||||
Assert.Empty(dto.HpRolls);
|
||||
Assert.Empty(dto.TulajdonsagNovelesek);
|
||||
Assert.Empty(dto.HarcosSpecializaciok);
|
||||
Assert.Empty(dto.KalozKritikus);
|
||||
Assert.Empty(dto.Felszereles1E.FegyverIds);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Deserialize2E_WithMissingArrayFields_UsesEmptyCollectionDefaults()
|
||||
{
|
||||
const string json = """
|
||||
{
|
||||
"nev": "Belia",
|
||||
"jellem": "TS",
|
||||
"faj": "f_2e_ember",
|
||||
"tulajdonsagok": {
|
||||
"t_ero": 10,
|
||||
"t_ugy": 10,
|
||||
"t_egs": 10,
|
||||
"t_int": 10,
|
||||
"t_bol": 10,
|
||||
"t_kar": 10
|
||||
},
|
||||
"felszereles": {
|
||||
"pancelID": "bor",
|
||||
"pajzsID": "kis_pajzs",
|
||||
"at": 10,
|
||||
"el": 20,
|
||||
"et": 30
|
||||
}
|
||||
}
|
||||
""";
|
||||
|
||||
var dto = JsonSerializer.Deserialize<Karakter2eDto>(json);
|
||||
|
||||
Assert.NotNull(dto);
|
||||
Assert.Empty(dto.Kepzettsegek);
|
||||
Assert.Null(dto.Tolvajkepzettsegek);
|
||||
Assert.Empty(dto.Szintlepesek);
|
||||
Assert.Empty(dto.Felszereles.Fegyverek);
|
||||
Assert.Empty(dto.Felszereles.Viselt);
|
||||
Assert.Empty(dto.Felszereles.Cipelt);
|
||||
Assert.Empty(dto.Felszereles.Aprosagok);
|
||||
Assert.Null(dto.Varazslatok);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,11 +35,11 @@ public class V1Karakter
|
||||
public ApplicationUser? OwnerUser { get; set; }
|
||||
|
||||
[InverseProperty(nameof(V1KarakterKepzettseg.Karakter))]
|
||||
public virtual IEnumerable<V1KarakterKepzettseg> KarakterKepzettsegek { get; set; } = [];
|
||||
public virtual ICollection<V1KarakterKepzettseg> KarakterKepzettsegek { get; set; } = new List<V1KarakterKepzettseg>();
|
||||
|
||||
[InverseProperty(nameof(V1Szintlepes.Karakter))]
|
||||
public virtual IEnumerable<V1Szintlepes> Szintlepesek { get; set; } = [];
|
||||
public virtual ICollection<V1Szintlepes> Szintlepesek { get; set; } = new List<V1Szintlepes>();
|
||||
|
||||
[InverseProperty(nameof(V1Felszereles.Karakter))]
|
||||
public virtual IEnumerable<V1Felszereles> Felszereles { get; set; } = [];
|
||||
public virtual ICollection<V1Felszereles> Felszereles { get; set; } = new List<V1Felszereles>();
|
||||
}
|
||||
@@ -40,13 +40,13 @@ public class V2Karakter
|
||||
public ApplicationUser? OwnerUser { get; set; }
|
||||
|
||||
[InverseProperty(nameof(V2KarakterKepzettseg.Karakter))]
|
||||
public virtual IEnumerable<V2KarakterKepzettseg> KarakterKepzettsegek { get; set; } = [];
|
||||
public virtual ICollection<V2KarakterKepzettseg> KarakterKepzettsegek { get; set; } = new List<V2KarakterKepzettseg>();
|
||||
|
||||
[InverseProperty(nameof(V2Szintlepes.Karakter))]
|
||||
public virtual IEnumerable<V2Szintlepes> Szintlepesek { get; set; } = [];
|
||||
public virtual ICollection<V2Szintlepes> Szintlepesek { get; set; } = new List<V2Szintlepes>();
|
||||
|
||||
[InverseProperty(nameof(V2Felszereles.Karakter))]
|
||||
public virtual IEnumerable<V2Felszereles> Felszereles { get; set; } = [];
|
||||
public virtual ICollection<V2Felszereles> Felszereles { get; set; } = new List<V2Felszereles>();
|
||||
|
||||
[InverseProperty(nameof(V2KarakterVarazslat.Karakter))]
|
||||
public virtual ISet<V2KarakterVarazslat> Varazslatok { get; set; } = new HashSet<V2KarakterVarazslat>();
|
||||
|
||||
Reference in New Issue
Block a user