From 4b7ac2dec89645ab2dec51069b892a92f14d8be3 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Sat, 19 Sep 2026 14:12:44 +0100 Subject: [PATCH] test(blogs): configure SiteSettings.Blog in MappedClaimsBlogsWebServerFixture MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BlogSpotService's constructor throws InvalidOperationException ("SiteSettings.Blog is not configured.") when IOptions.Blog is null, so every request to BlogApiController 500'd resolving the service — all 3 BlogApiMappedClaimsTests were failing with InternalServerError. The mapped-claims fixture never configured SiteSettings (the main BlogsWebServerFixture does, pointing Blog at a per-run temp dir). Mirror that: Configure(s => s.Blog = ) before AddScoped(). These tests are JSON-only (AttachFiles short-circuits), but the service must be constructible. Verified: BlogApiMappedClaimsTests 3/3 green; full Yavsc.Blogs.Tests 37/37 green. Co-Authored-By: Claude --- src/Yavsc.Blogs.Tests/BlogApiMappedClaimsTests.cs | 2 +- .../Fixtures/MappedClaimsBlogsWebServerFixture.cs | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Yavsc.Blogs.Tests/BlogApiMappedClaimsTests.cs b/src/Yavsc.Blogs.Tests/BlogApiMappedClaimsTests.cs index 00e2ea61b..be2793bf3 100644 --- a/src/Yavsc.Blogs.Tests/BlogApiMappedClaimsTests.cs +++ b/src/Yavsc.Blogs.Tests/BlogApiMappedClaimsTests.cs @@ -74,7 +74,7 @@ IClassFixture var draft = new BlogPost { Id = 0, - Title = "Billet JWT remappe", + Title = "Billet JWT re-mappé", AuthorId = "payload-attacker", Article = "Contenu de test.", DateCreated = DateTime.UtcNow, diff --git a/src/Yavsc.Blogs.Tests/Fixtures/MappedClaimsBlogsWebServerFixture.cs b/src/Yavsc.Blogs.Tests/Fixtures/MappedClaimsBlogsWebServerFixture.cs index 7311ce042..ab4418c57 100644 --- a/src/Yavsc.Blogs.Tests/Fixtures/MappedClaimsBlogsWebServerFixture.cs +++ b/src/Yavsc.Blogs.Tests/Fixtures/MappedClaimsBlogsWebServerFixture.cs @@ -39,6 +39,18 @@ public sealed class MappedClaimsBlogsWebServerFixture : IDisposable, IBackendFix opt.UseInMemoryDatabase("Yavsc.Blogs.Tests.MappedClaims", _inMemoryRoot)); builder.Services.AddSingleton(new NoopFileSystemAuthManager()); + + // BlogSpotService's constructor throws InvalidOperationException + // ("SiteSettings.Blog is not configured.") when Blog is null, so + // every request hitting BlogApiController would 500 resolving the + // service. These tests never upload files (JSON-only POST/PUT), so + // AttachFiles short-circuits — but the service still has to be + // constructible. Point Blog at a per-run temp directory, mirroring + // BlogsWebServerFixture. + builder.Services.Configure(s => + { + s.Blog = Path.Combine(Path.GetTempPath(), "postit-blogs-mappedclaims-" + Guid.NewGuid().ToString("N")); + }); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddControllers()