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%.
This commit is contained in:
2026-07-05 14:36:24 -07:00
parent d6594521f8
commit 7b33bca6a9
11 changed files with 1564 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
using MicCheck.Api.Projects;
using NUnit.Framework;
namespace MicCheck.Api.Tests.Unit.Projects;
[TestFixture]
public class UpdateProjectRequestValidatorTests
{
private UpdateProjectRequestValidator _validator = null!;
[SetUp]
public void SetUp() => _validator = new UpdateProjectRequestValidator();
[Test]
public void WhenTheRequestIsValid_ThenValidationSucceeds()
{
var result = _validator.Validate(new UpdateProjectRequest("Renamed", true));
Assert.That(result.IsValid, Is.True);
}
[Test]
public void WhenNameIsEmpty_ThenValidationFails()
{
var result = _validator.Validate(new UpdateProjectRequest("", false));
Assert.That(result.IsValid, Is.False);
}
[Test]
public void WhenNameExceedsMaximumLength_ThenValidationFails()
{
var result = _validator.Validate(new UpdateProjectRequest(new string('a', 201), false));
Assert.That(result.IsValid, Is.False);
}
}