mirror of
https://github.com/azaion/admin.git
synced 2026-04-22 14:06:34 +00:00
[AZ-189] [AZ-190] [AZ-191] [AZ-192] [AZ-193] [AZ-194] [AZ-195] Add e2e blackbox test suite
Made-with: Cursor
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
# Test Environment
|
||||
|
||||
## Overview
|
||||
|
||||
**System under test**: Azaion Admin API — ASP.NET Core Minimal API at `http://localhost:8080`
|
||||
**Consumer app purpose**: Standalone xUnit test project exercising the API through HTTP requests, validating black-box use cases without access to internals.
|
||||
|
||||
## Docker Environment
|
||||
|
||||
### Services
|
||||
|
||||
| Service | Image / Build | Purpose | Ports |
|
||||
|---------|--------------|---------|-------|
|
||||
| system-under-test | Build from `Dockerfile` | Azaion Admin API | 8080:8080 |
|
||||
| test-db | `postgres:16-alpine` | PostgreSQL database | 4312:5432 |
|
||||
| e2e-consumer | Build from `docker.test/Dockerfile` | Black-box test runner (xUnit) | — |
|
||||
|
||||
### Networks
|
||||
|
||||
| Network | Services | Purpose |
|
||||
|---------|----------|---------|
|
||||
| e2e-net | all | Isolated test network |
|
||||
|
||||
### Volumes
|
||||
|
||||
| Volume | Mounted to | Purpose |
|
||||
|--------|-----------|---------|
|
||||
| test-resources | system-under-test:/app/Content | Resource files for upload/download tests |
|
||||
| db-init | test-db:/docker-entrypoint-initdb.d | Schema DDL + seed data |
|
||||
|
||||
### docker-compose structure
|
||||
|
||||
```yaml
|
||||
services:
|
||||
test-db:
|
||||
image: postgres:16-alpine
|
||||
environment:
|
||||
POSTGRES_DB: azaion
|
||||
POSTGRES_USER: azaion_superadmin
|
||||
POSTGRES_PASSWORD: test_password
|
||||
volumes:
|
||||
- ./env/db/01_permissions.sql:/docker-entrypoint-initdb.d/01.sql
|
||||
- ./env/db/02_structure.sql:/docker-entrypoint-initdb.d/02.sql
|
||||
- ./env/db/03_add_timestamp_columns.sql:/docker-entrypoint-initdb.d/03.sql
|
||||
networks:
|
||||
- e2e-net
|
||||
|
||||
system-under-test:
|
||||
build: .
|
||||
environment:
|
||||
ASPNETCORE_ConnectionStrings__AzaionDb: "Host=test-db;Port=5432;Database=azaion;Username=azaion_reader;Password=test_password"
|
||||
ASPNETCORE_ConnectionStrings__AzaionDbAdmin: "Host=test-db;Port=5432;Database=azaion;Username=azaion_admin;Password=test_password"
|
||||
ASPNETCORE_JwtConfig__Secret: "test-jwt-secret-key-at-least-32-chars-long"
|
||||
ASPNETCORE_ENVIRONMENT: Development
|
||||
depends_on:
|
||||
- test-db
|
||||
networks:
|
||||
- e2e-net
|
||||
|
||||
e2e-consumer:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker.test/Dockerfile
|
||||
environment:
|
||||
API_BASE_URL: "http://system-under-test:8080"
|
||||
depends_on:
|
||||
- system-under-test
|
||||
networks:
|
||||
- e2e-net
|
||||
|
||||
networks:
|
||||
e2e-net:
|
||||
```
|
||||
|
||||
## Consumer Application
|
||||
|
||||
**Tech stack**: C# / .NET 10.0, xUnit 2.9.2, FluentAssertions 6.12.2, HttpClient
|
||||
**Entry point**: `dotnet test` in the e2e consumer project
|
||||
|
||||
### Communication with system under test
|
||||
|
||||
| Interface | Protocol | Endpoint | Authentication |
|
||||
|-----------|----------|----------|----------------|
|
||||
| REST API | HTTP | `http://system-under-test:8080/*` | JWT Bearer token |
|
||||
|
||||
### What the consumer does NOT have access to
|
||||
|
||||
- No direct database access to the test-db (queries go through the API only)
|
||||
- No internal module imports from Azaion.Services or Azaion.Common
|
||||
- No shared filesystem with the system-under-test (except via API upload/download)
|
||||
|
||||
## CI/CD Integration
|
||||
|
||||
**When to run**: On every push to `dev`, `main`, and `stage` branches
|
||||
**Pipeline stage**: After build, before deploy
|
||||
**Gate behavior**: Block merge on failure
|
||||
**Timeout**: 5 minutes
|
||||
|
||||
## Reporting
|
||||
|
||||
**Format**: CSV
|
||||
**Columns**: Test ID, Test Name, Execution Time (ms), Result (PASS/FAIL/SKIP), Error Message (if FAIL)
|
||||
**Output path**: `./e2e-results/report.csv`
|
||||
Reference in New Issue
Block a user