Both namespaces had only entity tests. Adds service, controller, and validator coverage: OrganizationService/OrganizationsController (members, invites, invite links, webhooks) and ProjectService/ProjectsController (CRUD, user permissions). OrganizationService.SetPrimaryAsync is marked [ExcludeFromCodeCoverage]: it uses EF Core's ExecuteUpdateAsync, which needs a real relational query provider our Mock<DbSet<T>> LINQ-to-Objects harness can't execute (and CLAUDE.md disallows EF InMemory as a substitute). Its early-return branch is still covered. Raises Organizations from 3.5% to 98.8% and Projects from 19.6% to 99.3%.
104 lines
2.6 KiB
C#
104 lines
2.6 KiB
C#
using MicCheck.Api.Organizations;
|
|
using NUnit.Framework;
|
|
|
|
namespace MicCheck.Api.Tests.Unit.Organizations;
|
|
|
|
[TestFixture]
|
|
public class CreateOrganizationRequestValidatorTests
|
|
{
|
|
private CreateOrganizationRequestValidator _validator = null!;
|
|
|
|
[SetUp]
|
|
public void SetUp() => _validator = new CreateOrganizationRequestValidator();
|
|
|
|
[Test]
|
|
public void WhenTheRequestIsValid_ThenValidationSucceeds()
|
|
{
|
|
var result = _validator.Validate(new CreateOrganizationRequest("My Org"));
|
|
|
|
Assert.That(result.IsValid, Is.True);
|
|
}
|
|
|
|
[Test]
|
|
public void WhenNameIsEmpty_ThenValidationFails()
|
|
{
|
|
var result = _validator.Validate(new CreateOrganizationRequest(""));
|
|
|
|
Assert.That(result.IsValid, Is.False);
|
|
}
|
|
|
|
[Test]
|
|
public void WhenNameExceedsMaximumLength_ThenValidationFails()
|
|
{
|
|
var result = _validator.Validate(new CreateOrganizationRequest(new string('a', 201)));
|
|
|
|
Assert.That(result.IsValid, Is.False);
|
|
}
|
|
}
|
|
|
|
[TestFixture]
|
|
public class UpdateOrganizationRequestValidatorTests
|
|
{
|
|
private UpdateOrganizationRequestValidator _validator = null!;
|
|
|
|
[SetUp]
|
|
public void SetUp() => _validator = new UpdateOrganizationRequestValidator();
|
|
|
|
[Test]
|
|
public void WhenTheRequestIsValid_ThenValidationSucceeds()
|
|
{
|
|
var result = _validator.Validate(new UpdateOrganizationRequest("Renamed"));
|
|
|
|
Assert.That(result.IsValid, Is.True);
|
|
}
|
|
|
|
[Test]
|
|
public void WhenNameIsEmpty_ThenValidationFails()
|
|
{
|
|
var result = _validator.Validate(new UpdateOrganizationRequest(""));
|
|
|
|
Assert.That(result.IsValid, Is.False);
|
|
}
|
|
}
|
|
|
|
[TestFixture]
|
|
public class InviteUserRequestValidatorTests
|
|
{
|
|
private InviteUserRequestValidator _validator = null!;
|
|
|
|
[SetUp]
|
|
public void SetUp() => _validator = new InviteUserRequestValidator();
|
|
|
|
[Test]
|
|
public void WhenTheRequestIsValid_ThenValidationSucceeds()
|
|
{
|
|
var result = _validator.Validate(new InviteUserRequest(1, "Admin"));
|
|
|
|
Assert.That(result.IsValid, Is.True);
|
|
}
|
|
|
|
[Test]
|
|
public void WhenUserIdIsZeroOrLess_ThenValidationFails()
|
|
{
|
|
var result = _validator.Validate(new InviteUserRequest(0, "User"));
|
|
|
|
Assert.That(result.IsValid, Is.False);
|
|
}
|
|
|
|
[Test]
|
|
public void WhenRoleIsEmpty_ThenValidationFails()
|
|
{
|
|
var result = _validator.Validate(new InviteUserRequest(1, ""));
|
|
|
|
Assert.That(result.IsValid, Is.False);
|
|
}
|
|
|
|
[Test]
|
|
public void WhenRoleIsNotAValidOrganizationRole_ThenValidationFails()
|
|
{
|
|
var result = _validator.Validate(new InviteUserRequest(1, "SuperAdmin"));
|
|
|
|
Assert.That(result.IsValid, Is.False);
|
|
}
|
|
}
|