Add unit tests for KubernetesCluster, Tenant, ServiceInstance, and RegisterClusterHandler
Some checks failed
Build EntKube / build (push) Failing after 27s
Package Helm Chart / lint (push) Failing after 36s
Package Helm Chart / package (push) Has been skipped

- Implement tests for KubernetesCluster including registration, connectivity status, and error handling.
- Create tests for Tenant creation, member management, and status changes.
- Add tests for ServiceInstance provisioning and state management.
- Introduce RegisterClusterHandler tests to validate registration requests and error scenarios.
- Set up project files for new test projects with necessary dependencies.
This commit is contained in:
Nils Blomgren
2026-05-05 11:44:36 +02:00
parent 461fa36a46
commit a96dd33039
203 changed files with 2876 additions and 553 deletions

View File

@@ -0,0 +1,79 @@
using EntKube.Provisioning.Domain;
using FluentAssertions;
namespace EntKube.Provisioning.Tests.Domain;
public class ServiceInstanceTests
{
[Fact]
public void Provision_WithValidInputs_CreatesInstanceInPendingState()
{
// Arrange & Act — Request provisioning of a MinIO instance.
Guid clusterId = Guid.NewGuid();
ServiceInstance instance = ServiceInstance.Provision(
clusterId,
ServiceType.MinIO,
"tenant-storage",
"minio-system");
// Assert — Starts pending until the reconciler deploys it.
instance.Id.Should().NotBe(Guid.Empty);
instance.ClusterId.Should().Be(clusterId);
instance.ServiceType.Should().Be(ServiceType.MinIO);
instance.Name.Should().Be("tenant-storage");
instance.Namespace.Should().Be("minio-system");
instance.DesiredState.Should().Be(ServiceState.Running);
instance.CurrentState.Should().Be(ServiceState.Pending);
}
[Fact]
public void Provision_WithEmptyName_ThrowsArgumentException()
{
// Arrange & Act
Action act = () => ServiceInstance.Provision(Guid.NewGuid(), ServiceType.MinIO, "", "ns");
// Assert
act.Should().Throw<ArgumentException>()
.WithParameterName("name");
}
[Fact]
public void MarkRunning_UpdatesCurrentState()
{
// Arrange
ServiceInstance instance = ServiceInstance.Provision(Guid.NewGuid(), ServiceType.CloudNativePG, "db", "cnpg-system");
// Act
instance.MarkRunning();
// Assert
instance.CurrentState.Should().Be(ServiceState.Running);
instance.LastReconcileAt.Should().NotBeNull();
}
[Fact]
public void RequestDecommission_SetsDesiredStateToDecommissioned()
{
// Arrange
ServiceInstance instance = ServiceInstance.Provision(Guid.NewGuid(), ServiceType.Keycloak, "auth", "keycloak-system");
instance.MarkRunning();
// Act — Tenant admin decides to tear down this service.
instance.RequestDecommission();
// Assert — Desired state changes but current state remains until reconciler acts.
instance.DesiredState.Should().Be(ServiceState.Decommissioned);
instance.CurrentState.Should().Be(ServiceState.Running);
}
}