Files
Entkube/tests/EntKube.Clusters.Tests/Features/SetProviderHandlerTests.cs
2026-05-13 14:01:32 +02:00

112 lines
3.5 KiB
C#

using EntKube.Clusters.Domain;
using EntKube.Clusters.Features.SetProvider;
using EntKube.Clusters.Infrastructure;
using EntKube.SharedKernel.Domain;
using FluentAssertions;
namespace EntKube.Clusters.Tests.Features;
public class SetProviderHandlerTests
{
private readonly SetProviderHandler handler;
private readonly InMemoryClusterRepository repository;
public SetProviderHandlerTests()
{
repository = new InMemoryClusterRepository();
handler = new SetProviderHandler(repository);
}
[Fact]
public async Task HandleAsync_SetCleura_StoresProviderOnCluster()
{
// Arrange — A cluster is already registered with no provider.
// The user now wants to link it to their Cleura account.
KubernetesCluster cluster = KubernetesCluster.Register(
"cleura-cluster", "https://k8s.cleura.cloud", "kubeconfig", Guid.NewGuid(), "ctx", Guid.NewGuid());
await repository.AddAsync(cluster);
SetProviderRequest request = new(cluster.Id, "Cleura", "my-user", "my-password", "Sto2");
// Act
Result result = await handler.HandleAsync(request);
// Assert — The provider and credentials should be persisted on the cluster.
result.IsSuccess.Should().BeTrue();
KubernetesCluster? updated = await repository.GetByIdAsync(cluster.Id);
updated!.Provider.Should().Be(CloudProvider.Cleura);
updated.ProviderCredentials!.Username.Should().Be("my-user");
updated.ProviderCredentials.Region.Should().Be("Sto2");
}
[Fact]
public async Task HandleAsync_SetNone_ClearsProvider()
{
// Arrange — A cluster currently linked to Cleura. The user wants to unlink it.
KubernetesCluster cluster = KubernetesCluster.Register(
"test", "https://k8s.example.com", "kubeconfig", Guid.NewGuid(), "ctx", Guid.NewGuid());
cluster.SetProvider(CloudProvider.Cleura, new ProviderCredentials("u", "p", "Fra1"));
await repository.AddAsync(cluster);
SetProviderRequest request = new(cluster.Id, "None", null, null, null);
// Act
Result result = await handler.HandleAsync(request);
// Assert
result.IsSuccess.Should().BeTrue();
KubernetesCluster? updated = await repository.GetByIdAsync(cluster.Id);
updated!.Provider.Should().Be(CloudProvider.None);
updated.ProviderCredentials.Should().BeNull();
}
[Fact]
public async Task HandleAsync_ClusterNotFound_ReturnsFailure()
{
// Arrange — Non-existent cluster ID.
SetProviderRequest request = new(Guid.NewGuid(), "Cleura", "u", "p", "Sto2");
// Act
Result result = await handler.HandleAsync(request);
// Assert
result.IsFailure.Should().BeTrue();
result.Error.Should().Contain("not found");
}
[Fact]
public async Task HandleAsync_InvalidProvider_ReturnsFailure()
{
// Arrange — An unrecognized provider name.
KubernetesCluster cluster = KubernetesCluster.Register(
"test", "https://k8s.example.com", "kubeconfig", Guid.NewGuid(), "ctx", Guid.NewGuid());
await repository.AddAsync(cluster);
SetProviderRequest request = new(cluster.Id, "UnknownCloud", "u", "p", "eu-west-1");
// Act
Result result = await handler.HandleAsync(request);
// Assert
result.IsFailure.Should().BeTrue();
result.Error.Should().Contain("Unsupported provider");
}
}