mirror of
https://github.com/azaion/satellite-provider.git
synced 2026-06-21 17:21:13 +00:00
e3cd388577
Step 13 (Update Docs) for cycle 2. Most cross-cutting docs were already updated during Step 10 (architecture.md, glossary.md, components/03_tile_downloader, modules/api_program.md, data_model.md, contracts/api/uav-tile-upload.md). This commit completes the remaining module-level + module-layout updates and writes the cycle-2 ripple log. * modules/common_configs.md: + UavQualityConfig section and appsettings-section row (UavQuality). * modules/common_dtos.md: + UavTileMetadata, UavTileBatchMetadataPayload, UavTileBatchUploadResponse, UavTileUploadResultItem, UavTileUploadStatus, UavTileRejectReasons (closed enumeration v1.0.0). * module-layout.md: refresh Common (+ UavQualityConfig + UAV DTOs), TileDownloader (+ UavTileQualityGate, UavTileUploadHandler, + SixLabors.ImageSharp 3.1.11 PackageReference), and WebApi (+ Authentication/*, DTOs/UavTileBatchUploadRequest, + JwtBearer 8.0.21 PackageReference). Updates the "Last Updated" stamp to cycle 2. * modules/tests_unit.md: replace the obsolete "only a dummy test" description; add cycle-2 AZ-487 / AZ-488 test classes (AuthenticationServiceCollectionExtensionsTests, JwtTokenFactoryTests, UavTileQualityGateTests, UavTileUploadHandlerTests, UavTileFilePathTests, PermissionsRequirementTests) + new ProjectReference / package references. * modules/tests_integration.md: + JwtIntegrationTests, UavUploadTests (incl. wall-clock-seeded coordinate counter rationale from the Step 11 fix), and the StubAndErrorContractTests update for the removed 501 stub. * ripple_log_cycle2.md (new): cycle-2 reverse-dependency scan results showing every importer of the new symbols resolves inside the three already-updated components (WebApi, TileDownloader, Common). No unexpected ripple, no heuristic fallback needed. Co-authored-by: Cursor <cursoragent@cursor.com>
50 lines
3.3 KiB
Markdown
50 lines
3.3 KiB
Markdown
# Module: Tests/SatelliteProvider.IntegrationTests
|
|
|
|
## Purpose
|
|
Console application that runs end-to-end integration tests against a live API instance. Designed to run in Docker alongside the API and PostgreSQL containers.
|
|
|
|
## Public Interface
|
|
|
|
### Test Classes
|
|
- `TileTests` — tile download via lat/lon endpoint
|
|
- `RegionTests` — region request → polling → completion flow
|
|
- `BasicRouteTests` — route creation with intermediate points
|
|
- `ComplexRouteTests` — routes with geofencing
|
|
- `ExtendedRouteTests` — routes with `requestMaps: true` and tile ZIP creation
|
|
- `MigrationTests` — direct PostgreSQL schema/index validation (no HTTP). AZ-484 cycle added: `NewUniqueConstraintIncludesSourceColumn_AZ484_AC1`, `BackfillUpdateAssignsGoogleMapsAndCapturedAt_AZ484_AC4`, `MultiSourceInsertCoexistsUnderNewIndex_AZ484_AC1`, `MostRecentAcrossSourcesSelection_AZ484_AC2`, `SameSourceUpsertReplacesPreviousRow_AZ484_AC3` (latter four use temp tables to keep production data untouched).
|
|
- `JwtIntegrationTests` (added by AZ-487, cycle 2) — `AnonymousRequest_To_AnyEndpoint_Returns401`, `ExpiredToken_Returns401`, `InvalidSignature_Returns401`, `ValidToken_Returns200_OnHealthyEndpoint`, `SwaggerDocument_AdvertisesBearerSecurityScheme`. Helpers in `JwtTestHelpers` mint HS256 tokens; the test runner sets `JWT_SECRET` on the API container and attaches a Bearer token to every existing test's HTTP requests so the pre-cycle-2 suite continues to pass.
|
|
- `UavUploadTests` (added by AZ-488, cycle 2) — `HappyPathSingleItem_PersistsRow`, `MixedBatch_ReturnsPerItemResults`, `MultiSourceCoexistence_AZ484_Cycle2`, `SameSourceUpsert_AZ484_Cycle2`, `NoToken_Returns401`, `ValidTokenWithoutGpsPermission_Returns403`, `OversizedBatch_Returns400`. Uses a wall-clock-seeded coordinate counter (`_coordinateCounter` initialized from `DateTime.UtcNow`) so each docker-compose run picks a fresh coordinate band — the postgres named volume persists across runs and a naïve `int = 0` counter collided with prior runs on the per-source unique index (fixed mid-Step-11).
|
|
- `StubAndErrorContractTests` (existing) — updated in cycle 2 to drop the legacy `StubUpload_Returns501` expectation since AZ-488 implemented the endpoint.
|
|
|
|
### Supporting Classes
|
|
- `Models.cs` — HTTP response DTOs for deserialization
|
|
- `RouteTestHelpers.cs` — shared utilities (wait-for-completion polling, geofence polygon builders, test data)
|
|
- `Program.cs` — test runner entry point
|
|
|
|
## Internal Logic
|
|
- Makes HTTP calls to the API at `API_URL` environment variable (default: `http://api:8080`)
|
|
- Tests are methods called sequentially from `Program.cs` (not xUnit — plain console app)
|
|
- Poll-based waiting for async operations (region/route completion)
|
|
- Validates response structure, status transitions, file creation
|
|
|
|
## Dependencies
|
|
- No project references (standalone console app)
|
|
- Communicates with the API exclusively via HTTP
|
|
- NuGet: implicit .NET 8 runtime
|
|
|
|
## Consumers
|
|
- `docker-compose.tests.yml` — runs as a container that depends on the API service
|
|
|
|
## Configuration
|
|
- `API_URL` environment variable (set in docker-compose.tests.yml to `http://api:8080`)
|
|
|
|
## External Integrations
|
|
- HTTP to the SatelliteProvider API
|
|
- Reads output files from mounted `./ready/` and `./tiles/` volumes
|
|
|
|
## Security
|
|
None.
|
|
|
|
## Tests
|
|
This IS the integration test suite.
|