Inspired by dotnet show (#386)
* Changed the order of the projects, Web first to infer as startup. * Added encapsulated JSON serialization - and moved to System.Text.Json * Refactored a few minor updates out Co-authored-by: Eric Fleming <eric-fleming18@hotmail.com>
This commit is contained in:
@@ -25,7 +25,7 @@ namespace Microsoft.eShopWeb.FunctionalTests.Web.Controllers
|
||||
var response = await Client.GetAsync("/api/catalog/list");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var stringResponse = await response.Content.ReadAsStringAsync();
|
||||
var model = JsonSerializer.Deserialize<CatalogIndexViewModel>(stringResponse, _jsonOptions);
|
||||
var model = stringResponse.FromJson<CatalogIndexViewModel>();
|
||||
|
||||
Assert.Equal(10, model.CatalogItems.Count());
|
||||
}
|
||||
@@ -36,7 +36,7 @@ namespace Microsoft.eShopWeb.FunctionalTests.Web.Controllers
|
||||
var response = await Client.GetAsync("/api/catalog/list?page=1");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var stringResponse = await response.Content.ReadAsStringAsync();
|
||||
var model = JsonSerializer.Deserialize<CatalogIndexViewModel>(stringResponse, _jsonOptions);
|
||||
var model = stringResponse.FromJson<CatalogIndexViewModel>();
|
||||
|
||||
Assert.Equal(2, model.CatalogItems.Count());
|
||||
}
|
||||
|
||||
36
tests/UnitTests/ApplicationCore/Extensions/JsonExtensions.cs
Normal file
36
tests/UnitTests/ApplicationCore/Extensions/JsonExtensions.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Extensions
|
||||
{
|
||||
public class JsonExtensions
|
||||
{
|
||||
[Fact]
|
||||
public void CorrectlySerializesAndDeserializesObject()
|
||||
{
|
||||
var testParent = new TestParent
|
||||
{
|
||||
Id = 7,
|
||||
Name = "Test name",
|
||||
Children = new[]
|
||||
{
|
||||
new TestChild(),
|
||||
new TestChild(),
|
||||
new TestChild()
|
||||
}
|
||||
};
|
||||
|
||||
var json = testParent.ToJson();
|
||||
var result = json.FromJson<TestParent>();
|
||||
Assert.Equal(testParent, result);
|
||||
}
|
||||
|
||||
[
|
||||
Theory,
|
||||
InlineData("{ \"id\": 9, \"name\": \"Another test\" }", 9, "Another test"),
|
||||
InlineData("{ \"id\": 3124, \"name\": \"Test Value 1\" }", 3124, "Test Value 1"),
|
||||
]
|
||||
public void CorrectlyDeserializesJson(string json, int expectedId, string expectedName) =>
|
||||
Assert.Equal(new TestParent { Id = expectedId, Name = expectedName }, json.FromJson<TestParent>());
|
||||
|
||||
}
|
||||
}
|
||||
17
tests/UnitTests/ApplicationCore/Extensions/TestChild.cs
Normal file
17
tests/UnitTests/ApplicationCore/Extensions/TestChild.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Extensions
|
||||
{
|
||||
[DebuggerDisplay("Id={Id}, Date={Date}")]
|
||||
public class TestChild : IEquatable<TestChild>
|
||||
{
|
||||
public Guid Id { get; set; } = Guid.NewGuid();
|
||||
|
||||
public DateTime Date { get; set; } = DateTime.UtcNow;
|
||||
|
||||
public bool Equals([AllowNull] TestChild other) =>
|
||||
other?.Date == Date && other?.Id == Id;
|
||||
}
|
||||
}
|
||||
21
tests/UnitTests/ApplicationCore/Extensions/TestParent.cs
Normal file
21
tests/UnitTests/ApplicationCore/Extensions/TestParent.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
|
||||
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Extensions
|
||||
{
|
||||
public class TestParent : IEquatable<TestParent>
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
public IEnumerable<TestChild> Children { get; set; }
|
||||
|
||||
public bool Equals([AllowNull] TestParent other) =>
|
||||
other?.Id == Id && other?.Name == Name &&
|
||||
(other?.Children is null && Children is null ||
|
||||
(other?.Children?.Zip(Children)?.All(t => t.First?.Equals(t.Second) ?? false) ?? false));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user