Add comprehensive unit tests for backend services and controllers
- Add API.Tests xUnit project with Moq and EF Core InMemory - Add AgeGroupService tests (CRUD operations, edge cases) - Add RegistrationKeyService tests (CRUD + DeleteOldRegistrationKeys) - Add AgeGroupController tests (all endpoints with mocked service) - Add PlunkEmailSender tests (HTTP client mocking, payload verification) - Add Mapper tests (AltersgruppeMapper, RegistrationKeyMapper) https://claude.ai/code/session_01Kv7Mp2c9FKsHEgQe4BoftH
This commit is contained in:
123
API.Tests/Mappers/RegistrationKeyMapperTests.cs
Normal file
123
API.Tests/Mappers/RegistrationKeyMapperTests.cs
Normal file
@@ -0,0 +1,123 @@
|
||||
using API.Models.Internal.User;
|
||||
|
||||
namespace API.Tests.Mappers;
|
||||
|
||||
public class RegistrationKeyMapperTests
|
||||
{
|
||||
[Fact]
|
||||
public void ToInternalFromIngoing_MapsLinkedRole()
|
||||
{
|
||||
// Arrange
|
||||
var ingoing = new RegistrationKeyIngoing
|
||||
{
|
||||
LinkedRole = "Admin"
|
||||
};
|
||||
|
||||
// Act
|
||||
var result = ingoing.ToInternalFromIngoing();
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Admin", result.LinkedRole);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToInternalFromIngoing_NullLinkedRole_MapsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var ingoing = new RegistrationKeyIngoing
|
||||
{
|
||||
LinkedRole = null
|
||||
};
|
||||
|
||||
// Act
|
||||
var result = ingoing.ToInternalFromIngoing();
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
Assert.Null(result.LinkedRole);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToInternalFromIngoing_GeneratesNewId()
|
||||
{
|
||||
// Arrange
|
||||
var ingoing = new RegistrationKeyIngoing
|
||||
{
|
||||
LinkedRole = "User"
|
||||
};
|
||||
|
||||
// Act
|
||||
var result = ingoing.ToInternalFromIngoing();
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result.Id);
|
||||
Assert.NotEmpty(result.Id);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToInternalFromIngoing_GeneratesUniqueIds()
|
||||
{
|
||||
// Arrange
|
||||
var ingoing1 = new RegistrationKeyIngoing { LinkedRole = "Admin" };
|
||||
var ingoing2 = new RegistrationKeyIngoing { LinkedRole = "User" };
|
||||
|
||||
// Act
|
||||
var result1 = ingoing1.ToInternalFromIngoing();
|
||||
var result2 = ingoing2.ToInternalFromIngoing();
|
||||
|
||||
// Assert
|
||||
Assert.NotEqual(result1.Id, result2.Id);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToInternalFromIngoing_SetsCreatedDate()
|
||||
{
|
||||
// Arrange
|
||||
var ingoing = new RegistrationKeyIngoing
|
||||
{
|
||||
LinkedRole = "Moderator"
|
||||
};
|
||||
var beforeCreation = DateTime.UtcNow;
|
||||
|
||||
// Act
|
||||
var result = ingoing.ToInternalFromIngoing();
|
||||
|
||||
// Assert
|
||||
var afterCreation = DateTime.UtcNow;
|
||||
Assert.True(result.Created >= beforeCreation.AddSeconds(-1));
|
||||
Assert.True(result.Created <= afterCreation.AddSeconds(1));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToInternalFromIngoing_EmptyLinkedRole_MapsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var ingoing = new RegistrationKeyIngoing
|
||||
{
|
||||
LinkedRole = ""
|
||||
};
|
||||
|
||||
// Act
|
||||
var result = ingoing.ToInternalFromIngoing();
|
||||
|
||||
// Assert
|
||||
Assert.Equal("", result.LinkedRole);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToInternalFromIngoing_WhitespaceLinkedRole_MapsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var ingoing = new RegistrationKeyIngoing
|
||||
{
|
||||
LinkedRole = " "
|
||||
};
|
||||
|
||||
// Act
|
||||
var result = ingoing.ToInternalFromIngoing();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(" ", result.LinkedRole);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user