fix(api.tests): use a serializable dictionary for xunit test case data
This commit is contained in:
@@ -0,0 +1,41 @@
|
|||||||
|
namespace FiscalOS.API.Tests.Common;
|
||||||
|
|
||||||
|
public interface ISerializableDictionary<TKey, TValue> : IDictionary<TKey, TValue>, IXunitSerializable
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SerializableDictionary<TKey, TValue>
|
||||||
|
: Dictionary<TKey, TValue>, ISerializableDictionary<TKey, TValue> where TKey : notnull
|
||||||
|
{
|
||||||
|
public SerializableDictionary() { }
|
||||||
|
|
||||||
|
public SerializableDictionary(IDictionary<TKey, TValue> dictionary) : base(dictionary)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Deserialize(IXunitSerializationInfo info)
|
||||||
|
{
|
||||||
|
Clear();
|
||||||
|
|
||||||
|
var keysJson = info.GetValue<string>("_DictKeys") ?? "[]";
|
||||||
|
var valuesJson = info.GetValue<string>("_DictValues") ?? "[]";
|
||||||
|
var keys = JsonSerializer.Deserialize<List<TKey>>(keysJson);
|
||||||
|
var values = JsonSerializer.Deserialize<List<TValue>>(valuesJson);
|
||||||
|
|
||||||
|
if (keys is null || values is null || keys.Count != values.Count)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < keys.Count; i++)
|
||||||
|
{
|
||||||
|
Add(keys[i], values[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Serialize(IXunitSerializationInfo info)
|
||||||
|
{
|
||||||
|
info.AddValue("_DictKeys", JsonSerializer.Serialize(Keys));
|
||||||
|
info.AddValue("_DictValues", JsonSerializer.Serialize(Values));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
using FiscalOS.API.Tests.Common;
|
||||||
|
|
||||||
namespace FiscalOS.API.Tests.Integration;
|
namespace FiscalOS.API.Tests.Integration;
|
||||||
|
|
||||||
public class LoginTests(TestApi testApi) : IntegrationTest(testApi)
|
public class LoginTests(TestApi testApi) : IntegrationTest(testApi)
|
||||||
@@ -94,7 +96,7 @@ public class LoginValidationTestCases : TheoryData<LoginValidationTestCase>
|
|||||||
"No username or password",
|
"No username or password",
|
||||||
string.Empty,
|
string.Empty,
|
||||||
string.Empty,
|
string.Empty,
|
||||||
new Dictionary<string, string[]>()
|
new SerializableDictionary<string, string[]>()
|
||||||
{
|
{
|
||||||
["Username"] = ["The Username field is required."],
|
["Username"] = ["The Username field is required."],
|
||||||
["Password"] = ["The Password field is required."]
|
["Password"] = ["The Password field is required."]
|
||||||
@@ -105,7 +107,7 @@ public class LoginValidationTestCases : TheoryData<LoginValidationTestCase>
|
|||||||
"No username",
|
"No username",
|
||||||
string.Empty,
|
string.Empty,
|
||||||
"@Password1",
|
"@Password1",
|
||||||
new Dictionary<string, string[]>()
|
new SerializableDictionary<string, string[]>()
|
||||||
{
|
{
|
||||||
["Username"] = ["The Username field is required."],
|
["Username"] = ["The Username field is required."],
|
||||||
}
|
}
|
||||||
@@ -115,7 +117,7 @@ public class LoginValidationTestCases : TheoryData<LoginValidationTestCase>
|
|||||||
"No password",
|
"No password",
|
||||||
"Stevan",
|
"Stevan",
|
||||||
string.Empty,
|
string.Empty,
|
||||||
new Dictionary<string, string[]>()
|
new SerializableDictionary<string, string[]>()
|
||||||
{
|
{
|
||||||
["Password"] = ["The Password field is required."]
|
["Password"] = ["The Password field is required."]
|
||||||
}
|
}
|
||||||
@@ -128,7 +130,7 @@ public record LoginValidationTestCase : IXunitSerializable
|
|||||||
public string Name { get; private set; } = string.Empty;
|
public string Name { get; private set; } = string.Empty;
|
||||||
public string Username { get; private set; } = string.Empty;
|
public string Username { get; private set; } = string.Empty;
|
||||||
public string Password { get; private set; } = string.Empty;
|
public string Password { get; private set; } = string.Empty;
|
||||||
public Dictionary<string, string[]> ExpectedErrors { get; private set; } = [];
|
public SerializableDictionary<string, string[]> ExpectedErrors { get; private set; } = [];
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
@@ -143,7 +145,7 @@ public record LoginValidationTestCase : IXunitSerializable
|
|||||||
string name,
|
string name,
|
||||||
string username,
|
string username,
|
||||||
string password,
|
string password,
|
||||||
Dictionary<string, string[]> expectedErrors
|
SerializableDictionary<string, string[]> expectedErrors
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Name = name;
|
Name = name;
|
||||||
@@ -157,7 +159,7 @@ public record LoginValidationTestCase : IXunitSerializable
|
|||||||
Name = info.GetValue<string>(nameof(Name)) ?? string.Empty;
|
Name = info.GetValue<string>(nameof(Name)) ?? string.Empty;
|
||||||
Username = info.GetValue<string>(nameof(Username)) ?? string.Empty;
|
Username = info.GetValue<string>(nameof(Username)) ?? string.Empty;
|
||||||
Password = info.GetValue<string>(nameof(Password)) ?? string.Empty;
|
Password = info.GetValue<string>(nameof(Password)) ?? string.Empty;
|
||||||
ExpectedErrors = info.GetValue<Dictionary<string, string[]>>(nameof(ExpectedErrors)) ?? [];
|
ExpectedErrors = info.GetValue<SerializableDictionary<string, string[]>>(nameof(ExpectedErrors)) ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Serialize(IXunitSerializationInfo info)
|
public void Serialize(IXunitSerializationInfo info)
|
||||||
@@ -167,4 +169,4 @@ public record LoginValidationTestCase : IXunitSerializable
|
|||||||
info.AddValue(nameof(Password), Password);
|
info.AddValue(nameof(Password), Password);
|
||||||
info.AddValue(nameof(ExpectedErrors), ExpectedErrors);
|
info.AddValue(nameof(ExpectedErrors), ExpectedErrors);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user