{
  "generator": "scripts/generate-fixtures.mjs",
  "generated": "2026-07-18",
  "license": "CC0-1.0. All data is invented for testing. Download, redistribute, embed in test suites, and link freely - no attribution required.",
  "passwordNote": "Protected fixtures use the intentionally public password \"excel123\" so protection can be verified and removed in tests.",
  "files": [
    {
      "file": "sample-budget.xlsx",
      "format": "xlsx",
      "bytes": 21206,
      "sha256": "f3dd62ebfc8a0c33c6f83ea4deeabf070dda88068127ee74cdd86be19f0bd9e8",
      "password": null,
      "demonstrates": "Two worksheets, SUM/variance formulas with cached values, typed columns. General-purpose sample for viewers, converters, and the compare tool.",
      "expected": {
        "/excel-viewer": "Opens with two sheet tabs; formula cells show their last calculated value.",
        "/excel-to-csv": "Exports either worksheet to CSV with all rows intact.",
        "/excel-compare": "Use as the 'before' file against an edited copy to see cell-level differences."
      }
    },
    {
      "file": "protected-sample.xlsx",
      "format": "xlsx",
      "bytes": 21624,
      "sha256": "d316e86570df57046cc8e2e23b5a8622ae52d78c018d894aee0b6ce7476eca7f",
      "password": "excel123",
      "demonstrates": "Worksheet protection (<sheetProtection> with the legacy 16-bit password hash) on both sheets. The cells are locked against editing but the data is fully readable.",
      "expected": {
        "/excel-password-remover": "Reports both sheets as protected and returns an unlocked copy without needing the password.",
        "/excel-viewer": "Opens normally - sheet protection restricts editing, not reading."
      }
    },
    {
      "file": "workbook-protected.xlsx",
      "format": "xlsx",
      "bytes": 21367,
      "sha256": "8d40b58fa2604a44498f73611f7d83b15ba7218335f521b7a85cbe4cc26aa5f4",
      "password": "excel123",
      "demonstrates": "Workbook structure protection (<workbookProtection lockStructure=\"1\">). Sheets cannot be added, deleted, renamed, moved, or unhidden in Excel until it is removed.",
      "expected": {
        "/excel-password-remover": "Detects workbook protection and returns a copy with the structure unlocked.",
        "/excel-viewer": "Opens normally - structure protection does not restrict reading."
      }
    },
    {
      "file": "merged-formats.xlsx",
      "format": "xlsx",
      "bytes": 18028,
      "sha256": "e34069ed20f69d6695225e52bec79d8c92540f96719a1a304894bf1162758d2d",
      "password": null,
      "demonstrates": "Merged title/header ranges, a frozen top row, currency/percent/date number formats, and custom column widths - exercises exactly the metadata a data-view renderer keeps or drops.",
      "expected": {
        "/excel-viewer": "Merged ranges render as merged cells, columns keep their relative widths, and formatted numbers display as $1,234.00 / 34.2% / 2026-07-17.",
        "/excel-to-html": "Merged ranges become colspan/rowspan in the exported table."
      }
    },
    {
      "file": "sample-budget-v2.xlsx",
      "format": "xlsx",
      "bytes": 21508,
      "sha256": "509cde9db4b98b818c87df2662a691b872d8a13897d1978c10110c4c897dae84",
      "password": null,
      "demonstrates": "An edited copy of sample-budget.xlsx: changed amounts on both sheets, one renamed description, and one added transaction. Pairs with the original for diff/compare demos.",
      "expected": {
        "/excel-compare": "Against sample-budget.xlsx it reports the changed cells on Summary and Transactions plus the added Pharmacy row."
      }
    },
    {
      "file": "messy-data.xlsx",
      "format": "xlsx",
      "bytes": 18004,
      "sha256": "8999fead17b1d52c3d3af700cd83c85229920ee9f6cba0247f998bc84df236f9",
      "password": null,
      "demonstrates": "A contact list with exact duplicates, case-variant duplicates, stray whitespace, inconsistent casing, and blank rows - the classic cleanup workload.",
      "expected": {
        "/excel-data-cleaner": "Trim, case normalization, and blank-row removal produce a clean list.",
        "/remove-duplicates-excel": "Dedupe on Email with trim and case-insensitive matching removes the duplicate rows."
      }
    },
    {
      "file": "macro-extension.xlsm",
      "format": "xlsm",
      "bytes": 21318,
      "sha256": "6f217a93840f139ffe3cf3ee93d6290ef0ec20d58e6754e4dc881de1203cad23",
      "password": null,
      "demonstrates": "A .xlsm package with NO VBA project inside: the macro-enabled extension and content type without any macro code. Shows that the extension alone doesn't mean a file contains macros - and is safe to hand to any macro-handling tool.",
      "expected": {
        "/xlsm-viewer": "Opens like any workbook; there are no macros to (not) run.",
        "/excel-macro-remover": "Reports no VBA project to remove."
      }
    }
  ]
}
