using Microsoft.Extensions.Logging.Abstractions;
using NSubstitute;
using ScadaLink.Commons.Entities.ExternalSystems;
using ScadaLink.Commons.Interfaces.Repositories;
namespace ScadaLink.ExternalSystemGateway.Tests;
///
/// WP-9: Tests for Database access — connection resolution, cached writes.
///
public class DatabaseGatewayTests
{
private readonly IExternalSystemRepository _repository = Substitute.For();
[Fact]
public async Task GetConnection_NotFound_Throws()
{
_repository.GetAllDatabaseConnectionsAsync().Returns(new List());
var gateway = new DatabaseGateway(
_repository,
NullLogger.Instance);
await Assert.ThrowsAsync(
() => gateway.GetConnectionAsync("nonexistent"));
}
[Fact]
public async Task CachedWrite_NoStoreAndForward_Throws()
{
var conn = new DatabaseConnectionDefinition("testDb", "Server=localhost;Database=test") { Id = 1 };
_repository.GetAllDatabaseConnectionsAsync()
.Returns(new List { conn });
var gateway = new DatabaseGateway(
_repository,
NullLogger.Instance,
storeAndForward: null);
await Assert.ThrowsAsync(
() => gateway.CachedWriteAsync("testDb", "INSERT INTO t VALUES (1)"));
}
[Fact]
public async Task CachedWrite_ConnectionNotFound_Throws()
{
_repository.GetAllDatabaseConnectionsAsync().Returns(new List());
var gateway = new DatabaseGateway(
_repository,
NullLogger.Instance);
await Assert.ThrowsAsync(
() => gateway.CachedWriteAsync("nonexistent", "INSERT INTO t VALUES (1)"));
}
}