diff --git a/Wave.Tests/Data/ApplicationDbContextTest.cs b/Wave.Tests/Data/ApplicationDbContextTest.cs new file mode 100644 index 0000000..14755be --- /dev/null +++ b/Wave.Tests/Data/ApplicationDbContextTest.cs @@ -0,0 +1,68 @@ +using Microsoft.EntityFrameworkCore; +using Testcontainers.PostgreSql; +using Wave.Data; + +namespace Wave.Tests.Data; + +[TestFixture, FixtureLifeCycle(LifeCycle.InstancePerTestCase)] +[TestOf(typeof(ApplicationDbContext))] +public class ApplicationDbContextTest { + private PostgreSqlContainer PostgresContainer { get; } = new PostgreSqlBuilder().WithImage("postgres:16.1-alpine").Build(); + + [SetUp] + public async Task SetUp() { + await PostgresContainer.StartAsync(); + } + + [TearDown] + public async Task TearDown() { + await PostgresContainer.DisposeAsync(); + } + + private ApplicationDbContext GetContext() { + return new ApplicationDbContext( + new DbContextOptionsBuilder() + .UseNpgsql(PostgresContainer.GetConnectionString()) + .EnableSensitiveDataLogging() + .EnableDetailedErrors() + .EnableThreadSafetyChecks() + .Options); + } + + [Test] + public async Task Migration() { + await using var context = GetContext(); + Assert.DoesNotThrowAsync(() => context.Database.MigrateAsync()); + } + + [Test] + public async Task CreateArticle() { + await using var context = GetContext(); + await context.Database.EnsureCreatedAsync(); + + var author = new ApplicationUser { + FullName = "Test User" + }; + Article article = new() { + Title = "Testing Article", + Body = "This is a *test* Article", + Author = author + }; + article.UpdateSlug(null); + article.UpdateBody(); + + await context.AddAsync(article); + Assert.DoesNotThrowAsync(() => context.SaveChangesAsync()); + + var dbArticle = await context.Set
() + .IgnoreQueryFilters().FirstOrDefaultAsync(); + Assert.That(dbArticle, Is.Not.Null); + + Assert.That(dbArticle.Title, Is.EqualTo("Testing Article")); + Assert.That(dbArticle.Slug, Is.EqualTo("testing-article")); + + Assert.That(dbArticle.Body, Is.EqualTo("This is a *test* Article")); + Assert.That(dbArticle.BodyPlain, Is.EqualTo("This is a test Article")); + Assert.That(dbArticle.BodyHtml, Is.EqualTo("

This is a test Article

")); + } +} \ No newline at end of file diff --git a/Wave.Tests/Wave.Tests.csproj b/Wave.Tests/Wave.Tests.csproj index 4e9adf0..a05251b 100644 --- a/Wave.Tests/Wave.Tests.csproj +++ b/Wave.Tests/Wave.Tests.csproj @@ -10,11 +10,20 @@ - - - - + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + +