diff --git a/Kemkas.Web.Tests/Db/Models/CharacterCollectionMutabilityTests.cs b/Kemkas.Web.Tests/Db/Models/CharacterCollectionMutabilityTests.cs new file mode 100644 index 0000000..b63d69a --- /dev/null +++ b/Kemkas.Web.Tests/Db/Models/CharacterCollectionMutabilityTests.cs @@ -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); + } +} + diff --git a/Kemkas.Web.Tests/ViewModels/CharacterDtoJsonDefaultsTests.cs b/Kemkas.Web.Tests/ViewModels/CharacterDtoJsonDefaultsTests.cs new file mode 100644 index 0000000..08c7846 --- /dev/null +++ b/Kemkas.Web.Tests/ViewModels/CharacterDtoJsonDefaultsTests.cs @@ -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(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(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); + } +} + diff --git a/Kemkas.Web/Db/Models/V1Karakter.cs b/Kemkas.Web/Db/Models/V1Karakter.cs index 4c42b93..12246f3 100644 --- a/Kemkas.Web/Db/Models/V1Karakter.cs +++ b/Kemkas.Web/Db/Models/V1Karakter.cs @@ -35,11 +35,11 @@ public class V1Karakter public ApplicationUser? OwnerUser { get; set; } [InverseProperty(nameof(V1KarakterKepzettseg.Karakter))] - public virtual IEnumerable KarakterKepzettsegek { get; set; } = []; + public virtual ICollection KarakterKepzettsegek { get; set; } = new List(); [InverseProperty(nameof(V1Szintlepes.Karakter))] - public virtual IEnumerable Szintlepesek { get; set; } = []; + public virtual ICollection Szintlepesek { get; set; } = new List(); [InverseProperty(nameof(V1Felszereles.Karakter))] - public virtual IEnumerable Felszereles { get; set; } = []; + public virtual ICollection Felszereles { get; set; } = new List(); } \ No newline at end of file diff --git a/Kemkas.Web/Db/Models/V2Karakter.cs b/Kemkas.Web/Db/Models/V2Karakter.cs index 35caec8..319742c 100644 --- a/Kemkas.Web/Db/Models/V2Karakter.cs +++ b/Kemkas.Web/Db/Models/V2Karakter.cs @@ -40,13 +40,13 @@ public class V2Karakter public ApplicationUser? OwnerUser { get; set; } [InverseProperty(nameof(V2KarakterKepzettseg.Karakter))] - public virtual IEnumerable KarakterKepzettsegek { get; set; } = []; + public virtual ICollection KarakterKepzettsegek { get; set; } = new List(); [InverseProperty(nameof(V2Szintlepes.Karakter))] - public virtual IEnumerable Szintlepesek { get; set; } = []; + public virtual ICollection Szintlepesek { get; set; } = new List(); [InverseProperty(nameof(V2Felszereles.Karakter))] - public virtual IEnumerable Felszereles { get; set; } = []; + public virtual ICollection Felszereles { get; set; } = new List(); [InverseProperty(nameof(V2KarakterVarazslat.Karakter))] public virtual ISet Varazslatok { get; set; } = new HashSet();