Files
The-transit-Project/.github/agents/azure-debug-generate/references/api-test-collections.md
T
Sven laptop 635a130f0b
Build and Push Docker Images / detect-changes (push) Successful in 11s
Build and Push Docker Images / build-auth-api (push) Successful in 1m0s
Build and Push Docker Images / build-employee-api (push) Successful in 1m2s
Build and Push Docker Images / build-transit-api (push) Successful in 1m1s
Build and Push Docker Images / build-error-log-api (push) Successful in 1m5s
Build and Push Docker Images / build-admin-ui (push) Successful in 1m13s
Build and Push Docker Images / build-monitoring-ui (push) Successful in 1m15s
Build and Push Docker Images / deploy-test-node (push) Successful in 3s
──────
### Summary of Changes
  1. Documentation Consolidation:
      • Relocated the docs/ folder and all repository .md files (README.md, DEPLOYMENT.md, DOCKER_README.md,
      DOMAINS_README.md, GETTING_STARTED.md, CI_CD_PORTAINER_GUIDE.md, ADMIN_DEPLOYMENT_SUMMARY.md,
      SECURITY_PRIVATE_FILES.md, handoff.md, azure-project-plan.md, plus service-specific READMEs) into .
      • Updated document links in README.md.
  2. AI Agent Project Map:
      • Created PROJECT_MAP.md in the project root containing complete architecture diagrams, service specs, ports, DB
      schemas, environment variables, and developer workflows.
      • Added PROJECT_MAP.md to .gitignore.
  3. Monitoring UI & Infrastructure Integration:
      • Added monitoring_ui service to docker-compose.yml (port 5175).
      • Configured Gitea workflow docker-build.yml for monitoring_ui builds.
      • Added CORS middleware headers in index.js.
      • Added nginx.conf copy step in Dockerfile.

  ──────
  ### Recommended Commit Message

    docs: consolidate project documentation into monitoring_ui and add agent project map

    - Move all markdown documentation files and docs/ folder into monitoring_ui/docs/
    - Update documentation hub index (monitoring_ui/docs/README.md) with relative paths
    - Generate comprehensive AI agent reference map (PROJECT_MAP.md) in repository root
    - Add PROJECT_MAP.md and monitoring_ui build output/env overrides to .gitignore
    - Integrate monitoring_ui service into docker-compose.yml and Gitea CI workflow
    - Configure CORS handling in employee_api for monitoring dashboard access
    ──────
  ### Alternative Short Commit Message

    refactor(docs): move docs to monitoring_ui and create AI agent PROJECT_MAP.md
2026-09-20 23:33:55 +02:00

8.5 KiB

Important: This skill provides guidance and recommended instructions to assist the AI system. Outputs are not guaranteed to be complete, correct, secure, or applicable to every scenario. Results should be reviewed and validated by a human before being applied. The AI model may choose not to follow all instructions exactly, and additional verification may be required.

API Test Collection Patterns

Reference for generating api-test-collections/{service-id}/ scripts, where {service-id} is the canonical service ID derived from the plan's Service Label column (see generate.md § Service ID Derivation). Only generate test collections for services whose Generate column is checked in the plan. Scripts should be language-agnostic commands that exercise the running app and test its integration with any live emulators.


HTTP

HTTP patterns use {baseUrl} — the project type supplies the base URL (e.g., http://localhost:7071/api for Functions). All other patterns target the emulator directly and are reusable across project types.

GET request

curl -i "{baseUrl}/{FunctionName}"

POST with JSON body

curl -i -X POST "{baseUrl}/{FunctionName}" \
  -H "Content-Type: application/json" \
  -d @sample-data.json

{baseUrl} by project type:

Project Type Base URL
Azure Functions http://localhost:7071/api
Container App http://localhost:{port} (from Dockerfile EXPOSE)
App Service http://localhost:{port} (from framework dev server)

Storage (Azurite — Blob / Queue / Table)

Requires Azurite running. Uses --connection-string "UseDevelopmentStorage=true" for all commands.

Blob trigger — upload a file

az storage blob upload \
  --connection-string "UseDevelopmentStorage=true" \
  --container-name {container-name} \
  --name "sample-file.json" \
  --file sample-file.json \
  --overwrite

Queue trigger — send a message

az storage message put \
  --connection-string "UseDevelopmentStorage=true" \
  --queue-name {queue-name} \
  --content '{"id": "test-001", "data": "sample"}'

Table trigger — insert an entity

az storage entity insert \
  --connection-string "UseDevelopmentStorage=true" \
  --table-name {table-name} \
  --entity PartitionKey=pk RowKey=rk001 Value=test

Cosmos DB

Requires Cosmos DB Emulator running on https://localhost:8081. TLS verification must be disabled for local calls.

Insert a document

curl -k -X POST "https://localhost:8081/dbs/{database}/colls/{collection}/docs" \
  -H "Authorization: type=master&ver=1.0&sig=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==" \
  -H "Content-Type: application/json" \
  -H "x-ms-documentdb-partitionkey: [\"test\"]" \
  -H "x-ms-version: 2018-12-31" \
  -d '{"id": "test-001", "partitionKey": "test", "data": "sample"}'

-k disables TLS verification for the emulator's self-signed cert. Never use in production.


Service Bus

Requires Service Bus Emulator running. Uses curl against the Service Bus Emulator's HTTP endpoint.

Send a message to a queue

curl -i -X POST "http://localhost:5672/messages" \
  -H "Content-Type: application/json" \
  -H "BrokerProperties: {\"Label\": \"test\"}" \
  -d '{"id": "test-001", "data": "sample"}'

The Service Bus Emulator's HTTP endpoint and port may vary. Check the emulator documentation and docker-compose configuration for the correct URL. For SDK-based testing, use the Azure Service Bus SDK with the emulator connection string from emulators/ config.

Send a message to a topic

curl -i -X POST "http://localhost:5672/messages" \
  -H "Content-Type: application/json" \
  -H "BrokerProperties: {\"Label\": \"test\"}" \
  -d '{"id": "test-001", "data": "sample"}'

Adjust the URL path for topic-specific endpoints per the emulator's API surface.


Event Hubs

Requires Event Hubs Emulator running.

Send an event

curl -i -X POST "http://localhost:5672/messages" \
  -H "Content-Type: application/json" \
  -d '{"id": "test-001", "data": "sample"}'

The Event Hubs Emulator's HTTP endpoint and port may vary. Check the emulator documentation and docker-compose configuration for the correct URL. For SDK-based testing, use the Azure Event Hubs SDK with the emulator connection string from emulators/ config.


Timer (Azure Functions only)

Timer triggers cannot be fired by an external event — the Functions host fires them on schedule. Use the Functions admin API to trigger them on demand:

curl -i -X POST "http://localhost:7071/admin/functions/{FunctionName}" \
  -H "Content-Type: application/json" \
  -d '{}'

This calls the Functions admin endpoint which is only available locally. The {} body is required; the timer trigger ignores it.


Generation Rules

When generating API test collections during Phase 2:

  1. Resolve endpoints from the implemented route registrations, not only .azure/project-plan.md. The project plan intentionally omits derived authentication routes, so include implemented registration, login, and current-user endpoints when API Login is enabled.
  2. Create one top-level subdirectory per service: api-test-collections/{service-id}/, where {service-id} is derived from the plan's Service Label column (see generate.md § Service ID Derivation). Only generate for services whose Generate column is checked in the plan.
  3. Within each service directory, generate one subdirectory per trigger/endpoint found during inventory.
  4. Name the trigger directory after the trigger: {trigger-type}-{function-or-endpoint-name} (e.g., http-GetOrder, blob-ProcessUpload).
  5. Create an invoke script (.sh on macOS/Linux, .ps1 on Windows) with the appropriate pattern from this file, substituting discovered values (function name, container name, etc.).
  6. Create a sample-data.json or sample-message.json next to the invoke script when the test requires a body.
  7. On macOS/Linux, make the script executable (chmod +x).

Do not generate timer test scripts unless the user explicitly requests it — they're rarely needed for local debugging.


Plan Section Formatting Rules

When writing the API Test Collections section of the plan, the heading format may vary by trigger type. In all cases, the subfolder names under api-test-collections/{service-id}/ (e.g., http-register, http-createOrder) should also be referenced in each section's markdown heading when they differ so users can easily see which routes map to each invokable script.


HTTP triggers / web API endpoints

### {METHOD} {route} [{🔒}] `{folder-name}`
  • {METHOD} {route} — HTTP verb and full route path (e.g., GET /api/health)
  • 🔒 — Include this emoji when the endpoint requires authentication (any auth scheme: Bearer JWT, API key, etc.). Omit entirely for anonymous/public endpoints.
  • `{folder-name}` — The exact folder name under api-test-collections/{service-id}/ (e.g., `http-health`)

Examples:

### GET /api/health `http-health`

### POST /api/auth/register `http-register`

### GET /api/auth/me 🔒 `http-getMe`

### POST /api/orders 🔒 `http-createOrder`

Auth key — add this once at the top of the API Test Collections section, just after the folder tree, when any 🔒 routes are present:

> 🔒 = requires authentication (replace `<token>` with a JWT from the login endpoint before running)

Non-HTTP triggers (blob, queue, Service Bus, Event Hubs, etc.)

### {TriggerType}: {function-or-resource-name} `{folder-name}`
  • {TriggerType} — Human-readable trigger category: Blob, Queue, Service Bus, Event Hubs, Table, Cosmos DB, etc.
  • {function-or-resource-name} — The function name or the specific resource being targeted (container name, queue name, topic name, etc.)
  • `{folder-name}` — The exact folder name under api-test-collections/{service-id}/ (e.g., `blob-ProcessUpload`)

Examples:

### Blob: uploads container `blob-processUpload`

### Queue: order-requests `queue-sendOrder`

### Service Bus: invoices topic `servicebus-sendInvoice`

### Event Hubs: telemetry `eventhubs-sendTelemetry`

The 🔒 indicator does not apply to non-HTTP triggers — they are invoked by pushing data into the resource directly, not via an authenticated HTTP call.