- 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
106 lines
2.9 KiB
TypeScript
106 lines
2.9 KiB
TypeScript
/**
|
|
* REST API Integration Tests
|
|
*/
|
|
|
|
import { describe, it, expect, beforeAll, afterAll } from '@jest/globals';
|
|
import axios from 'axios';
|
|
|
|
const BASE_URL = process.env.API_URL || 'http://localhost:3000';
|
|
const API_KEY = process.env.API_KEY || 'test-key';
|
|
|
|
describe('REST API Integration Tests', () => {
|
|
let accessToken: string;
|
|
|
|
beforeAll(async () => {
|
|
// TODO: Get OAuth2 token
|
|
// accessToken = await getAccessToken();
|
|
});
|
|
|
|
describe('Token Operations', () => {
|
|
it('should deploy a token', async () => {
|
|
const response = await axios.post(
|
|
`${BASE_URL}/v1/tokens`,
|
|
{
|
|
name: 'Test Token',
|
|
symbol: 'TEST',
|
|
decimals: 18,
|
|
issuer: '0x1234567890123456789012345678901234567890',
|
|
},
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${accessToken}`,
|
|
'Idempotency-Key': `test-${Date.now()}`,
|
|
},
|
|
}
|
|
);
|
|
|
|
expect(response.status).toBe(201);
|
|
expect(response.data).toHaveProperty('code');
|
|
expect(response.data).toHaveProperty('address');
|
|
});
|
|
|
|
it('should list tokens', async () => {
|
|
const response = await axios.get(`${BASE_URL}/v1/tokens`, {
|
|
headers: {
|
|
Authorization: `Bearer ${accessToken}`,
|
|
},
|
|
});
|
|
|
|
expect(response.status).toBe(200);
|
|
expect(response.data).toHaveProperty('items');
|
|
expect(Array.isArray(response.data.items)).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe('Lien Operations', () => {
|
|
it('should place a lien', async () => {
|
|
const response = await axios.post(
|
|
`${BASE_URL}/v1/liens`,
|
|
{
|
|
debtor: '0xabcdefabcdefabcdefabcdefabcdefabcdefabcd',
|
|
amount: '1000000000000000000',
|
|
priority: 1,
|
|
reasonCode: 'DEBT_ENFORCEMENT',
|
|
},
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${accessToken}`,
|
|
},
|
|
}
|
|
);
|
|
|
|
expect(response.status).toBe(201);
|
|
expect(response.data).toHaveProperty('lienId');
|
|
});
|
|
});
|
|
|
|
describe('ISO-20022 Operations', () => {
|
|
it('should submit outbound message', async () => {
|
|
const response = await axios.post(
|
|
`${BASE_URL}/v1/iso/outbound`,
|
|
{
|
|
msgType: 'pacs.008',
|
|
instructionId: `0x${'1'.repeat(64)}`,
|
|
payloadHash: `0x${'a'.repeat(64)}`,
|
|
payload: '<Document>...</Document>',
|
|
rail: 'FEDWIRE',
|
|
token: '0x1234567890123456789012345678901234567890',
|
|
amount: '1000000000000000000',
|
|
accountRefId: `0x${'b'.repeat(64)}`,
|
|
counterpartyRefId: `0x${'c'.repeat(64)}`,
|
|
},
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${accessToken}`,
|
|
'Idempotency-Key': `test-${Date.now()}`,
|
|
},
|
|
}
|
|
);
|
|
|
|
expect(response.status).toBe(201);
|
|
expect(response.data).toHaveProperty('triggerId');
|
|
});
|
|
});
|
|
});
|
|
|