agmission/Development/server/tests/utils/test_filename_patterns.js.backup

95 lines
4.1 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();