mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-05-31 17:53:59 +00:00
109 lines
3.7 KiB
C#
109 lines
3.7 KiB
C#
using Apps72.Dev.Data.DbMocker;
|
|
using FluentAssertions;
|
|
using Infrastructure.Repository.Breweries;
|
|
using Infrastructure.Repository.Tests.Database;
|
|
using Domain.Entities;
|
|
|
|
namespace Infrastructure.Repository.Tests.Breweries;
|
|
|
|
public class BreweryRepositoryTest
|
|
{
|
|
private static BreweryRepository CreateRepo(MockDbConnection conn) =>
|
|
new(new TestConnectionFactory(conn));
|
|
|
|
[Fact]
|
|
public async Task GetByIdAsync_ReturnsBrewery_WhenExists()
|
|
{
|
|
var breweryId = Guid.NewGuid();
|
|
var conn = new MockDbConnection();
|
|
|
|
// Repository calls the stored procedure
|
|
const string getByIdSql = "USP_GetBreweryById";
|
|
|
|
var locationId = Guid.NewGuid();
|
|
|
|
conn.Mocks.When(cmd => cmd.CommandText == getByIdSql)
|
|
.ReturnsTable(
|
|
MockTable
|
|
.WithColumns(
|
|
("BreweryPostId", typeof(Guid)),
|
|
("PostedById", typeof(Guid)),
|
|
("BreweryName", typeof(string)),
|
|
("Description", typeof(string)),
|
|
("CreatedAt", typeof(DateTime)),
|
|
("UpdatedAt", typeof(DateTime?)),
|
|
("Timer", typeof(byte[])),
|
|
("BreweryPostLocationId", typeof(Guid)),
|
|
("CityId", typeof(Guid)),
|
|
("AddressLine1", typeof(string)),
|
|
("AddressLine2", typeof(string)),
|
|
("PostalCode", typeof(string)),
|
|
("Coordinates", typeof(byte[]))
|
|
)
|
|
.AddRow(
|
|
breweryId,
|
|
Guid.NewGuid(),
|
|
"Test Brewery",
|
|
"A test brewery description",
|
|
DateTime.UtcNow,
|
|
null,
|
|
null,
|
|
locationId,
|
|
Guid.NewGuid(),
|
|
"123 Main St",
|
|
null,
|
|
"12345",
|
|
null
|
|
)
|
|
);
|
|
|
|
var repo = CreateRepo(conn);
|
|
var result = await repo.GetByIdAsync(breweryId);
|
|
result.Should().NotBeNull();
|
|
result!.BreweryPostId.Should().Be(breweryId);
|
|
result.Location.Should().NotBeNull();
|
|
result.Location!.BreweryPostLocationId.Should().Be(locationId);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetByIdAsync_ReturnsNull_WhenNotExists()
|
|
{
|
|
var conn = new MockDbConnection();
|
|
conn.Mocks.When(cmd => cmd.CommandText == "USP_GetBreweryById")
|
|
.ReturnsTable(MockTable.Empty());
|
|
var repo = CreateRepo(conn);
|
|
var result = await repo.GetByIdAsync(Guid.NewGuid());
|
|
result.Should().BeNull();
|
|
|
|
}
|
|
|
|
[Fact]
|
|
public async Task CreateAsync_ExecutesSuccessfully()
|
|
{
|
|
var conn = new MockDbConnection();
|
|
conn.Mocks.When(cmd => cmd.CommandText == "USP_CreateBrewery")
|
|
.ReturnsScalar(1);
|
|
var repo = CreateRepo(conn);
|
|
var brewery = new BreweryPost
|
|
{
|
|
BreweryPostId = Guid.NewGuid(),
|
|
PostedById = Guid.NewGuid(),
|
|
BreweryName = "Test Brewery",
|
|
Description = "A test brewery description",
|
|
CreatedAt = DateTime.UtcNow,
|
|
Location = new BreweryPostLocation
|
|
{
|
|
BreweryPostLocationId = Guid.NewGuid(),
|
|
CityId = Guid.NewGuid(),
|
|
AddressLine1 = "123 Main St",
|
|
PostalCode = "12345",
|
|
Coordinates = [0x00, 0x01]
|
|
}
|
|
};
|
|
|
|
// Should not throw
|
|
var act = async () => await repo.CreateAsync(brewery);
|
|
await act.Should().NotThrowAsync();
|
|
}
|
|
}
|