'1234567_RAF_CH_de_TEST_FILE_OLV_001_15S_16x9_a7K9mP.mp4', 'description' => 'Complete V2 filename with tracking ID', 'expected_valid' => true ], [ 'filename' => '9876543_KIN_IT_it_CHRISTMAS_TVC_MST_30S_16x9_xYz123.mov', 'description' => 'Master file (MST) with tracking ID', 'expected_valid' => true ], [ 'filename' => '555_RAF_DE_de_SAMPLE_ECB_002_6S_4x3.jpg', 'description' => 'Without tracking ID (optional)', 'expected_valid' => true ], [ 'filename' => '12345_FERR_US_en_MULTI_WORD_TITLE_OLV_001_15S_16x9_abc123.mp4', 'description' => 'Multi-word subject title', 'expected_valid' => true ], // Invalid filenames [ 'filename' => 'RAF_CH_de_TEST_OLV_001_15S_16x9.mp4', 'description' => 'Missing OMG Job Number', 'expected_valid' => false ], [ 'filename' => '1234567_R_CH_de_TEST_OLV_001_15S_16x9.mp4', 'description' => 'Brand code too short', 'expected_valid' => false ], [ 'filename' => '1234567_RAF_CHE_de_TEST_OLV_001_15S_16x9.mp4', 'description' => 'Country code wrong length', 'expected_valid' => false ], [ 'filename' => '1234567_RAF_CH_d_TEST_OLV_001_15S_16x9.mp4', 'description' => 'Language code too short', 'expected_valid' => false ] ]; // Run tests $passed = 0; $failed = 0; foreach ($testCases as $index => $test) { echo "Test " . ($index + 1) . ": {$test['description']}\n"; echo "Filename: {$test['filename']}\n"; $parsed = $parser->parseFilename($test['filename']); if ($parsed) { $isValid = $parsed['is_valid']; $expectedValid = $test['expected_valid']; if ($isValid === $expectedValid) { echo "✓ PASSED\n"; $passed++; // Show parsed components for valid files if ($isValid) { echo " Components:\n"; echo " OMG Job: {$parsed['omg_job_number']}\n"; echo " Brand: {$parsed['brand_code']}\n"; echo " Country: {$parsed['country_code']}\n"; echo " Language: {$parsed['language_code']}\n"; echo " Subject: {$parsed['subject_title']}\n"; echo " Asset Type: {$parsed['asset_type']}\n"; echo " Spot Version: {$parsed['spot_version']}\n"; echo " Duration: {$parsed['seconds']}S\n"; echo " Aspect Ratio: {$parsed['aspect_ratio']}\n"; echo " Tracking ID: " . ($parsed['tracking_id'] ?? 'None') . "\n"; // Show clean filename $cleanFilename = $parser->stripUploadComponents($test['filename']); echo " Clean Filename: $cleanFilename\n"; } else { echo " Validation Errors:\n"; foreach ($parsed['validation_errors'] as $error) { echo " - $error\n"; } } if (!empty($parsed['warnings'])) { echo " Warnings:\n"; foreach ($parsed['warnings'] as $warning) { echo " - $warning\n"; } } } else { echo "✗ FAILED - Expected valid=$expectedValid, got valid=$isValid\n"; $failed++; if (!empty($parsed['validation_errors'])) { echo " Validation Errors:\n"; foreach ($parsed['validation_errors'] as $error) { echo " - $error\n"; } } } } else { echo "✗ FAILED - Could not parse filename\n"; $failed++; } echo "\n" . str_repeat('-', 70) . "\n\n"; } // Summary echo "=== TEST SUMMARY ===\n"; echo "Total: " . count($testCases) . "\n"; echo "Passed: $passed\n"; echo "Failed: $failed\n"; echo "\n"; if ($failed === 0) { echo "✓ All tests passed!\n"; } else { echo "✗ Some tests failed\n"; }