From b9189451ebbe2c50965026ea0ab02572610b653e Mon Sep 17 00:00:00 2001 From: Kyle McMaster Date: Mon, 27 Nov 2023 12:18:04 -0500 Subject: [PATCH] Use Sqlite Provider for Functional Tests (#639) * Update packages for .NET 8 * Use Sqlite provider for functional tests * Use primary constructors --- .../ApiEndpoints/ContributorGetById.cs | 9 +---- .../ApiEndpoints/ContributorList.cs | 9 +---- .../CustomWebApplicationFactory.cs | 39 ++++++++++--------- 3 files changed, 25 insertions(+), 32 deletions(-) diff --git a/tests/Clean.Architecture.FunctionalTests/ApiEndpoints/ContributorGetById.cs b/tests/Clean.Architecture.FunctionalTests/ApiEndpoints/ContributorGetById.cs index 883cd29c9..5fcca00dd 100644 --- a/tests/Clean.Architecture.FunctionalTests/ApiEndpoints/ContributorGetById.cs +++ b/tests/Clean.Architecture.FunctionalTests/ApiEndpoints/ContributorGetById.cs @@ -7,14 +7,9 @@ namespace Clean.Architecture.FunctionalTests.ApiEndpoints; [Collection("Sequential")] -public class ContributorGetById : IClassFixture> +public class ContributorGetById(CustomWebApplicationFactory factory) : IClassFixture> { - private readonly HttpClient _client; - - public ContributorGetById(CustomWebApplicationFactory factory) - { - _client = factory.CreateClient(); - } + private readonly HttpClient _client = factory.CreateClient(); [Fact] public async Task ReturnsSeedContributorGivenId1() diff --git a/tests/Clean.Architecture.FunctionalTests/ApiEndpoints/ContributorList.cs b/tests/Clean.Architecture.FunctionalTests/ApiEndpoints/ContributorList.cs index e3212a3e8..86bc56b30 100644 --- a/tests/Clean.Architecture.FunctionalTests/ApiEndpoints/ContributorList.cs +++ b/tests/Clean.Architecture.FunctionalTests/ApiEndpoints/ContributorList.cs @@ -6,14 +6,9 @@ namespace Clean.Architecture.FunctionalTests.ApiEndpoints; [Collection("Sequential")] -public class ContributorList : IClassFixture> +public class ContributorList(CustomWebApplicationFactory factory) : IClassFixture> { - private readonly HttpClient _client; - - public ContributorList(CustomWebApplicationFactory factory) - { - _client = factory.CreateClient(); - } + private readonly HttpClient _client = factory.CreateClient(); [Fact] public async Task ReturnsTwoContributors() diff --git a/tests/Clean.Architecture.FunctionalTests/CustomWebApplicationFactory.cs b/tests/Clean.Architecture.FunctionalTests/CustomWebApplicationFactory.cs index 399c66373..74e6340be 100644 --- a/tests/Clean.Architecture.FunctionalTests/CustomWebApplicationFactory.cs +++ b/tests/Clean.Architecture.FunctionalTests/CustomWebApplicationFactory.cs @@ -1,9 +1,6 @@ using Clean.Architecture.Infrastructure.Data; -using Clean.Architecture.Infrastructure.Data.Queries; -using Clean.Architecture.UseCases.Contributors.List; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc.Testing; -using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; @@ -37,6 +34,10 @@ protected override IHost CreateHost(IHostBuilder builder) var logger = scopedServices .GetRequiredService>>(); + // Reset Sqlite database for each test run + // If using a real database, you'll likely want to remove this step. + db.Database.EnsureDeleted(); + // Ensure the database is created. db.Database.EnsureCreated(); @@ -64,24 +65,26 @@ protected override void ConfigureWebHost(IWebHostBuilder builder) builder .ConfigureServices(services => { - // Remove the app's ApplicationDbContext registration. - var descriptor = services.SingleOrDefault( - d => d.ServiceType == - typeof(DbContextOptions)); + // Configure test dependencies here + + //// Remove the app's ApplicationDbContext registration. + //var descriptor = services.SingleOrDefault( + //d => d.ServiceType == + // typeof(DbContextOptions)); - if (descriptor != null) - { - services.Remove(descriptor); - } + //if (descriptor != null) + //{ + // services.Remove(descriptor); + //} - // This should be set for each individual test run - string inMemoryCollectionName = Guid.NewGuid().ToString(); + //// This should be set for each individual test run + //string inMemoryCollectionName = Guid.NewGuid().ToString(); - // Add ApplicationDbContext using an in-memory database for testing. - services.AddDbContext(options => - { - options.UseInMemoryDatabase(inMemoryCollectionName); - }); + //// Add ApplicationDbContext using an in-memory database for testing. + //services.AddDbContext(options => + //{ + // options.UseInMemoryDatabase(inMemoryCollectionName); + //}); }); } }