namespace DigitalData.Core.Tests.Infrastructure; using DigitalData.Core.Infrastructure; using DigitalData.Core.Tests.Mock; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using System.Reflection; using DigitalData.Core.Abstractions.Infrastructure; public class DbRepositoryTests { private IHost _host; private IRepository _userRepo; [SetUp] public void Setup() { var builder = Host.CreateApplicationBuilder(); builder.Services.AddDbContext(opt => opt.UseInMemoryDatabase("MockDB")); builder.Services.AddDbRepository(context => context.Users); builder.Services.AddAutoMapper(Assembly.GetExecutingAssembly()); _host = builder.Build(); _userRepo = _host.Services.GetRequiredService>(); } [TearDown] public void TearDown() { if (_host is IDisposable disposableHost) disposableHost.Dispose(); } [TestCase(true, TestName = "WhenGivenMultipleUsers")] [TestCase(false, TestName = "WhenGivenSingleUser")] public void CreateAsync_ShouldNotThrow(bool multiple) { // Arrange var faker = Fake.CreateUserFaker(); // Act & Assert if (multiple) Assert.DoesNotThrowAsync(async () => await _userRepo.CreateAsync(faker.Generate(Random.Shared.Next(1, 10)))); else Assert.DoesNotThrowAsync(async () => await _userRepo.CreateAsync(faker.Generate())); } [TestCase(true, TestName = "WhenGivenMultipleUsers")] [TestCase(false, TestName = "WhenGivenSingleUser")] public async Task ReadAsync_ShouldReturnCreated(bool multiple) { // Arrange var faker = Fake.CreateUserFaker(); var user = faker.Generate(); // Act await _userRepo.CreateAsync(user); var createdUser = (await _userRepo.ReadAsync()).First(); // Assert Assert.That(createdUser, Is.EqualTo(user)); } }