ZDDC/tests/fixtures/zddc-filenames.js
2026-06-11 13:32:31 -05:00

191 lines
11 KiB
JavaScript

/**
* ZDDC filename test fixtures.
*
* Covers the full naming convention from README.md:
* trackingNumber_revision (status) - title.extension
*
* These fixtures are shared across tool tests to ensure consistent
* parsing behavior (archive, transmittal, classifier all parse filenames).
*/
/** Valid ZDDC filenames with expected parsed components */
export const VALID_FILES = [
// --- Standard letter revisions ---
{
filename: '123456-EL-SPC-2623_A (IFR) - Specification For Switchgear.pdf',
parsed: { trackingNumber: '123456-EL-SPC-2623', revision: 'A', status: 'IFR', title: 'Specification For Switchgear', extension: 'pdf' },
size: 45000,
},
{
filename: '123456-EL-SPC-2623_B (IFR) - Specification For Switchgear.pdf',
parsed: { trackingNumber: '123456-EL-SPC-2623', revision: 'B', status: 'IFR', title: 'Specification For Switchgear', extension: 'pdf' },
size: 46000,
},
// --- Standard number revisions (issued for construction) ---
{
filename: '123456-EL-SPC-2623_0 (IFC) - Specification For Switchgear.pdf',
parsed: { trackingNumber: '123456-EL-SPC-2623', revision: '0', status: 'IFC', title: 'Specification For Switchgear', extension: 'pdf' },
size: 47000,
},
{
filename: '123456-EL-SPC-2623_1 (IFC) - Specification For Switchgear.pdf',
parsed: { trackingNumber: '123456-EL-SPC-2623', revision: '1', status: 'IFC', title: 'Specification For Switchgear', extension: 'pdf' },
size: 48000,
},
// --- Revision modifiers ---
{
filename: '123456-EL-SPC-2623_A+C1 (RSB) - Specification For Switchgear.pdf',
parsed: { trackingNumber: '123456-EL-SPC-2623', revision: 'A+C1', status: 'RSB', title: 'Specification For Switchgear', extension: 'pdf' },
size: 12000,
description: 'Comments to Rev A',
},
{
filename: '123456-EL-SPC-2623_A+C2 (RSA) - Specification For Switchgear.pdf',
parsed: { trackingNumber: '123456-EL-SPC-2623', revision: 'A+C2', status: 'RSA', title: 'Specification For Switchgear', extension: 'pdf' },
size: 13000,
description: 'Second set of comments to Rev A',
},
{
filename: '123456-EL-SPC-2623_A+B1 (IFI) - Specification For Switchgear.pdf',
parsed: { trackingNumber: '123456-EL-SPC-2623', revision: 'A+B1', status: 'IFI', title: 'Specification For Switchgear', extension: 'pdf' },
size: 8000,
description: 'Backup material for Rev A',
},
{
filename: '123456-EL-SPC-2623_A+N1 (IFI) - Specification For Switchgear.pdf',
parsed: { trackingNumber: '123456-EL-SPC-2623', revision: 'A+N1', status: 'IFI', title: 'Specification For Switchgear', extension: 'pdf' },
size: 5000,
description: 'Notes for Rev A',
},
{
filename: '123456-EL-SPC-2623_A+Q1 (RSA) - Specification For Switchgear.pdf',
parsed: { trackingNumber: '123456-EL-SPC-2623', revision: 'A+Q1', status: 'RSA', title: 'Specification For Switchgear', extension: 'pdf' },
size: 3000,
description: 'Quality check record for Rev A',
},
// --- Draft indicators ---
{
filename: '123456-EL-SPC-2623_~B (IFR) - Specification For Switchgear.pdf',
parsed: { trackingNumber: '123456-EL-SPC-2623', revision: '~B', status: 'IFR', title: 'Specification For Switchgear', extension: 'pdf' },
size: 44000,
description: 'Working draft of Rev B',
},
{
filename: '123456-EL-SPC-2623_A+~C1 (---) - Specification For Switchgear.pdf',
parsed: { trackingNumber: '123456-EL-SPC-2623', revision: 'A+~C1', status: '---', title: 'Specification For Switchgear', extension: 'pdf' },
size: 11000,
description: 'Working draft of comments to Rev A, status unknown',
},
// --- Multiple disciplines ---
{
filename: '123456-EM-MDL-0001_A (IFR) - Master Deliverables List.pdf',
parsed: { trackingNumber: '123456-EM-MDL-0001', revision: 'A', status: 'IFR', title: 'Master Deliverables List', extension: 'pdf' },
size: 120000,
},
{
filename: '123456-EL-ARR-0003_A (IFR) - Electrical Room Equipment Arrangement.dwg',
parsed: { trackingNumber: '123456-EL-ARR-0003', revision: 'A', status: 'IFR', title: 'Electrical Room Equipment Arrangement', extension: 'dwg' },
size: 500000,
},
{
filename: '123456-ME-RFI-0024_A (IFR) - Mechanical Room Size RFI.pdf',
parsed: { trackingNumber: '123456-ME-RFI-0024', revision: 'A', status: 'IFR', title: 'Mechanical Room Size RFI', extension: 'pdf' },
size: 25000,
},
// --- Issued status codes (no DFT — drafts use ~rev prefix) ---
{ filename: '123456-EL-DWG-0002_A (IFA) - Approval Drawing.pdf', parsed: { trackingNumber: '123456-EL-DWG-0002', revision: 'A', status: 'IFA', title: 'Approval Drawing', extension: 'pdf' }, size: 10000 },
{ filename: '123456-EL-DWG-0003_A (IFB) - Bid Drawing.pdf', parsed: { trackingNumber: '123456-EL-DWG-0003', revision: 'A', status: 'IFB', title: 'Bid Drawing', extension: 'pdf' }, size: 10000 },
{ filename: '123456-EL-DWG-0004_A (IFC) - Construction Drawing.pdf', parsed: { trackingNumber: '123456-EL-DWG-0004', revision: 'A', status: 'IFC', title: 'Construction Drawing', extension: 'pdf' }, size: 10000 },
{ filename: '123456-EL-DWG-0005_A (IFD) - Design Drawing.pdf', parsed: { trackingNumber: '123456-EL-DWG-0005', revision: 'A', status: 'IFD', title: 'Design Drawing', extension: 'pdf' }, size: 10000 },
{ filename: '123456-EL-DWG-0006_A (IFI) - Information Drawing.pdf', parsed: { trackingNumber: '123456-EL-DWG-0006', revision: 'A', status: 'IFI', title: 'Information Drawing', extension: 'pdf' }, size: 10000 },
{ filename: '123456-EL-DWG-0007_A (IFP) - Purchase Drawing.pdf', parsed: { trackingNumber: '123456-EL-DWG-0007', revision: 'A', status: 'IFP', title: 'Purchase Drawing', extension: 'pdf' }, size: 10000 },
{ filename: '123456-EL-DWG-0008_A (IFR) - Review Drawing.pdf', parsed: { trackingNumber: '123456-EL-DWG-0008', revision: 'A', status: 'IFR', title: 'Review Drawing', extension: 'pdf' }, size: 10000 },
{ filename: '123456-EL-DWG-0009_A (IFU) - Use Drawing.pdf', parsed: { trackingNumber: '123456-EL-DWG-0009', revision: 'A', status: 'IFU', title: 'Use Drawing', extension: 'pdf' }, size: 10000 },
{ filename: '123456-EL-DWG-0010_A (REC) - Record Drawing.pdf', parsed: { trackingNumber: '123456-EL-DWG-0010', revision: 'A', status: 'REC', title: 'Record Drawing', extension: 'pdf' }, size: 10000 },
// --- Review status codes (used with modifiers) ---
{ filename: '123456-EL-DWG-0001_A+C1 (RSA) - No Comments.pdf', parsed: { trackingNumber: '123456-EL-DWG-0001', revision: 'A+C1', status: 'RSA', title: 'No Comments', extension: 'pdf' }, size: 5000 },
{ filename: '123456-EL-DWG-0001_A+C1 (RSB) - Incorporate and Resubmit.pdf', parsed: { trackingNumber: '123456-EL-DWG-0001', revision: 'A+C1', status: 'RSB', title: 'Incorporate and Resubmit', extension: 'pdf' }, size: 5000 },
{ filename: '123456-EL-DWG-0001_A+C1 (RSC) - Revise and Resubmit.pdf', parsed: { trackingNumber: '123456-EL-DWG-0001', revision: 'A+C1', status: 'RSC', title: 'Revise and Resubmit', extension: 'pdf' }, size: 5000 },
{ filename: '123456-EL-DWG-0001_A+C1 (RSD) - Rejected.pdf', parsed: { trackingNumber: '123456-EL-DWG-0001', revision: 'A+C1', status: 'RSD', title: 'Rejected', extension: 'pdf' }, size: 5000 },
{ filename: '123456-EL-DWG-0001_A+B1 (RSI) - Supplemental Info.pdf', parsed: { trackingNumber: '123456-EL-DWG-0001', revision: 'A+B1', status: 'RSI', title: 'Supplemental Info', extension: 'pdf' }, size: 5000 },
// --- Record/construction lifecycle ---
{
filename: '123456-EL-ARR-0003_0 (IFC) - Electrical Room Equipment Arrangement.pdf',
parsed: { trackingNumber: '123456-EL-ARR-0003', revision: '0', status: 'IFC', title: 'Electrical Room Equipment Arrangement', extension: 'pdf' },
size: 50000,
description: 'First construction issue',
},
{
filename: '123456-EL-ARR-0003_1 (IFC) - Electrical Room Equipment Arrangement.pdf',
parsed: { trackingNumber: '123456-EL-ARR-0003', revision: '1', status: 'IFC', title: 'Electrical Room Equipment Arrangement', extension: 'pdf' },
size: 51000,
description: 'Construction revision',
},
{
filename: '123456-EL-ARR-0003_2 (REC) - Electrical Room Equipment Arrangement.pdf',
parsed: { trackingNumber: '123456-EL-ARR-0003', revision: '2', status: 'REC', title: 'Electrical Room Equipment Arrangement', extension: 'pdf' },
size: 52000,
description: 'For record',
},
];
/** Invalid filenames for negative testing */
export const INVALID_FILES = [
{ filename: 'random-document.pdf', reason: 'No ZDDC naming convention' },
{ filename: 'has spaces in tracking_A (IFR) - Title.pdf', reason: 'Spaces in tracking number' },
{ filename: '123456_EL_SPC_2623_A (IFR) - Title.pdf', reason: 'Underscores in tracking number' },
{ filename: '123456-EL-SPC-2623_A (IFR).pdf', reason: 'Missing title separator' },
{ filename: '123456-EL-SPC-2623_A - Title.pdf', reason: 'Missing status' },
{ filename: '123456-EL-SPC-2623 (IFR) - Title.pdf', reason: 'Missing revision' },
{ filename: '123456-EL-SPC-2623_ (IFR) - Title.pdf', reason: 'Empty revision' },
{ filename: '123456-EL-SPC-2623_A () - Title.pdf', reason: 'Empty status' },
{ filename: '123456-EL-SPC-2623_A (IFR) - .pdf', reason: 'Empty title' },
];
/** Transmittal folder names */
export const VALID_FOLDERS = [
{
foldername: '2025-10-31_123456-EM-SUB-0001 (IFR) - General Arrangement for Review',
parsed: { date: '2025-10-31', trackingNumber: '123456-EM-SUB-0001', status: 'IFR', title: 'General Arrangement for Review' },
},
{
foldername: '2025-10-31_123456-EL-TRN-0043 (IFC) - Electrical Design Issued For Construction',
parsed: { date: '2025-10-31', trackingNumber: '123456-EL-TRN-0043', status: 'IFC', title: 'Electrical Design Issued For Construction' },
},
{
foldername: '2025-10-31_123456-ME-RFI-0024 (IFR) - Mechanical Room Size RFI',
parsed: { date: '2025-10-31', trackingNumber: '123456-ME-RFI-0024', status: 'IFR', title: 'Mechanical Room Size RFI' },
},
{
foldername: '2025-11-12_123456-ME-RFI-0024 (IFU) - Mechanical Room Size RFI',
parsed: { date: '2025-11-12', trackingNumber: '123456-ME-RFI-0024', status: 'IFU', title: 'Mechanical Room Size RFI' },
},
];
/**
* Expected revision sort order (letters before numbers, drafts before finals).
* This documents the canonical behavior -- tests should verify each tool's
* compareRevisions() matches this order.
*/
export const REVISION_SORT_ORDER = [
'~A', // draft of A
'A', // final A
'A+B1', // backup material for A
'A+C1', // comments to A
'A+~C2', // draft of second comments to A
'A+C2', // second comments to A
'A+N1', // notes for A
'A+Q1', // quality check for A
'~B', // draft of B
'B', // final B
'0', // first construction issue
'1', // construction revision
'2', // for record
];