too much for one commit
This commit is contained in:
111
tests/EntKube.Clusters.Tests/Features/SetProviderHandlerTests.cs
Normal file
111
tests/EntKube.Clusters.Tests/Features/SetProviderHandlerTests.cs
Normal file
@@ -0,0 +1,111 @@
|
||||
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");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user