Files
api/services/nginx/app/tests/Unit/Invoicing/EconomicV2OpenApiSpecTest.php
T

71 lines
3.1 KiB
PHP

<?php
function economic_v2_openapi_content_or_skip(): string
{
$candidates = [
dirname(__DIR__, 4) . DIRECTORY_SEPARATOR . 'openapi.yaml', // monorepo root in local workspace
dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'openapi.yaml',
dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'openapi.yaml',
];
foreach ($candidates as $candidate) {
if (is_file($candidate)) {
$content = file_get_contents($candidate);
if ($content !== false) {
return $content;
}
}
}
test()->markTestSkipped('openapi.yaml is not available in this runtime environment.');
}
it('documents economic v2 invoice paths in openapi', function (): void {
$content = economic_v2_openapi_content_or_skip();
expect($content)->not->toBeFalse();
expect($content)->toContain('/collected-invoices/economic/v2/details:');
expect($content)->toContain('/collected-invoices/economic/v2/compare:');
expect($content)->toContain('/collected-invoices/economic/v2/compare/bulk:');
expect($content)->toContain('/collected-invoices/economic/v2/revenue-statistics:');
});
it('documents v2 historical distribution and pricing history paths in openapi', function (): void {
$content = economic_v2_openapi_content_or_skip();
expect($content)->not->toBeFalse();
expect($content)->toContain('/superuser/invoicing/period/distribution/v2/all:');
expect($content)->toContain('/superuser/invoicing/period/distribution/v2/fixed-pricing:');
expect($content)->toContain('/superuser/invoicing/period/distribution/v2/wash-subscriptions:');
expect($content)->toContain('/superuser/invoicing/period/distribution/v2/customer-prices:');
expect($content)->toContain('/superuser/customers/pricing-history:');
});
it('aligns legacy compare schema with runtime payload by removing stale required order_ids', function (): void {
$content = economic_v2_openapi_content_or_skip();
expect($content)->not->toBeFalse();
$start = strpos($content, 'CollectedInvoiceEconomicCompareResponse:');
$end = strpos($content, 'CollectedInvoiceEconomicV2DetailsResponse:');
expect($start)->not->toBeFalse();
expect($end)->not->toBeFalse();
$legacyBlock = substr($content, $start, $end - $start);
expect($legacyBlock)->toContain('- internal_total');
expect($legacyBlock)->not->toContain('order_ids:');
expect($legacyBlock)->not->toContain('- order_ids');
});
it('defines new reusable v2 schemas for normalization comparison versioning and distribution', function (): void {
$content = economic_v2_openapi_content_or_skip();
expect($content)->not->toBeFalse();
expect($content)->toContain('EconomicV2NormalizedLineItem:');
expect($content)->toContain('EconomicV2Comparison:');
expect($content)->toContain('CollectedInvoiceEconomicV2CustomerSummary:');
expect($content)->toContain('CollectedInvoiceEconomicV2RevenueStatisticsResponse:');
expect($content)->toContain('EconomicV2RevenueSummary:');
expect($content)->toContain('PricingHistoryVersionEntry:');
expect($content)->toContain('InvoicingDistributionV2AllResponse:');
});