From 9c7949d46f36a9e605c5202dc3bcee11283db3df Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 22 Feb 2024 10:47:04 +0100 Subject: [PATCH] add test to ensure the json converter do not mess with the extensions list --- .../Manifest/PackageManifestReaderTests.cs | 42 ++++++++++++++++++- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/PackageManifestReaderTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/PackageManifestReaderTests.cs index 205dcf3efa..1c59a920e9 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/PackageManifestReaderTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/PackageManifestReaderTests.cs @@ -47,8 +47,7 @@ public class PackageManifestReaderTests var first = result.First(); Assert.AreEqual("My Package", first.Name); Assert.AreEqual("1.2.3", first.Version); - Assert.AreEqual(2, first.Extensions.Count()); - Assert.IsTrue(first.Extensions.All(e => e is JsonElement)); + Assert.AreEqual(2, first.Extensions.Length); Assert.NotNull(first.Importmap); var importmap = first.Importmap; @@ -66,6 +65,45 @@ public class PackageManifestReaderTests Assert.AreEqual("https://example.com/modules/shapes/square.js", firstScope.Value); } + [Test] + public async Task Can_Deserialize_Extensions() + { + const string content = @"{ + ""name"": ""My Package"", + ""version"": ""1.2.3"", + ""allowTelemetry"": true, + ""extensions"": [{ + ""type"": ""tree"", + ""meta"": { + ""label"": ""My Tree"", + ""someArray"": [1, 2, 3] + } + }, { + ""type"": ""headerApp"" + } + ] + }"; + _rootDirectoryContentsMock + .Setup(f => f.GetEnumerator()) + .Returns(new List { CreatePackageManifestFile(content) }.GetEnumerator()); + + var result = await _reader.ReadPackageManifestsAsync(); + Assert.AreEqual(1, result.Count()); + + var first = result.First(); + + // Ensure that the extensions are deserialized as JsonElement + Assert.IsTrue(first.Extensions.All(e => e is JsonElement)); + + // Test the deserialization of the first extension to make sure we don't break the JSON parsing + JsonElement firstExtension = (JsonElement)first.Extensions.First(); + Assert.AreEqual("tree", firstExtension.GetProperty("type").GetString()); + var meta = firstExtension.GetProperty("meta"); + Assert.AreEqual("My Tree", meta.GetProperty("label").GetString()); + var someArray = meta.GetProperty("someArray"); + Assert.AreEqual(1, someArray[0].GetInt32()); + } + [Test] public async Task Can_Read_PackageManifest_In_Root_Directories() {