Files
gru_emoney_token-factory/test/api/contract/openapi-validation.test.ts
defiQUG 651ff4f7eb Initial project setup: Add contracts, API definitions, tests, and documentation
- Add Foundry project configuration (foundry.toml, foundry.lock)
- Add Solidity contracts (TokenFactory138, BridgeVault138, ComplianceRegistry, etc.)
- Add API definitions (OpenAPI, GraphQL, gRPC, AsyncAPI)
- Add comprehensive test suite (unit, integration, fuzz, invariants)
- Add API services (REST, GraphQL, orchestrator, packet service)
- Add documentation (ISO20022 mapping, runbooks, adapter guides)
- Add development tools (RBC tool, Swagger UI, mock server)
- Update OpenZeppelin submodules to v5.0.0
2025-12-12 10:59:41 -08:00

63 lines
1.8 KiB
TypeScript

/**
* OpenAPI Contract Validation Tests
* Ensures API implementation conforms to OpenAPI specification
*/
import { describe, it, expect } from '@jest/globals';
import { readFileSync } from 'fs';
import { join } from 'path';
import * as yaml from 'js-yaml';
import Ajv from 'ajv';
import addFormats from 'ajv-formats';
const OPENAPI_SPEC = join(__dirname, '../../../api/packages/openapi/v1/openapi.yaml');
describe('OpenAPI Contract Validation', () => {
let openapiSpec: any;
beforeAll(() => {
const specContent = readFileSync(OPENAPI_SPEC, 'utf-8');
openapiSpec = yaml.load(specContent);
});
it('should have valid OpenAPI structure', () => {
expect(openapiSpec).toHaveProperty('openapi');
expect(openapiSpec.openapi).toMatch(/^3\.\d+\.\d+$/);
expect(openapiSpec).toHaveProperty('info');
expect(openapiSpec).toHaveProperty('paths');
});
it('should have all required paths', () => {
const requiredPaths = [
'/tokens',
'/tokens/{code}',
'/liens',
'/liens/{lienId}',
'/compliance/accounts/{accountRefId}',
'/triggers',
'/triggers/{triggerId}',
'/iso/inbound',
'/iso/outbound',
'/packets',
'/bridge/lock',
'/bridge/unlock',
];
requiredPaths.forEach((path) => {
expect(openapiSpec.paths).toHaveProperty(path);
});
});
it('should have security schemes defined', () => {
expect(openapiSpec.components).toHaveProperty('securitySchemes');
expect(openapiSpec.components.securitySchemes).toHaveProperty('oauth2');
expect(openapiSpec.components.securitySchemes).toHaveProperty('mtls');
});
it('should have idempotency markers', () => {
expect(openapiSpec).toHaveProperty('x-idempotency');
expect(Array.isArray(openapiSpec['x-idempotency'])).toBe(true);
});
});