# API Contract Tests

## INT-009: Add API contract tests

**Date**: 2025-12-25  
**Status**: Completed

## Summary

API contract tests have been added to verify that all API responses match the expected contract between frontend and backend, ensuring compatibility and preventing breaking changes.

## Test Coverage

The contract tests verify the following aspects of the API:

### 1. Error Response Format (`TestErrorResponseFormat`)
- Verifies that error responses use the standard `APIResponse` envelope
- Checks that `success: false` is set
- Validates error object structure (code, message, details, request_id, timestamp, context)
- Ensures timestamp is in ISO 8601 (RFC3339) format

### 2. Success Response Format (`TestSuccessResponseFormat`)
- Verifies that success responses use the standard `APIResponse` envelope
- Checks that `success: true` is set
- Validates that data is present and error is null

### 3. Pagination Format (`TestPaginationFormat`)
- Verifies that paginated responses include standard pagination metadata
- Checks all pagination fields: page, limit, total, total_pages, has_next, has_prev
- Validates pagination structure matches frontend expectations

### 4. Date/Time Format (`TestDateTimeFormat`)
- Verifies that all date/time fields use ISO 8601 (RFC3339) format
- Ensures timestamps are parseable by frontend JavaScript Date constructor
- Validates UTC timezone usage

### 5. API Response Envelope (`TestAPIResponseEnvelope`)
- Verifies that all responses (success and error) use the `APIResponse` envelope
- Ensures consistent structure across all endpoints
- Validates envelope fields (success, data, error)

### 6. Snake Case Naming (`TestSnakeCaseNaming`)
- Verifies that all JSON field names use snake_case convention
- Ensures consistency with frontend expectations
- Validates naming convention compliance

## Test Structure

All contract tests are located in `veza-backend-api/tests/contract/api_contract_test.go`.

### Test Utilities

The tests use standard Go testing patterns:
- `gin.TestMode` for isolated router testing
- `httptest.NewRecorder` for HTTP response capture
- `stretchr/testify` for assertions
- JSON unmarshaling for response validation

### Test Data Structures

The tests define contract structures that match frontend expectations:
- `APIResponse`: Standard response envelope
- `ErrorResponse`: Standard error structure
- `PaginationData`: Standard pagination structure

## Running the Tests

```bash
# Run all contract tests
go test ./tests/contract/...

# Run specific test
go test ./tests/contract/... -run TestErrorResponseFormat

# Run with verbose output
go test -v ./tests/contract/...
```

## Integration with CI/CD

These tests should be run:
- On every pull request
- Before merging to main branch
- As part of the integration test suite
- Before production deployments

## Benefits

1. **Prevents Breaking Changes**: Tests catch API contract violations before they reach production
2. **Frontend Compatibility**: Ensures backend changes don't break frontend expectations
3. **Documentation**: Tests serve as executable documentation of the API contract
4. **Regression Prevention**: Catches regressions in API format standardization

## Future Enhancements

1. **OpenAPI Schema Validation**: Validate responses against OpenAPI schema
2. **Frontend Type Generation**: Generate TypeScript types from contract tests
3. **Contract Versioning**: Support multiple API contract versions
4. **Performance Testing**: Add performance benchmarks to contract tests
5. **End-to-End Contract Tests**: Test actual frontend-backend integration

## Files Created

- `veza-backend-api/tests/contract/api_contract_test.go` - Contract test suite
- `API_CONTRACT_TESTS.md` - This documentation

## Related Documentation

- `ERROR_RESPONSE_STANDARD.md` - Error response format specification
- `PAGINATION_STANDARD.md` - Pagination format specification
- `DATETIME_STANDARD.md` - Date/time format specification
- `API_ENDPOINT_AUDIT.md` - Endpoint compatibility audit

