95 lines
4.1 KiB
Plaintext
95 lines
4.1 KiB
Plaintext
const { extractJobIdFromFileName, getSupportedPatterns } = require('../../helpers/satloc_util');
|
||
|
||
/**
|
||
* Test Job ID extraction from various filename patterns
|
||
* Covers all supported SatLoc naming conventions
|
||
*/
|
||
function testJobIdExtraction() {
|
||
console.log('=== Testing Job ID Extraction from Filenames ===\n');
|
||
|
||
// Test cases: [filename, expectedJobId, description]
|
||
const testCases = [
|
||
// Pattern 1: JOB prefix
|
||
['JOB146 HK4704.log', '146', 'Direct JOB prefix pattern'],
|
||
['JOB789_field1.log', '789_field1', 'JOB prefix with underscore (captures full jobId)'],
|
||
['job123.log', '123', 'Lowercase job prefix'], // Pattern 2: [10 digits yymmddhhmm][separator][jobId] for Falcon/G4
|
||
['2507140724SatlocG4_b4ef.log', 'b4ef', 'Falcon G4 with timestamp and underscore'],
|
||
['2507140724SatlocG4_test123.log', 'test123', 'Falcon G4 with alphanumeric jobId'],
|
||
['2507140724_myJob.log', 'myJob', 'Timestamp with underscore separator'],
|
||
|
||
// Pattern 3: [8 digits date]_JOB[jobId] for Bantom2 system
|
||
['20250915_JOB789.log', '789', 'Bantom2 date prefix with JOB'],
|
||
['20231201_JOBfield1.log', 'field1', 'Bantom2 with alphanumeric jobId'],
|
||
|
||
// Pattern 4: [10 digits with space] [jobId] for Falcon system
|
||
['2025091512 CROP001.log', 'CROP001', 'Falcon with space separator'],
|
||
['2507140724 TestJob.log', 'TestJob', 'Timestamp with space and jobId'],
|
||
|
||
// Pattern 5: Falcon [jobId]-Log* format (loosened pattern)
|
||
['150-12-06-2025-Log_251209_0.log', '150-12-06-2025', 'Falcon job with Log suffix'],
|
||
['150-12-06-2025-Log.log', '150-12-06-2025', 'Falcon job with just -Log'],
|
||
['150-12-06-2025-Log', '150-12-06-2025', 'Falcon job with just -Log without extension'],
|
||
['MyJob-123-LogExtra.log', 'MyJob-123', 'Custom job with -LogExtra'],
|
||
['ABC-01-02-2025-Log_999999_5.log', 'ABC-01-02-2025', 'Alphanumeric prefix with date'],
|
||
|
||
// Pattern 6: Falcon jobId only (date-like pattern)
|
||
['150-12-06-2025.log', '150-12-06-2025', 'Falcon job ID only'],
|
||
['999-01-01-2024.log', '999-01-01-2024', 'Another date-like job ID'],
|
||
|
||
// Edge cases - should return null
|
||
['Liquid_IF2_G4.log', null, 'No recognizable job ID pattern'],
|
||
['NoJobId.log', null, 'Simple filename without pattern'],
|
||
['random_data.log', null, 'Random filename'],
|
||
['12345.log', null, 'Just numbers (not 10 digits)'],
|
||
];
|
||
|
||
let passed = 0;
|
||
let failed = 0;
|
||
|
||
for (const [filename, expectedJobId, description] of testCases) {
|
||
const extractedJobId = extractJobIdFromFileName(filename);
|
||
const isMatch = extractedJobId === expectedJobId;
|
||
|
||
if (isMatch) {
|
||
passed++;
|
||
console.log(`✅ PASS: "${filename}"`);
|
||
console.log(` → Expected: ${expectedJobId === null ? 'null' : `"${expectedJobId}"`}, Got: ${extractedJobId === null ? 'null' : `"${extractedJobId}"`}`);
|
||
console.log(` → ${description}\n`);
|
||
} else {
|
||
failed++;
|
||
console.log(`❌ FAIL: "${filename}"`);
|
||
console.log(` → Expected: ${expectedJobId === null ? 'null' : `"${expectedJobId}"`}, Got: ${extractedJobId === null ? 'null' : `"${extractedJobId}"`}`);
|
||
console.log(` → ${description}\n`);
|
||
}
|
||
}
|
||
|
||
console.log('='.repeat(50));
|
||
console.log(`\n📊 Results: ${passed} passed, ${failed} failed out of ${testCases.length} tests\n`);
|
||
|
||
// Print supported patterns for reference
|
||
console.log('📋 Supported Filename Patterns:');
|
||
const patterns = getSupportedPatterns();
|
||
patterns.forEach((p, i) => {
|
||
console.log(` ${i + 1}. ${p.name}`);
|
||
console.log(` Format: ${p.format}`);
|
||
console.log(` Example: ${p.example}`);
|
||
});
|
||
|
||
console.log('\n📋 Priority Order:');
|
||
console.log(' 1. Job ID from filename (if valid and non-null)');
|
||
console.log(' 2. jobLongLabelName from SWATHING_SETUP_120 record');
|
||
console.log(' 3. satlocJobId from JOB_INFO_STRING_151 or JOB_INFO_NAME_STRING_152');
|
||
console.log(' 4. "unknown" (fallback)');
|
||
|
||
// Exit with error code if any test failed
|
||
if (failed > 0) {
|
||
console.log(`\n⚠️ ${failed} test(s) failed!`);
|
||
process.exit(1);
|
||
} else {
|
||
console.log('\n✅ All tests passed!');
|
||
process.exit(0);
|
||
}
|
||
}
|
||
|
||
// Run tests
|
||
testJobIdExtraction(); |