Files
mic-check/tests/api/MicCheck.Api.Tests.Unit/Organizations/CreateOrganizationRequestValidatorTests.cs
James Wampler 51539d24d8 Add unit tests for MicCheck.Api.Organizations and MicCheck.Api.Projects
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%.
2026-07-05 15:04:03 -07:00

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);
}
}