Files
satellite-provider/_docs/02_document/modules/tests_integration.md
T
Oleksandr Bezdieniezhnykh e3cd388577
ci/woodpecker/push/01-test Pipeline was successful
ci/woodpecker/push/02-build-push Pipeline was successful
[AZ-487] [AZ-488] docs: cycle 2 doc sync (task mode)
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>
2026-05-12 00:04:05 +03:00

3.3 KiB

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.