Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion src/content/docs/changelog/index.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Overview
lastUpdated: 2026-08-07
lastUpdated: 2026-09-14
description: Release notes and version history for fullstackhero.
sidebar:
order: 1
Expand All @@ -11,6 +11,12 @@ seo:

Notable changes to the kit, newest first.

## 2026-09-14

- **MinIO now comes from quay.io instead of Docker Hub.** MinIO withdrew `minio/minio` from Docker Hub: the repository is gone, and a pull fails with `pull access denied for minio/minio, repository does not exist or may require 'docker login'`. That broke everything in the kit that boots MinIO - the Testcontainers integration-test harness (every test in the project fails at container start), the Aspire AppHost, and the Docker Compose deployment under `deploy/docker/`. The image is still published at `quay.io/minio/minio`, and the kit now pins an explicit tag, `RELEASE.2025-09-07T16-13-09Z`, instead of `:latest` - quay has not moved `:latest` since September 2025, so the two resolve to the same digest today and the pin only removes the surprise of a silent move later. **Action for deployments:** if you copied the compose file or pinned `minio/minio` anywhere of your own, repoint it at `quay.io/minio/minio` with that tag. It is the same image; nothing else changes.

- **The `Testcontainers.*` packages move 4.11.0 to 4.14.0.** 4.11.0 depends on `SSH.NET` 2025.1.0, which carries GHSA-q939-rpr3-3284 and fails `dotnet restore` for the whole solution under `TreatWarningsAsErrors`. 4.14.0 already depends on the patched `SSH.NET` 2026.0.0. Test-only; no runtime surface moves.

## 2026-08-07

The transactional outbox was rebuilt so that any module can publish, every tenant's events actually get dispatched, and the kit is safe to scale past one API instance.
Expand Down
4 changes: 2 additions & 2 deletions src/content/docs/testing/fixtures-and-seed-data.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Fixtures & seed data
lastUpdated: 2026-06-11
lastUpdated: 2026-09-14
description: The shared test factory (containers, host, seeded root tenant + admin) used across the integration suite, and the service swaps that keep tests deterministic.
sidebar:
label: Fixtures & seed data
Expand All @@ -22,7 +22,7 @@ The whole suite shares one database across hundreds of tests. Give everything yo

| Piece | Type | Role |
|---|---|---|
| `FshWebApplicationFactory` | `WebApplicationFactory<Program>, IAsyncLifetime` | Owns the `postgres:17-alpine` + `minio/minio:latest` Testcontainers, builds the in-process host, migrates + seeds |
| `FshWebApplicationFactory` | `WebApplicationFactory<Program>, IAsyncLifetime` | Owns the `postgres:17-alpine` + `quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z` Testcontainers, builds the in-process host, migrates + seeds |
| `FshCollectionDefinition` | `ICollectionFixture<FshWebApplicationFactory>` | Shares **one** factory instance across the whole suite (`[Collection(FshCollectionDefinition.Name)]`) |
| `AuthHelper` | Plain class, wraps the factory | Issues real tokens via `POST /token/issue` and builds authenticated `HttpClient`s |
| `TestConstants` | Static class | Root tenant id, root admin credentials, JWT settings, per-module base paths |
Expand Down
4 changes: 2 additions & 2 deletions src/content/docs/testing/integration-tests.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Integration tests
lastUpdated: 2026-06-11
lastUpdated: 2026-09-14
description: WebApplicationFactory in-process API tests against Testcontainers Postgres + MinIO - one container set, all modules, real round trips.
sidebar:
label: Integration tests
Expand All @@ -23,7 +23,7 @@ Splitting integration tests into per-module projects would mean per-project cont
| Layer | Library | Purpose |
|---|---|---|
| Host | `Microsoft.AspNetCore.Mvc.Testing` | `WebApplicationFactory<Program>` for the in-process API |
| Containers | `Testcontainers.PostgreSql` / `Testcontainers.Minio` 4.11 | `postgres:17-alpine` + `minio/minio:latest` per test run |
| Containers | `Testcontainers.PostgreSql` / `Testcontainers.Minio` 4.14 | `postgres:17-alpine` + `quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z` per test run |
| HTTP | `HttpClient` from `factory.CreateClient()` | Real HTTP calls through the full middleware pipeline |
| Assertions | Shouldly, NSubstitute, AutoFixture | Same as unit tests |

Expand Down