Files
Joseph Doherty 1fc7792cd1 refactor(configmanager): rename UI project and split test projects
Rename ConfigManager to ConfigManager.Ui to match the Core/CLI/UI project
structure, and split the monolithic test project into Core.Tests,
Cli.Tests, and Ui.Tests to align with the source project organization.
2026-01-28 10:24:36 -05:00

131 lines
4.4 KiB
C#

using JdeScoping.ConfigManager.Core.Models;
using JdeScoping.ConfigManager.Core.Services;
namespace JdeScoping.ConfigManager.Core.Tests.Services;
public class ConnectionTestServiceTests
{
private readonly ConnectionTestService _sut;
public ConnectionTestServiceTests()
{
_sut = new ConnectionTestService();
}
[Fact]
public async Task TestConnectionAsync_Oracle_ReturnsNotImplemented()
{
// Arrange
var connectionString = "Data Source=oracle;User Id=user;Password=pass;";
// Act
var result = await _sut.TestConnectionAsync(connectionString, ConnectionProvider.Oracle);
// Assert
result.Success.ShouldBeFalse();
result.Message.ShouldContain("not implemented");
}
[Fact]
public async Task TestConnectionAsync_Generic_ReturnsCannotTest()
{
// Arrange
var connectionString = "SomeGenericConnectionString";
// Act
var result = await _sut.TestConnectionAsync(connectionString, ConnectionProvider.Generic);
// Assert
result.Success.ShouldBeFalse();
result.Message.ShouldContain("Cannot test generic");
}
[Fact]
public async Task TestConnectionAsync_UnknownProvider_ReturnsUnknownProviderError()
{
// Arrange
var connectionString = "Data Source=test";
var unknownProvider = (ConnectionProvider)999;
// Act
var result = await _sut.TestConnectionAsync(connectionString, unknownProvider);
// Assert
result.Success.ShouldBeFalse();
result.Message.ShouldContain("Unknown provider");
}
[Fact]
public async Task TestConnectionAsync_SqlServer_WithInvalidConnectionString_ReturnsFailure()
{
// Arrange - Use an obviously invalid connection string that will fail fast
var connectionString = "Server=nonexistent-server-that-does-not-exist-12345;Database=TestDb;Integrated Security=true;Connect Timeout=1;";
// Act
var result = await _sut.TestConnectionAsync(connectionString, ConnectionProvider.SqlServer);
// Assert
result.Success.ShouldBeFalse();
result.Message.ShouldNotBeNullOrEmpty();
result.Duration.ShouldNotBeNull();
}
[Fact]
public async Task TestConnectionAsync_SqlServer_MeasuresDuration()
{
// Arrange - Use an invalid connection string that will fail but should still measure duration
var connectionString = "Server=nonexistent-server-12345;Database=TestDb;Integrated Security=true;Connect Timeout=1;";
// Act
var result = await _sut.TestConnectionAsync(connectionString, ConnectionProvider.SqlServer);
// Assert
result.Duration.ShouldNotBeNull();
result.Duration!.Value.ShouldBeGreaterThan(TimeSpan.Zero);
}
[Fact]
public async Task TestConnectionAsync_SqlServer_WithCancellation_ReturnsCancelledResult()
{
// Arrange
var connectionString = "Server=nonexistent-server-that-takes-forever-12345;Database=TestDb;Integrated Security=true;Connect Timeout=30;";
using var cts = new CancellationTokenSource();
cts.Cancel(); // Cancel immediately
// Act
var result = await _sut.TestConnectionAsync(connectionString, ConnectionProvider.SqlServer, cts.Token);
// Assert
result.Success.ShouldBeFalse();
result.Message.ShouldContain("cancelled");
}
[Fact]
public async Task TestConnectionAsync_SqlServer_WithMalformedConnectionString_ReturnsFailure()
{
// Arrange - Malformed connection string should be handled gracefully
var connectionString = "not a valid connection string at all!!!";
// Act
var result = await _sut.TestConnectionAsync(connectionString, ConnectionProvider.SqlServer);
// Assert
result.Success.ShouldBeFalse();
result.Message.ShouldNotBeNullOrEmpty();
}
[Fact]
public async Task TestConnectionAsync_SqlServer_WithEmptyConnectionString_ReturnsFailure()
{
// Arrange
var connectionString = "";
// Act
var result = await _sut.TestConnectionAsync(connectionString, ConnectionProvider.SqlServer);
// Assert
result.Success.ShouldBeFalse();
result.Message.ShouldNotBeNullOrEmpty();
}
}