Add unit tests for Environments, Audit, and Webhooks namespaces (#6)
All checks were successful
CI / build-and-push (push) Successful in 54s
CI / deploy-qa (push) Successful in 12s
CI / smoke-qa (push) Successful in 24s

## 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:
2026-07-05 15:07:26 -07:00
parent cae55e5737
commit 87113ccdcd
64 changed files with 6447 additions and 65 deletions

View File

@@ -0,0 +1,88 @@
using MicCheck.Api.Features;
using NUnit.Framework;
namespace MicCheck.Api.Tests.Unit.Features;
[TestFixture]
public class FeatureResponseTests
{
[Test]
public void WhenMappingAFeatureWithNoTags_ThenTheResponseHasAnEmptyTagsList()
{
var feature = new Feature { Id = 1, Name = "dark_mode", ProjectId = 5, Type = FeatureType.Standard, CreatedAt = DateTimeOffset.UtcNow };
var response = FeatureResponse.From(feature);
Assert.That(response.Id, Is.EqualTo(1));
Assert.That(response.Name, Is.EqualTo("dark_mode"));
Assert.That(response.ProjectId, Is.EqualTo(5));
Assert.That(response.Tags, Is.Empty);
}
[Test]
public void WhenMappingAFeature_ThenTypeIsUpperInvariant()
{
var feature = new Feature { Id = 1, Name = "flag", ProjectId = 1, Type = FeatureType.MultiVariate, CreatedAt = DateTimeOffset.UtcNow };
var response = FeatureResponse.From(feature);
Assert.That(response.Type, Is.EqualTo("MULTIVARIATE"));
}
[Test]
public void WhenMappingAFeatureWithTags_ThenEachTagIsMapped()
{
var feature = new Feature { Id = 1, Name = "flag", ProjectId = 1, CreatedAt = DateTimeOffset.UtcNow };
feature.Tags.Add(new Tag { Id = 1, Label = "beta", Color = "#FF0000", ProjectId = 1 });
var response = FeatureResponse.From(feature);
Assert.That(response.Tags, Has.Count.EqualTo(1));
Assert.That(response.Tags[0].Label, Is.EqualTo("beta"));
}
}
[TestFixture]
public class TagResponseTests
{
[Test]
public void WhenMappingATag_ThenAllFieldsAreCopied()
{
var tag = new Tag { Id = 1, Label = "beta", Color = "#FF0000", ProjectId = 5 };
var response = TagResponse.From(tag);
Assert.That(response.Id, Is.EqualTo(1));
Assert.That(response.Label, Is.EqualTo("beta"));
Assert.That(response.Color, Is.EqualTo("#FF0000"));
Assert.That(response.ProjectId, Is.EqualTo(5));
}
}
[TestFixture]
public class FeatureStateResponseTests
{
[Test]
public void WhenMappingAFeatureState_ThenAllFieldsAreCopied()
{
var now = DateTimeOffset.UtcNow;
var state = new FeatureState
{
Id = 1,
FeatureId = 2,
EnvironmentId = 3,
Enabled = true,
Value = "on",
CreatedAt = now,
UpdatedAt = now
};
var response = FeatureStateResponse.From(state);
Assert.That(response.Id, Is.EqualTo(1));
Assert.That(response.FeatureId, Is.EqualTo(2));
Assert.That(response.EnvironmentId, Is.EqualTo(3));
Assert.That(response.Enabled, Is.True);
Assert.That(response.Value, Is.EqualTo("on"));
}
}