commit de compras

This commit is contained in:
2026-11-04 09:37:20 +02:00
parent fcf31e8d48
commit 0b05a1192c
741 changed files with 114127 additions and 116 deletions
+5 -5
View File
@@ -5,9 +5,9 @@ import {spawnSync} from 'node:child_process';
const state=JSON.parse(fs.readFileSync('C:/laragon/data/sgf-tempo/run/modular-regression-current.json','utf8'));
if(!/^[a-f0-9]{12}$/.test(state.id)||path.resolve(state.root)!==path.resolve('C:/laragon/data/sgf-tempo/run/modular-regression-'+state.id)||state.port!==55439)throw Error('Unexpected QA cluster');
const resume=process.argv[2]==='new'?undefined:process.argv[2],step=process.argv[3]||'linked';if(resume&&!/^[a-f0-9]{12}$/.test(resume))throw Error('Bad resume tag');
const selectedFilter=process.argv[4];if(selectedFilter&&!/^[a-zA-Z0-9_|]+$/.test(selectedFilter))throw Error('Invalid targeted test filter');
if(step==='financial-read-affected'&&resume)throw Error('Financial RefreshDatabase cases require a new owned QA database; retained proof databases are never reset.');
if(!['linked','affected','lots','replay','issue-affected','issue-lots','return-native','return-link','return-reversals','return-flow','return-extra','financial-read-affected'].includes(step))throw Error('Unknown isolated receipt/issue step');
const selectedFilter=process.argv[4];if(selectedFilter&&!/^[a-zA-Z0-9_ |]+$/.test(selectedFilter))throw Error('Invalid targeted test filter');
if(['financial-read-affected','native-payable-compat'].includes(step)&&resume)throw Error('Financial RefreshDatabase cases require a new owned QA database; retained proof databases are never reset.');
if(!['linked','affected','lots','replay','issue-affected','issue-lots','return-native','return-link','return-reversals','return-flow','return-extra','financial-read-affected','native-payable-page','native-payable-compat'].includes(step))throw Error('Unknown isolated receipt/issue step');
const tag=resume??crypto.randomBytes(6).toString('hex'),root=path.join(state.root,'private','stock-receipt-'+tag),app=path.join(root,'app');
const source=path.resolve('../compras'),database='compras_receipts_test_'+tag,role='stock_receipt_qa_'+tag,reader='stock_receipt_read_'+tag;
const php='C:/laragon/tools/sgf-tempo/php-8.4.27/php.exe',psql='C:/Program Files/PostgreSQL/17/bin/psql.exe';
@@ -42,7 +42,7 @@ fs.writeFileSync(config,`<phpunit bootstrap="${source.replaceAll('\\','/')}/vend
const firstOutput=path.join(root,step+'-junit.xml');const output=fs.existsSync(firstOutput)?path.join(root,step+'-'+Date.now()+'-junit.xml'):firstOutput;
const pest=[path.join(source,'vendor/pestphp/pest/bin/pest'),'--test-directory',path.relative(source,path.join(app,'tests')),'-c',config];
const args=step==='return-reversals'?[...pest,path.join(app,'tests/Feature/InventoryReversalsTest.php')]:step==='issue-affected'?[...pest,path.join(app,'tests/Feature/StockOperationsTest.php')]:step==='issue-lots'?[...pest,path.join(app,'tests/Feature/InventoryLotsTest.php'),'--filter','FEFO consumes|expiry and hold']:step==='affected'?[...pest,path.join(app,'tests/Feature/ReceiptStockTest.php')]:step==='lots'?[...pest,path.join(app,'tests/Feature/InventoryLotsTest.php'),path.join(app,'tests/Feature/InventoryLotPolicyTest.php'),'--filter','tracked receipt|preapproved exemption|switching receipt policy']:[path.join(source,'vendor/phpunit/phpunit/phpunit'),'-c',config,path.join(app,'tests/Feature/'+(['return-native','return-link','return-flow','return-extra'].includes(step)?'WarehouseReturnIntegrationTest.php':step==='replay'?'ReceiptAdapterReplayTest.php':'CommonReceiptStockTest.php'))];
const selectedArgs=step==='financial-read-affected'?[...pest,path.join(app,'tests/Feature/PayableHistoryImportTest.php'),path.join(app,'tests/Feature/PayablePaymentDecisionTest.php')]:args;
const r=spawnSync(php,[...selectedArgs,...(selectedFilter?['--filter',selectedFilter]:step==='return-link'?['--filter','native_receipt_issue|source_options']:step==='return-extra'?['--filter','competing_native|expired_and_maintenance']:step==='return-flow'?['--filter','test_(native_receipt|stale_capacity|decision_failure|undeclared|source_issue|concurrent_native|configured_context|return_signals)']:[]),'--log-junit',output],{cwd:app,stdio:'inherit',windowsHide:true,env:{...process.env,APP_BASE_PATH:app,APP_ENV:'testing',SGF_ISOLATED_REGRESSION_RUN:state.id,STOCK_RECEIPT_ROOT:root,...(step==='financial-read-affected'?{COMMON_PAYABLES_PATH:path.resolve('packages/payables')}:{} )}});
const selectedArgs=['financial-read-affected','native-payable-compat'].includes(step)?[...pest,...(step==='native-payable-compat'?[path.join(app,'tests/Feature/SupplierPayableIntegrationTest.php')]:[]),path.join(app,'tests/Feature/PayableHistoryImportTest.php'),path.join(app,'tests/Feature/PayablePaymentDecisionTest.php')]:step==='native-payable-page'?[path.join(source,'vendor/phpunit/phpunit/phpunit'),'-c',config,path.join(app,'tests/Feature/NativePayablePageTest.php')]:args;
const r=spawnSync(php,[...selectedArgs,...(selectedFilter?['--filter',selectedFilter]:step==='return-link'?['--filter','native_receipt_issue|source_options']:step==='return-extra'?['--filter','competing_native|expired_and_maintenance']:step==='return-flow'?['--filter','test_(native_receipt|stale_capacity|decision_failure|undeclared|source_issue|concurrent_native|configured_context|return_signals)']:[]),'--log-junit',output],{cwd:app,stdio:'inherit',windowsHide:true,env:{...process.env,APP_BASE_PATH:app,APP_ENV:'testing',SGF_ISOLATED_REGRESSION_RUN:state.id,STOCK_RECEIPT_ROOT:root,...(['financial-read-affected','native-payable-page','native-payable-compat'].includes(step)?{COMMON_PAYABLES_PATH:path.resolve('packages/payables')}:{} )}});
if(r.status===0&&['linked','return-link','return-flow'].includes(step))pg(`GRANT USAGE ON SCHEMA public TO ${reader}; GRANT SELECT ON stock_items,warehouses,stock_movements TO ${reader};`, 'sgf_regression_owner',database);
console.log(JSON.stringify({exit_code:r.status,tag,step,junit:output,isolated_database:database,root,reader_select_granted:r.status===0&&['linked','return-link','return-flow'].includes(step)}));process.exitCode=r.status??1;