This document describes the implementation of comprehensive API schema validation tests for the /trades endpoints to guard against OpenAPI drift.
The /trades endpoints needed robust validation tests to ensure that:
- API response contracts remain consistent with OpenAPI documentation
- Schema drift is detected early through automated tests
- Breaking changes to the API are caught before deployment
Added 25 comprehensive validation tests in backend/src/__tests__/openapi.drift.test.ts that validate:
- TradeMutationResponse: Validates required fields (tradeId, unsignedXdr)
- TradeListResponse: Validates items array and pagination structure
- TradeSummary: Validates required trade fields (tradeId, buyerAddress, sellerAddress, amountUsdc, status)
- TradeMutationRequest: Validates required fields and constraints
- UnsignedXdrResponse: Validates XDR response format
- TradeStatsResponse: Validates stats endpoint schema
- Loss basis points validation (0-10000 range for buyer and seller)
- Amount USDC field accepts both string and number types
- Dispute reason minimum length requirement (10 characters)
- Required fields validation for trade creation
Tests verify correct HTTP status codes for:
POST /tradesreturns 201 on successful creationGET /tradesreturns 200 with TradeListResponseGET /trades/:idreturns 200 with TradeSummaryPOST /trades/:id/depositreturns 200 with UnsignedXdrResponsePOST /trades/:id/confirmreturns 200 with UnsignedXdrResponsePOST /trades/:id/releasereturns 200 with UnsignedXdrResponsePOST /trades/:id/disputereturns 200 with UnsignedXdrResponse
- All mutation endpoints require
bearerAuthsecurity scheme - All endpoints document 401 unauthorized responses
- Security requirements are properly defined in OpenAPI spec
/trades/:id/manifestreturns ManifestView/trades/:id/evidencereturns EvidenceListResponse/trades/:id/historyreturns AuditHistoryResponse
Tests verify idempotency header support for:
POST /tradesPOST /trades/:id/depositPOST /trades/:id/releasePOST /trades/:id/dispute
- Validates proper error schemas are documented
- Tests AppErrorResponse format for validation errors
- Verifies error responses include proper status codes
- Status filter enum validation (CREATED, FUNDED, DISPUTED, etc.)
- Pagination parameters (page, limit, sort)
- Parameter constraints properly documented
The implementation adds the following test categories:
-
Schema Structure Tests (8 tests)
- Validate core schema definitions match expected structure
- Ensure required fields are properly marked
-
Request/Response Contract Tests (10 tests)
- Verify endpoint responses match documented schemas
- Validate request body requirements
-
Security Tests (2 tests)
- Validate authentication requirements
- Verify authorization header documentation
-
Parameter Validation Tests (3 tests)
- Validate query parameters
- Verify path parameters
- Test parameter constraints
-
Error Handling Tests (2 tests)
- Validate error response formats
- Verify error status codes
backend/src/__tests__/openapi.drift.test.ts- Added 25 new test cases
- Updated test suite description to reference #669 and #670
- Enhanced validation coverage for all /trades endpoints
The tests can be run with:
cd backend
npm test -- openapi.drift.test.ts- Early Detection: Schema drift is caught during CI/CD pipeline
- Documentation Accuracy: Ensures OpenAPI spec matches implementation
- API Stability: Prevents breaking changes to public API contracts
- Developer Confidence: Clear test failures guide developers when making changes
- Consumer Protection: API consumers can trust the documented contracts
Consider adding:
- Runtime response validation middleware
- Contract testing with consumer-driven contracts
- Automated OpenAPI spec generation from code
- Schema versioning support
- GitHub Issue #669: Audit API schema drift for /trades
- GitHub Issue #670: Audit API schema drift for /trades
- OpenAPI Specification:
backend/src/docs/openapi.yaml - Trade Routes:
backend/src/routes/trade.routes.ts - Trade Controller:
backend/src/controllers/trade.controller.ts