Files
mic-check/tests/api/MicCheck.Api.Tests.Unit/Projects/SetUserPermissionsRequestValidatorTests.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

46 lines
1.2 KiB
C#

using MicCheck.Api.Projects;
using NUnit.Framework;
namespace MicCheck.Api.Tests.Unit.Projects;
[TestFixture]
public class SetUserPermissionsRequestValidatorTests
{
private SetUserPermissionsRequestValidator _validator = null!;
[SetUp]
public void SetUp() => _validator = new SetUserPermissionsRequestValidator();
[Test]
public void WhenTheRequestIsValid_ThenValidationSucceeds()
{
var result = _validator.Validate(new SetUserPermissionsRequest(1, true, ["ViewProject", "EditFeature"]));
Assert.That(result.IsValid, Is.True);
}
[Test]
public void WhenUserIdIsZeroOrLess_ThenValidationFails()
{
var result = _validator.Validate(new SetUserPermissionsRequest(0, true, []));
Assert.That(result.IsValid, Is.False);
}
[Test]
public void WhenAPermissionIsInvalid_ThenValidationFails()
{
var result = _validator.Validate(new SetUserPermissionsRequest(1, false, ["NotAPermission"]));
Assert.That(result.IsValid, Is.False);
}
[Test]
public void WhenPermissionsListIsEmpty_ThenValidationSucceeds()
{
var result = _validator.Validate(new SetUserPermissionsRequest(1, true, []));
Assert.That(result.IsValid, Is.True);
}
}