M2: Projects CRUD - model, DTOs, mapper, client, 5 cmdlets + tests
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
using System.Collections;
|
||||
using System.Reflection;
|
||||
using PSInfisicalAPI.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace PSInfisicalAPI.Tests
|
||||
{
|
||||
public class ProjectMapperTests
|
||||
{
|
||||
private static readonly System.Type MapperType = typeof(PSInfisicalAPI.Connections.InfisicalConnection).Assembly
|
||||
.GetType("PSInfisicalAPI.Projects.InfisicalProjectMapper", true);
|
||||
|
||||
private static readonly System.Type DtoType = typeof(PSInfisicalAPI.Connections.InfisicalConnection).Assembly
|
||||
.GetType("PSInfisicalAPI.Projects.InfisicalProjectResponseDto", true);
|
||||
|
||||
private static readonly System.Type EnvDtoType = typeof(PSInfisicalAPI.Connections.InfisicalConnection).Assembly
|
||||
.GetType("PSInfisicalAPI.Projects.InfisicalProjectEnvironmentDto", true);
|
||||
|
||||
private static InfisicalProject InvokeMap(object dto)
|
||||
{
|
||||
MethodInfo map = MapperType.GetMethod("Map", BindingFlags.Public | BindingFlags.Static);
|
||||
return (InfisicalProject)map.Invoke(null, new[] { dto });
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Map_Null_Dto_Returns_Null()
|
||||
{
|
||||
Assert.Null(InvokeMap(null));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Map_Populates_Core_Fields()
|
||||
{
|
||||
object dto = System.Activator.CreateInstance(DtoType);
|
||||
DtoType.GetProperty("Id").SetValue(dto, "proj-001");
|
||||
DtoType.GetProperty("Name").SetValue(dto, "DevOps");
|
||||
DtoType.GetProperty("Slug").SetValue(dto, "devops");
|
||||
DtoType.GetProperty("Description").SetValue(dto, "Internal DevOps project");
|
||||
DtoType.GetProperty("Organization").SetValue(dto, "org-abc");
|
||||
DtoType.GetProperty("Type").SetValue(dto, "secret-manager");
|
||||
DtoType.GetProperty("AutoCapitalization").SetValue(dto, true);
|
||||
DtoType.GetProperty("CreatedAt").SetValue(dto, "2026-01-15T12:34:56Z");
|
||||
DtoType.GetProperty("UpdatedAt").SetValue(dto, "2026-02-20T09:00:00Z");
|
||||
|
||||
InfisicalProject project = InvokeMap(dto);
|
||||
|
||||
Assert.Equal("proj-001", project.Id);
|
||||
Assert.Equal("DevOps", project.Name);
|
||||
Assert.Equal("devops", project.Slug);
|
||||
Assert.Equal("Internal DevOps project", project.Description);
|
||||
Assert.Equal("org-abc", project.OrganizationId);
|
||||
Assert.Equal("secret-manager", project.Type);
|
||||
Assert.True(project.AutoCapitalization);
|
||||
Assert.NotNull(project.CreatedAtUtc);
|
||||
Assert.NotNull(project.UpdatedAtUtc);
|
||||
Assert.Empty(project.EnvironmentSlugs);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Map_Falls_Back_To_InternalId_And_OrgId()
|
||||
{
|
||||
object dto = System.Activator.CreateInstance(DtoType);
|
||||
DtoType.GetProperty("InternalId").SetValue(dto, "internal-id-1");
|
||||
DtoType.GetProperty("OrgId").SetValue(dto, "org-fallback");
|
||||
|
||||
InfisicalProject project = InvokeMap(dto);
|
||||
|
||||
Assert.Equal("internal-id-1", project.Id);
|
||||
Assert.Equal("org-fallback", project.OrganizationId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Map_Extracts_EnvironmentSlugs()
|
||||
{
|
||||
object dto = System.Activator.CreateInstance(DtoType);
|
||||
DtoType.GetProperty("Id").SetValue(dto, "proj-002");
|
||||
|
||||
System.Type listType = typeof(System.Collections.Generic.List<>).MakeGenericType(EnvDtoType);
|
||||
IList envs = (IList)System.Activator.CreateInstance(listType);
|
||||
|
||||
object env1 = System.Activator.CreateInstance(EnvDtoType);
|
||||
EnvDtoType.GetProperty("Slug").SetValue(env1, "dev");
|
||||
EnvDtoType.GetProperty("Name").SetValue(env1, "Development");
|
||||
envs.Add(env1);
|
||||
|
||||
object env2 = System.Activator.CreateInstance(EnvDtoType);
|
||||
EnvDtoType.GetProperty("Slug").SetValue(env2, "prod");
|
||||
envs.Add(env2);
|
||||
|
||||
DtoType.GetProperty("Environments").SetValue(dto, envs);
|
||||
|
||||
InfisicalProject project = InvokeMap(dto);
|
||||
|
||||
Assert.Equal(2, project.EnvironmentSlugs.Length);
|
||||
Assert.Contains("dev", project.EnvironmentSlugs);
|
||||
Assert.Contains("prod", project.EnvironmentSlugs);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MapMany_Null_Returns_Empty()
|
||||
{
|
||||
MethodInfo mapMany = MapperType.GetMethod("MapMany", BindingFlags.Public | BindingFlags.Static);
|
||||
InfisicalProject[] result = (InfisicalProject[])mapMany.Invoke(null, new object[] { null });
|
||||
Assert.NotNull(result);
|
||||
Assert.Empty(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user