78 lines
2.8 KiB
C#
78 lines
2.8 KiB
C#
using System.Reflection;
|
|
using PSInfisicalAPI.Models;
|
|
using Xunit;
|
|
|
|
namespace PSInfisicalAPI.Tests
|
|
{
|
|
public class TagMapperTests
|
|
{
|
|
private static readonly System.Type MapperType = typeof(PSInfisicalAPI.Connections.InfisicalConnection).Assembly
|
|
.GetType("PSInfisicalAPI.Tags.InfisicalTagMapper", true);
|
|
|
|
private static readonly System.Type DtoType = typeof(PSInfisicalAPI.Connections.InfisicalConnection).Assembly
|
|
.GetType("PSInfisicalAPI.Tags.InfisicalTagResponseDto", true);
|
|
|
|
private static InfisicalTag InvokeMap(object dto, string fallbackProjectId)
|
|
{
|
|
MethodInfo map = MapperType.GetMethod("Map", BindingFlags.Public | BindingFlags.Static);
|
|
return (InfisicalTag)map.Invoke(null, new object[] { dto, fallbackProjectId });
|
|
}
|
|
|
|
[Fact]
|
|
public void Map_Null_Returns_Null()
|
|
{
|
|
Assert.Null(InvokeMap(null, "proj-x"));
|
|
}
|
|
|
|
[Fact]
|
|
public void Map_Populates_Fields_With_Explicit_ProjectId()
|
|
{
|
|
object dto = System.Activator.CreateInstance(DtoType);
|
|
DtoType.GetProperty("Id").SetValue(dto, "tag-001");
|
|
DtoType.GetProperty("Slug").SetValue(dto, "critical");
|
|
DtoType.GetProperty("Name").SetValue(dto, "Critical");
|
|
DtoType.GetProperty("Color").SetValue(dto, "#FF0000");
|
|
DtoType.GetProperty("ProjectId").SetValue(dto, "proj-001");
|
|
|
|
InfisicalTag tag = InvokeMap(dto, "fallback-proj");
|
|
|
|
Assert.Equal("tag-001", tag.Id);
|
|
Assert.Equal("critical", tag.Slug);
|
|
Assert.Equal("Critical", tag.Name);
|
|
Assert.Equal("#FF0000", tag.Color);
|
|
Assert.Equal("proj-001", tag.ProjectId);
|
|
}
|
|
|
|
[Fact]
|
|
public void Map_Uses_WorkspaceId_When_ProjectId_Empty()
|
|
{
|
|
object dto = System.Activator.CreateInstance(DtoType);
|
|
DtoType.GetProperty("Id").SetValue(dto, "tag-002");
|
|
DtoType.GetProperty("WorkspaceId").SetValue(dto, "wks-002");
|
|
|
|
InfisicalTag tag = InvokeMap(dto, "fallback-proj");
|
|
Assert.Equal("wks-002", tag.ProjectId);
|
|
}
|
|
|
|
[Fact]
|
|
public void Map_Uses_Fallback_When_No_ProjectId_Or_WorkspaceId()
|
|
{
|
|
object dto = System.Activator.CreateInstance(DtoType);
|
|
DtoType.GetProperty("Id").SetValue(dto, "tag-003");
|
|
|
|
InfisicalTag tag = InvokeMap(dto, "fallback-proj");
|
|
Assert.Equal("fallback-proj", tag.ProjectId);
|
|
}
|
|
|
|
[Fact]
|
|
public void Map_Falls_Back_To_InternalId_For_Id()
|
|
{
|
|
object dto = System.Activator.CreateInstance(DtoType);
|
|
DtoType.GetProperty("InternalId").SetValue(dto, "internal-tag");
|
|
|
|
InfisicalTag tag = InvokeMap(dto, "p");
|
|
Assert.Equal("internal-tag", tag.Id);
|
|
}
|
|
}
|
|
}
|