Add unit tests for Environments, Audit, and Webhooks namespaces (#6)
## Summary - Add missing unit test coverage for the Environments, Audit, and Webhooks namespaces (raises them from ~0-62% to 91-100%) - Exclude WebhookBackgroundService/WebhookRetryBackgroundService from coverage (require live DI/DB, disallowed by CLAUDE.md's no-InMemory/WebApplicationFactory rule) ## Test plan - [x] `dotnet test` full suite passes (646/646) - [x] Coverage report confirms Environments ~99.5%, Audit 100%, Webhooks ~91% Reviewed-on: #6
This commit was merged in pull request #6.
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
using MicCheck.Api.Segments;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace MicCheck.Api.Tests.Unit.Segments;
|
||||
|
||||
[TestFixture]
|
||||
public class CreateSegmentRequestValidatorTests
|
||||
{
|
||||
private CreateSegmentRequestValidator _validator = null!;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp() => _validator = new CreateSegmentRequestValidator();
|
||||
|
||||
private static CreateSegmentRequest ValidRequest() => new(
|
||||
"Premium Users",
|
||||
[new CreateSegmentRuleRequest("All", [new CreateSegmentConditionRequest("plan", "Equal", "premium")])]);
|
||||
|
||||
[Test]
|
||||
public void WhenTheRequestIsValid_ThenValidationSucceeds()
|
||||
{
|
||||
var result = _validator.Validate(ValidRequest());
|
||||
|
||||
Assert.That(result.IsValid, Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WhenTheNameIsEmpty_ThenValidationFails()
|
||||
{
|
||||
var request = ValidRequest() with { Name = "" };
|
||||
|
||||
var result = _validator.Validate(request);
|
||||
|
||||
Assert.That(result.IsValid, Is.False);
|
||||
Assert.That(result.Errors.Any(e => e.PropertyName == "Name"), Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WhenTheNameExceedsMaximumLength_ThenValidationFails()
|
||||
{
|
||||
var request = ValidRequest() with { Name = new string('a', 201) };
|
||||
|
||||
var result = _validator.Validate(request);
|
||||
|
||||
Assert.That(result.IsValid, Is.False);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WhenRulesIsNull_ThenValidationFails()
|
||||
{
|
||||
var request = ValidRequest() with { Rules = null! };
|
||||
|
||||
var result = _validator.Validate(request);
|
||||
|
||||
Assert.That(result.IsValid, Is.False);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WhenARuleTypeIsInvalid_ThenValidationFails()
|
||||
{
|
||||
var request = new CreateSegmentRequest(
|
||||
"Test",
|
||||
[new CreateSegmentRuleRequest("NotAType", [new CreateSegmentConditionRequest("plan", "Equal", "premium")])]);
|
||||
|
||||
var result = _validator.Validate(request);
|
||||
|
||||
Assert.That(result.IsValid, Is.False);
|
||||
}
|
||||
|
||||
[TestCase("All")]
|
||||
[TestCase("Any")]
|
||||
[TestCase("None")]
|
||||
[TestCase("all")]
|
||||
public void WhenARuleTypeIsAValidCaseInsensitiveName_ThenValidationSucceeds(string type)
|
||||
{
|
||||
var request = new CreateSegmentRequest(
|
||||
"Test",
|
||||
[new CreateSegmentRuleRequest(type, [new CreateSegmentConditionRequest("plan", "Equal", "premium")])]);
|
||||
|
||||
var result = _validator.Validate(request);
|
||||
|
||||
Assert.That(result.IsValid, Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WhenAConditionPropertyIsEmpty_ThenValidationFails()
|
||||
{
|
||||
var request = new CreateSegmentRequest(
|
||||
"Test",
|
||||
[new CreateSegmentRuleRequest("All", [new CreateSegmentConditionRequest("", "Equal", "premium")])]);
|
||||
|
||||
var result = _validator.Validate(request);
|
||||
|
||||
Assert.That(result.IsValid, Is.False);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WhenAConditionOperatorIsInvalid_ThenValidationFails()
|
||||
{
|
||||
var request = new CreateSegmentRequest(
|
||||
"Test",
|
||||
[new CreateSegmentRuleRequest("All", [new CreateSegmentConditionRequest("plan", "NotAnOperator", "premium")])]);
|
||||
|
||||
var result = _validator.Validate(request);
|
||||
|
||||
Assert.That(result.IsValid, Is.False);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WhenANestedChildRuleHasAnInvalidOperator_ThenValidationStillSucceedsBecauseChildRulesAreNotValidatedRecursively()
|
||||
{
|
||||
var childRule = new CreateSegmentRuleRequest("All", [new CreateSegmentConditionRequest("plan", "NotAnOperator", "premium")]);
|
||||
var request = new CreateSegmentRequest(
|
||||
"Test",
|
||||
[new CreateSegmentRuleRequest("All", [new CreateSegmentConditionRequest("plan", "Equal", "premium")], [childRule])]);
|
||||
|
||||
var result = _validator.Validate(request);
|
||||
|
||||
Assert.That(result.IsValid, Is.True);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user