[ { "name": "a Wednesday before the cutoff", "args": [ "2026-09-23", false ], "expect": { "inputDay": "2026-09-23", "processingDay": "2026-09-24", "entryDay": "2026-09-25" } }, { "name": "a Wednesday after the cutoff joins Thursday's cycle", "args": [ "2026-09-23", true ], "expect": { "inputDay": "2026-09-24", "processingDay": "2026-09-25", "entryDay": "2026-09-28" } }, { "name": "a Friday submission arrives on Tuesday", "args": [ "2026-09-25", false ], "expect": { "inputDay": "2026-09-25", "processingDay": "2026-09-28", "entryDay": "2026-09-29" } }, { "name": "a Saturday submission waits for Monday", "args": [ "2026-09-26", false ], "expect": { "inputDay": "2026-09-28", "processingDay": "2026-09-29", "entryDay": "2026-09-30" } }, { "name": "the cutoff does not matter on a non-processing day", "args": [ "2026-09-26", true ], "expect": { "inputDay": "2026-09-28", "processingDay": "2026-09-29", "entryDay": "2026-09-30" } }, { "name": "Easter: Thursday before Good Friday processes on Tuesday", "args": [ "2026-04-02", false ], "expect": { "inputDay": "2026-04-02", "processingDay": "2026-04-07", "entryDay": "2026-04-08" } }, { "name": "a file sent on Good Friday starts on the Tuesday after Easter Monday", "args": [ "2026-04-03", false ], "expect": { "inputDay": "2026-04-07", "processingDay": "2026-04-08", "entryDay": "2026-04-09" } }, { "name": "Christmas 2026: the substitute Boxing Day is skipped too", "args": [ "2026-12-23", false ], "expect": { "inputDay": "2026-12-23", "processingDay": "2026-12-24", "entryDay": "2026-12-29" } }, { "name": "Christmas Eve after the cutoff", "args": [ "2026-12-24", true ], "expect": { "inputDay": "2026-12-29", "processingDay": "2026-12-30", "entryDay": "2026-12-31" } }, { "name": "New Year's Eve runs into next year's calendar", "args": [ "2026-12-31", false ], "expect": { "inputDay": "2026-12-31", "processingDay": "2027-01-04", "entryDay": "2027-01-05" } }, { "name": "the summer bank holiday Monday is skipped", "args": [ "2026-08-28", false ], "expect": { "inputDay": "2026-08-28", "processingDay": "2026-09-01", "entryDay": "2026-09-02" } }, { "name": "Christmas 2027 falls at a weekend, both substitute days skipped", "args": [ "2027-12-24", false ], "expect": { "inputDay": "2027-12-24", "processingDay": "2027-12-29", "entryDay": "2027-12-30" } }, { "name": "a December cycle inside the last published year needs no later data", "args": [ "2028-12-22", false ], "expect": { "inputDay": "2028-12-22", "processingDay": "2028-12-27", "entryDay": "2028-12-28" } }, { "name": "the first published year", "args": [ "2019-01-02", false ], "expect": { "inputDay": "2019-01-02", "processingDay": "2019-01-03", "entryDay": "2019-01-04" } }, { "name": "a cycle that runs past the published calendar is an error", "args": [ "2028-12-29", false ], "expectError": "no bank holiday data for england-and-wales in 2029" }, { "name": "a year before the published calendar is an error", "args": [ "2018-06-01", false ], "expectError": "no bank holiday data for england-and-wales in 2018" }, { "name": "a malformed date is an error", "args": [ "2026-9-23", false ], "expectError": "is not an ISO date" }, { "name": "an impossible date is an error", "args": [ "2026-02-30", false ], "expectError": "not a real calendar date" } ]