test(Web.Tests): migrate to xUnit v3 — headers, AAA, indentation (#190) - #191
test(Web.Tests): migrate to xUnit v3 — headers, AAA, indentation (#190)#191mpaulosky wants to merge 12 commits into
Conversation
Blog posts, README, and docs/index.html updated for v1.2.0. Reviewed and approved by Aragorn.
Fixes 3 review blockers identified in PR #126 review: - docs/index.html: npm run css:watch → npm run tw:watch (matches root package.json) - README.md + kickoff blog post: Aspire 13.2.2 → 13.2.3 (matches Directory.Packages.props) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Summary
Adds `workflow_dispatch` trigger to `squad-mark-released.yml` so the
Done → Released project board migration can be run manually.
## Problem
When v1.2.0 was published, `squad-mark-released.yml` did not fire —
likely because the release event and workflow landing on `main` had a
timing race. With no manual trigger, the only recovery path was direct
GraphQL mutations.
## Changes
- Add `workflow_dispatch: {}` trigger
- Update job `if` condition to always run on manual dispatch (skip the
pre-release/draft guard for `workflow_dispatch` events)
- Use `context.payload.release?.tag_name ?? 'manual dispatch'` to
prevent null-ref in the summary notice
## Testing
After merge to `dev` → `main`, the workflow will appear under **Actions
→ Squad Mark Released → Run workflow** for manual recovery use.
---
> ⚠️ This PR should be fast-tracked to `main` so `dev` and `main` stay
in sync.
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Boromir <boromir@squad.dev>
Closes #130 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Closes #133 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Sprint 6: Code Quality **Goal:** Eliminate analyzer warnings, enforce internal visibility on Web feature types, expand test coverage, and migrate Unit.Tests into Web.Tests. --- ## Merged Feature PRs - Closes #137 — PR #144 — fix(quality): rename `ct` → `cancellationToken` in all MediatR handlers - Closes #138 — PR #145 — test: add unit tests for BlogPost, Result, and ValidationBehavior (42 tests) - Closes #139 — PR #146 — test: add unit tests for UserManagementHandler (16 tests) - Closes #140 — PR #147 — fix(quality): make Web feature types `internal` (CA1515, ~28 types) - Closes #141 — PR #148 — test: add unit tests for BlogPostMappings (22 tests) - Closes #142 — PR #149 — fix(quality): add ConfigureAwait(false) and specific exception catches - Closes #143 — PR #150 — fix(quality): address Domain and ServiceDefaults analyzer warnings - Closes #151 — PR #152 — feat(tests): migrate Unit.Tests → Web.Tests and remove Unit.Tests project --- ## Test Summary - **80+ new tests** added across all PRs - **105 Web.Tests passing** (0 failures) - `DynamicProxyGenAssembly2` added to `InternalsVisibleTo` in Web.csproj for NSubstitute support ## Notable Changes - `Unit.Tests` project removed; all tests now live in `Web.Tests` - ~28 Web feature types changed from `public` to `internal` (CA1515 compliance) - All MediatR handler parameters renamed from `ct` to `cancellationToken` for clarity - `ConfigureAwait(false)` applied to all async calls in service layer - Domain and ServiceDefaults analyzer warnings resolved --- ## Checklist - [x] All sprint issues closed (#137–#143, #151) - [x] CI green (0 build errors) - [x] 105 Web.Tests passing - [x] Milestone at 100% --------- Co-authored-by: Boromir <boromir@squad.dev> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Closes milestone: Sprint 7 — xUnit v3 Pilot (Domain.Tests) ## Sprint Summary - ✅ Added xUnit v3 packages (v3.2.2) to Directory.Packages.props alongside xUnit v2 - ✅ Domain.Tests migrated to xUnit v3: 42/42 tests passing - ✅ Zero source-level breaking changes required - ✅ CI validation complete — xUnit v3 fully compatible - ✅ ADR recorded with performance analysis (5–15% improvement projected) - ✅ Retrospective template prepared for Phase 2 validation ## Issues Closed - Closes #162 - Closes #163 - Closes #164 - Closes #165 - Closes #166 - Closes #167 ## Checklist - [x] All sprint issues closed - [x] CI green - [x] Milestone at 100% - [x] All PRs merged to sprint branch --------- Co-authored-by: Boromir <boromir@squad.dev> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Sprint 8 Retrospective — xUnit v3 Architecture.Tests Pilot Closes #181 **Working as Aragorn (Lead Developer)** --- ## Summary This PR delivers the Sprint 8 retrospective document for the xUnit v3 Architecture.Tests pilot. It captures what went well, areas for improvement, key learnings, and recommendations for completing the xUnit v3 rollout across the MyBlog test suite. ## Files Changed - `docs/sprint-8-xunit-v3-pilot-retro.md` — Full retrospective document - `.squad/agents/aragorn/history.md` — Aragorn's learnings from Sprint 8 appended ## Retrospective Highlights ### What Went Well - Wave 1 PRs (#176, #177) merged with **zero rework** - CI passed **immediately** after package update - NetArchTest `[Fact]` attributes require **zero changes** for xUnit v3 — easiest migration surface in the test suite - Wave dependency chain worked perfectly — 0 blocking issues between waves - Side effect: Boromir fixed a CI gap where `Domain.Tests` was missing from `squad-preview.yml` ### Key Metrics | Metric | Value | |---|---| | Sprint issues | 6 (#176–#181) | | Architecture.Tests passing | 11 tests @ 72ms | | Domain.Tests passing | 42 tests | | Combined passing | 53+ tests | | Rework PRs | 0 | | Blocking inter-wave issues | 0 | ### Key Decisions Referenced - `boromir-xunit-v3-package-strategy.md` — meta-package pattern, CI gap fix - `gimli-xunit-v3-migration-pattern.md` — AAA comment pattern for NetArchTest - `aragorn-xunit-v3-rollout-strategy.md` (local inbox) — rollout ordering, standardization ### Recommendations 1. **Blazor.Tests → Sprint 9** (bUnit has explicit xUnit v3 support) 2. **Unit.Tests → Sprint 9–10** (simpler migration surface) 3. **New test projects start with xUnit v3** — no more v2 projects 4. **Integration.Tests** requires a separate spike (IAsyncLifetime + Docker concerns) 5. **Capture CI baseline metrics before migration** (Sprint 7 gap — don't repeat) --- ## xUnit v3 Rollout Status | Test Project | Status | Sprint | |---|---|---| | `tests/Domain.Tests` | ✅ Migrated | Sprint 7 | | `tests/Architecture.Tests` | ✅ Migrated | Sprint 8 | | `tests/Blazor.Tests` | 🔜 Recommended next | Sprint 9 | | `tests/Unit.Tests` | 🔜 Planned | Sprint 9–10 | | `tests/Integration.Tests` |⚠️ Assess separately | TBD | --------- Co-authored-by: Boromir <boromir@squad.dev> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…189) ## Problem Sprint 6's migration of Unit.Tests to Web.Tests left 2 test files orphaned: - `tests/Unit.Tests/Data/BlogPostMappingsTests.cs` (~22 tests) - `tests/Unit.Tests/Handlers/UserManagementHandlerTests.cs` (~16 tests) These files were never compiled because Unit.Tests.csproj was deleted during the migration. Result: ~38 test cases invisible to coverage reporting. **Current coverage:** 77.5% (threshold: 80%) — blocked from merge ## Solution - Move 2 orphaned test files to Web.Tests - Delete empty tests/Unit.Tests/ directory - Restore 38 test cases to coverage measurement ## Verification ✅ Web.Tests compiles with moved files (0 errors) ✅ All 127 tests in Web.Tests pass ## Expected Outcome Coverage restored to 80%+ and unblocks Sprint 9 --------- Co-authored-by: Boromir <boromir@squad.dev> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Aragorn gate: ✅ OPEN (xUnit v3 pattern proven via Sprint 7–8 pilots) - Gimli plan: Issue #190, 127 tests across 3 phases (package → API → verify) - Pippin docs: Session log created (not committed per .gitignore) - Inbox: No new decisions this round Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ix indentation - Upgrade xunit → xunit.v3 in Web.Tests.csproj - Remove coverlet.msbuild (not used with v3); keep coverlet.collector - Add xunit.runner.json with parallelism settings matching Domain.Tests - Fix file headers: 'Unit.Tests' → 'Web.Tests' across all affected files - Remove duplicate old-format header from ResultTests.cs - Add AAA pattern (// Arrange, // Act, // Assert) to all test methods lacking them - Fix indentation in 4 handler test files (entire class body was at col 0) - All 127 tests pass Closes #190 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ration Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
🏗️ PR Added to Squad Triage QueueThis PR has been labeled with Next steps:
|
There was a problem hiding this comment.
Pull request overview
Migrates the tests/Web.Tests project to xUnit v3 (and aligns related test projects/docs/workflows) while applying squad testing conventions (headers, AAA comments, indentation) and updating supporting repo documentation.
Changes:
- Migrated
Web.Teststo xUnit v3 (xunit.v3), addedxunit.runner.json, and removedcoverlet.msbuild. - Added/expanded xUnit v3 support across
Domain.TestsandArchitecture.Tests(packages/config/tests), and removed the legacyUnit.Testsproject from the solution. - Updated documentation + GitHub workflows to reflect the new testing layout and blog/README synchronization.
Reviewed changes
Copilot reviewed 90 out of 94 changed files in this pull request and generated 16 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/Web.Tests/xunit.runner.json | Adds xUnit runner config (parallelism, display options). |
| tests/Web.Tests/Web.Tests.csproj | Swaps to xunit.v3, removes coverlet.msbuild, copies runner json. |
| tests/Web.Tests/Security/RoleClaimsHelperTests.cs | Header project name corrected. |
| tests/Web.Tests/ResultTests.cs | Header cleanup + AAA comment additions. |
| tests/Web.Tests/Handlers/UserManagementHandlerTests.cs | New test coverage for UserManagement handler edge/error paths. |
| tests/Web.Tests/Handlers/GetBlogPostsHandlerTests.cs | Indentation + AAA, adds cache exception test. |
| tests/Web.Tests/Handlers/EditBlogPostHandlerTests.cs | Indentation + AAA, adds cache exception test. |
| tests/Web.Tests/Handlers/DeleteBlogPostHandlerTests.cs | Indentation + AAA. |
| tests/Web.Tests/Handlers/CreateBlogPostHandlerTests.cs | Indentation + AAA, adds “does not invalidate by id” test. |
| tests/Web.Tests/Features/BlogPosts/Commands/EditBlogPostCommandValidatorTests.cs | Header normalization + AAA comments. |
| tests/Web.Tests/Features/BlogPosts/Commands/DeleteBlogPostCommandValidatorTests.cs | Header normalization + AAA comments. |
| tests/Web.Tests/Features/BlogPosts/Commands/CreateBlogPostCommandValidatorTests.cs | Header normalization + AAA comments. |
| tests/Web.Tests/Data/BlogPostMappingsTests.cs | New mapping tests for ToDto() behavior. |
| tests/Web.Tests/BlogPostTests.cs | AAA comments added. |
| tests/Web.Tests/Behaviors/ValidationBehaviorTests.cs | AAA comments added. |
| tests/Web.Tests.Integration/Infrastructure/RedisFixture.cs | Narrows fixture API visibility to internal helper. |
| tests/Unit.Tests/Unit.Tests.csproj | Removes legacy Unit.Tests project. |
| tests/Unit.Tests/Handlers/GetBlogPostsHandlerTests.cs | Removes old Unit.Tests handler tests. |
| tests/Unit.Tests/Handlers/GetBlogPostByIdHandlerTests.cs | Removes old Unit.Tests handler tests. |
| tests/Unit.Tests/Handlers/EditBlogPostHandlerTests.cs | Removes old Unit.Tests handler tests. |
| tests/Unit.Tests/Handlers/DeleteBlogPostHandlerTests.cs | Removes old Unit.Tests handler tests. |
| tests/Unit.Tests/Handlers/CreateBlogPostHandlerTests.cs | Removes old Unit.Tests handler tests. |
| tests/Unit.Tests/GlobalUsings.cs | Removes Unit.Tests global usings. |
| tests/Domain.Tests/xunit.runner.json | Adds xUnit runner config for Domain.Tests. |
| tests/Domain.Tests/Properties/AssemblyInfo.cs | Adds CLS compliance attribute. |
| tests/Domain.Tests/GlobalUsings.cs | Expands global usings for new Domain.Tests coverage. |
| tests/Domain.Tests/Entities/BlogPostTests.cs | Adds BlogPost entity tests in Domain.Tests. |
| tests/Domain.Tests/Domain.Tests.csproj | Migrates to xUnit v3 + adds needed packages and runner json. |
| tests/Domain.Tests/Behaviors/ValidationBehaviorTests.cs | Adds ValidationBehavior unit tests in Domain.Tests. |
| tests/Domain.Tests/Abstractions/ResultTests.cs | Adds Result abstraction tests in Domain.Tests. |
| tests/Architecture.Tests/xunit.runner.json | Adds xUnit runner config for Architecture.Tests. |
| tests/Architecture.Tests/VsaLayerTests.cs | AAA comments / minor refactor for clarity. |
| tests/Architecture.Tests/ThemeLayerTests.cs | AAA comments. |
| tests/Architecture.Tests/DomainLayerTests.cs | AAA comments + clearer assembly variables. |
| tests/Architecture.Tests/CachingLayerTests.cs | AAA comments. |
| tests/Architecture.Tests/Architecture.Tests.csproj | Migrates to xUnit v3 + adds runner json. |
| src/Web/Security/RoleClaimsHelper.cs | Narrows helper visibility to internal. |
| src/Web/Properties/AssemblyInfo.cs | Updates InternalsVisibleTo targets + adds CLS compliance. |
| src/Web/Infrastructure/Caching/IBlogPostCacheService.cs | Narrows caching abstractions to internal. |
| src/Web/Infrastructure/Caching/CachingServiceExtensions.cs | Narrows extension visibility to internal. |
| src/Web/Infrastructure/Caching/BlogPostCacheKeys.cs | Narrows cache keys visibility to internal. |
| src/Web/Features/UserManagement/UserManagementHandler.cs | Narrows handler visibility; improves cancellation/exception handling patterns. |
| src/Web/Features/UserManagement/RemoveRoleCommand.cs | Narrows record visibility to internal. |
| src/Web/Features/UserManagement/GetUsersWithRolesQuery.cs | Narrows query/DTO visibility to internal. |
| src/Web/Features/UserManagement/GetAvailableRolesQuery.cs | Narrows query/DTO visibility to internal. |
| src/Web/Features/UserManagement/AssignRoleCommand.cs | Narrows record visibility to internal. |
| src/Web/Features/BlogPosts/List/GetBlogPostsQuery.cs | Narrows query visibility to internal. |
| src/Web/Features/BlogPosts/List/GetBlogPostsHandler.cs | Narrows handler visibility; adds cancellation + broader exception handling. |
| src/Web/Features/BlogPosts/Edit/GetBlogPostByIdQuery.cs | Narrows query visibility to internal. |
| src/Web/Features/BlogPosts/Edit/EditBlogPostHandler.cs | Narrows handler visibility; adds cancellation + broader exception handling. |
| src/Web/Features/BlogPosts/Edit/EditBlogPostCommandValidator.cs | Narrows validator visibility to internal. |
| src/Web/Features/BlogPosts/Edit/EditBlogPostCommand.cs | Narrows command visibility to internal. |
| src/Web/Features/BlogPosts/Delete/DeleteBlogPostHandler.cs | Narrows handler visibility; adds cancellation + broader exception handling. |
| src/Web/Features/BlogPosts/Delete/DeleteBlogPostCommandValidator.cs | Narrows validator visibility to internal. |
| src/Web/Features/BlogPosts/Delete/DeleteBlogPostCommand.cs | Narrows command visibility to internal. |
| src/Web/Features/BlogPosts/Create/CreateBlogPostHandler.cs | Narrows handler visibility; adds cancellation + broader exception handling. |
| src/Web/Features/BlogPosts/Create/CreateBlogPostCommandValidator.cs | Narrows validator visibility to internal. |
| src/Web/Features/BlogPosts/Create/CreateBlogPostCommand.cs | Narrows command visibility to internal. |
| src/Web/Data/MongoDbBlogPostRepository.cs | Narrows repository visibility to internal. |
| src/Web/Data/BlogPostDto.cs | Narrows DTO visibility to internal. |
| src/ServiceDefaults/Properties/AssemblyInfo.cs | Adds CLS compliance attribute. |
| src/ServiceDefaults/Extensions.cs | Makes health endpoint filtering case-insensitive. |
| src/Domain/Properties/AssemblyInfo.cs | Adds InternalsVisibleTo for Domain.Tests + CLS compliance. |
| src/Domain/Behaviors/ValidationBehavior.cs | Adds null-guard for next delegate. |
| src/Domain/Abstractions/Result.cs | Adds helper APIs and generic FromValue factory. |
| docs/sprint-8-xunit-v3-pilot-retro.md | Adds Sprint 8 retrospective doc. |
| docs/sprint-7-xunit-v3-pilot-retro.md | Adds Sprint 7 retrospective doc. |
| docs/index.html | Updates GitHub Pages landing page content/structure. |
| docs/blog/index.md | Adds blog index page to drive README sync. |
| docs/blog/2026-04-24-release-v1-2-0.md | Adds blog post for v1.2.0 release. |
| docs/blog/2026-04-24-release-v1-1-0.md | Adds blog post for v1.1.0 release. |
| docs/blog/2026-04-20-sprint-3-e2e-tests-ci-hardening.md | Adds Sprint 3 blog post. |
| docs/blog/2026-04-20-sprint-2-cqrs-mediatr.md | Adds Sprint 2 blog post. |
| docs/blog/2026-04-20-release-v1-0-0.md | Adds v1.0.0 release blog post. |
| docs/blog/2026-04-18-myblog-project-kickoff.md | Adds project kickoff blog post. |
| docs/adr/sprint8-architecture-tests-xunit-v3-rollout.md | Adds ADR documenting Architecture.Tests xUnit v3 rollout. |
| docs/adr/sprint7-xunit-v3-migration.md | Adds ADR documenting xUnit v3 pilot decision. |
| docs/SQUAD-COMMANDS.md | Adds squad command reference doc. |
| README.md | Updates README (badges, blog section, testing/projects). |
| MyBlog.slnx | Removes Unit.Tests from solution. |
| Directory.Packages.props | Adds xUnit v3 package versions centrally. |
| .squad/agents/pippin/history.md | Updates agent history. |
| .squad/agents/gimli/history.md | Updates agent history. |
| .squad/agents/boromir/history.md | Updates agent history. |
| .squad/agents/aragorn/history.md | Updates agent history. |
| .squad/agents/aragorn/charter.md | Updates review sequence to include Codecov check. |
| .github/workflows/squad-test.yml | Adds Domain.Tests job and updates summary/gating. |
| .github/workflows/squad-release.yml | Updates release workflow test matrix (drops Unit.Tests, adds Domain/Web). |
| .github/workflows/squad-preview.yml | Adds Domain.Tests to preview gate. |
| .github/workflows/squad-mark-released.yml | Adds manual dispatch and improves release/manual behavior. |
| .github/workflows/squad-insider-release.yml | Updates insider test matrix (drops Unit.Tests, adds Domain/Web). |
| .github/workflows/release-blog.yml | Formatting tweaks for generated issue body. |
| .github/workflows/milestone-release-decision.yml | Formatting fixes for generated comments/issue body. |
| .github/workflows/milestone-blog.yml | Formatting fixes for generated issue body (markdown separators). |
| ├── tests/ | ||
| │ ├── Unit.Tests/ # Domain entity + handler unit tests | ||
| │ ├── Architecture.Tests/ # Layer dependency enforcement | ||
| │ ├── Integration.Tests/ # Aspire integration tests | ||
| │ ├── AppHost.Tests/ # Aspire AppHost + E2E tests | ||
| │ ├── Web.Tests/ # Web layer tests | ||
| │ ├── Web.Tests.Bunit/ # Blazor component tests (bUnit) | ||
| │ └── Web.Tests.Integration/ # Web integration tests |
There was a problem hiding this comment.
The docs site’s “Project Structure” block still lists tests/Unit.Tests/, but this PR deletes Unit.Tests and removes it from the solution. Please update the structure listing to avoid referencing a non-existent project/directory.
| //Project Name : Web.Tests | ||
| //======================================================= | ||
|
|
||
| namespace Unit.Data; |
There was a problem hiding this comment.
This file is in tests/Web.Tests/Data, but the namespace is Unit.Data. Please rename the namespace to align with the Web test project (e.g., Web.Data or Web.Tests.Data) to avoid confusion and keep namespaces consistent with the folder/project.
| public static Result<T> FromValue(T? value) | ||
| { | ||
| if (value is null) | ||
| return Fail("Value cannot be null."); |
There was a problem hiding this comment.
Result.FromValue<T>(...) already exists and returns the error message "Provided value is null.". The newly added Result<T>.FromValue(...) duplicates that behavior but returns a different message ("Value cannot be null."), which creates inconsistent semantics depending on which API a caller uses. Consider removing the duplicate API or aligning the failure message with Result.FromValue for consistency.
| return Fail("Value cannot be null."); | |
| return Fail("Provided value is null."); |
| # MyBlog Development Blog | ||
|
|
||
| Welcome to the MyBlog technical blog! Here we document the project's evolution—from architecture decisions and feature releases to testing strategies and DevOps automation. Each post captures what we built, why it matters, and what's coming next. |
There was a problem hiding this comment.
This markdown file is missing YAML front matter and starts with an H1. Repo markdown validators require front matter metadata and no H1 headings (content should start at ##). Please add the required front matter block and change the title to an H2 (or rely on post_title in front matter).
| title: "Release: v1.1.0 — Blazor Theme System with TailwindCSS v4" | ||
| date: 2026-04-24 | ||
| author: Bilbo | ||
| tags: [release, v1.1.0, blazor, tailwind, theme, testing, sprint-4] | ||
| summary: "v1.1.0 ships a complete theme system with light/dark/system modes, four color schemes, and reorganized test infrastructure." |
There was a problem hiding this comment.
Front matter doesn’t match repo-required schema (expects fields like post_title, author1, post_slug, categories, ai_note, post_date, etc.). This file currently uses title/date/author. Update the YAML keys to the required set so markdown validation passes and metadata is consistent across docs.
| title: "Release: v1.1.0 — Blazor Theme System with TailwindCSS v4" | |
| date: 2026-04-24 | |
| author: Bilbo | |
| tags: [release, v1.1.0, blazor, tailwind, theme, testing, sprint-4] | |
| summary: "v1.1.0 ships a complete theme system with light/dark/system modes, four color schemes, and reorganized test infrastructure." | |
| post_title: "Release: v1.1.0 — Blazor Theme System with TailwindCSS v4" | |
| author1: Bilbo | |
| post_slug: release-v1-1-0 | |
| microsoft_alias: "" | |
| featured_image: "" | |
| categories: [release] | |
| tags: [release, v1.1.0, blazor, tailwind, theme, testing, sprint-4] | |
| ai_note: "AI was not used in the creation of this post." | |
| summary: "v1.1.0 ships a complete theme system with light/dark/system modes, four color schemes, and reorganized test infrastructure." | |
| post_date: 2026-04-24 |
| client_secret = clientSecret, | ||
| audience = $"https://{domain}/api/v2/", | ||
| grant_type = "client_credentials" | ||
| }, ct); | ||
| }, cancellationToken).ConfigureAwait(false); | ||
| tokenResponse.EnsureSuccessStatusCode(); | ||
| var tokenData = await tokenResponse.Content.ReadFromJsonAsync<TokenResponse>(ct); | ||
| var tokenData = await tokenResponse.Content.ReadFromJsonAsync<TokenResponse>(cancellationToken).ConfigureAwait(false); |
There was a problem hiding this comment.
IHttpClientFactory doesn’t have a parameterless CreateClient() method (it requires a client name). This handler currently calls httpClientFactory.CreateClient() just above this block; please pass an explicit name (and configure it), otherwise this won’t compile against the standard interface.
|
|
||
| using MyBlog.Web.Features.UserManagement; | ||
|
|
||
| namespace Unit.Handlers; |
There was a problem hiding this comment.
This test file lives under tests/Web.Tests, but the namespace is Unit.Handlers. That looks like leftover from the removed Unit.Tests project and makes discovery/organization confusing. Please rename the namespace to match the Web.Tests convention used by the other handler tests (e.g., Web.Handlers).
| title: "Release: v1.2.0 — Redis Caching and L1/L2 Cache Strategy" | ||
| date: 2026-04-24 | ||
| author: Bilbo | ||
| tags: [release, v1.2.0, redis, caching, aspire, sprint-5] | ||
| summary: "v1.2.0 introduces intelligent caching with Redis: L1 in-memory, L2 distributed, with automatic invalidation on mutations." |
There was a problem hiding this comment.
Front matter doesn’t match repo-required schema (expects fields like post_title, author1, post_slug, categories, ai_note, post_date, etc.). This file currently uses title/date/author. Update the YAML keys to the required set so markdown validation passes and metadata is consistent across docs.
| title: "Release: v1.2.0 — Redis Caching and L1/L2 Cache Strategy" | |
| date: 2026-04-24 | |
| author: Bilbo | |
| tags: [release, v1.2.0, redis, caching, aspire, sprint-5] | |
| summary: "v1.2.0 introduces intelligent caching with Redis: L1 in-memory, L2 distributed, with automatic invalidation on mutations." | |
| post_title: "Release: v1.2.0 — Redis Caching and L1/L2 Cache Strategy" | |
| author1: Bilbo | |
| post_slug: "release-v1-2-0-redis-caching-and-l1-l2-cache-strategy" | |
| microsoft_alias: bilbo | |
| featured_image: "" | |
| categories: [release] | |
| tags: [release, v1.2.0, redis, caching, aspire, sprint-5] | |
| ai_note: "AI-assisted content." | |
| summary: "v1.2.0 introduces intelligent caching with Redis: L1 in-memory, L2 distributed, with automatic invalidation on mutations." | |
| post_date: 2026-04-24 |
| title: "Sprint 2: CQRS and MediatR Deep Dive" | ||
| date: 2026-04-20 | ||
| author: Bilbo | ||
| tags: [cqrs, mediatr, testing, domain, sprint-2] | ||
| summary: "Sprint 2 establishes command-query separation and MediatR handlers for clean, testable domain logic." |
There was a problem hiding this comment.
Front matter doesn’t match repo-required schema (expects fields like post_title, author1, post_slug, categories, ai_note, post_date, etc.). This file currently uses title/date/author. Update the YAML keys to the required set so markdown validation passes and metadata is consistent across docs.
| title: "Sprint 2: CQRS and MediatR Deep Dive" | |
| date: 2026-04-20 | |
| author: Bilbo | |
| tags: [cqrs, mediatr, testing, domain, sprint-2] | |
| summary: "Sprint 2 establishes command-query separation and MediatR handlers for clean, testable domain logic." | |
| post_title: "Sprint 2: CQRS and MediatR Deep Dive" | |
| author1: Bilbo | |
| post_slug: "sprint-2-cqrs-mediatr" | |
| microsoft_alias: bilbo | |
| featured_image: "" | |
| categories: [development] | |
| tags: [cqrs, mediatr, testing, domain, sprint-2] | |
| ai_note: "No AI assistance was used in the creation of this post." | |
| summary: "Sprint 2 establishes command-query separation and MediatR handlers for clean, testable domain logic." | |
| post_date: 2026-04-20 |
| │ ├── Unit.Tests/ # Domain entity + handler unit tests | ||
| │ ├── Architecture.Tests/ # Layer dependency enforcement | ||
| │ ├── Integration.Tests/ # Aspire integration tests |
There was a problem hiding this comment.
tests/Unit.Tests is referenced in the project structure, but this PR removes the Unit.Tests project from the repo/solution. Please update this section (and any other docs) to reflect the current test projects (e.g., Domain.Tests, Web.Tests, etc.) so readers don’t look for a deleted project.
| │ ├── Unit.Tests/ # Domain entity + handler unit tests | |
| │ ├── Architecture.Tests/ # Layer dependency enforcement | |
| │ ├── Integration.Tests/ # Aspire integration tests | |
| │ ├── Domain.Tests/ # Domain entity + handler unit tests | |
| │ ├── Architecture.Tests/ # Layer dependency enforcement |
|
Closing due to incorrect base branch (targeting main instead of dev) and scope contamination. Will recreate with clean branch from dev targeting only Web.Tests xUnit v3 migration changes. |
Summary
Migrates
tests/Web.Tests/from xUnit v2 to xUnit v3 (issue #190), applying all squad testing conventions.Closes #190
Working as Gimli (Tester)
Changes
Package migration (
Web.Tests.csproj)xunit→xunit.v3meta-packagecoverlet.msbuild(incompatible with v3 runner)coverlet.collector,xunit.runner.visualstudioxunit.runner.jsonas<Content CopyToOutputDirectory="PreserveNewest"/>New file
tests/Web.Tests/xunit.runner.json— parallelism settings matching Domain.TestsFile headers (11 files)
Unit.Tests→Web.Testsin Project Name fieldResultTests.cs: removed duplicate old-format 8-line header blockAAA pattern (9 files, ~77 test methods)
// Arrange,// Act,// Assertcomments to all tests lacking them// Arrange (none)// Act & Assertcombined blockIndentation (4 handler files)
GetBlogPostsHandlerTests.cs,CreateBlogPostHandlerTests.cs,DeleteBlogPostHandlerTests.cs,EditBlogPostHandlerTests.csall had their entire class body at column 0}depth tracking)Test results
Scope note
Issue #190 mentioned 23 CS files. Actual count is 17 files. All 17 were audited; the 6 files with correct headers and AAA patterns were left untouched.