[
{
"name": "CPR 2.8 example (i): 3 days before a hearing on Friday 20 October: Monday 16 October",
"args": [
"2023-10-20",
3,
"at-least-before",
false,
[]
],
"expect": {
"date": "2023-10-16",
"shortPeriod": true,
"extended": false
}
},
{
"name": "CPR 2.8(4) example: 3 days before a hearing on Monday 20 October: Tuesday 14 October",
"args": [
"2025-10-20",
3,
"at-least-before",
false,
[]
],
"expect": {
"date": "2025-10-14",
"shortPeriod": true,
"extended": false
}
},
{
"name": "CPR 2.8 example (ii): at least 28 days after notice on 1 October: 30 October",
"args": [
"2023-10-01",
28,
"at-least-after",
false,
[]
],
"expect": {
"date": "2023-10-30",
"shortPeriod": false,
"extended": false
}
},
{
"name": "CPR 2.8 example (iii): within 14 days of service on 2 October: 16 October",
"args": [
"2023-10-02",
14,
"within",
false,
[]
],
"expect": {
"date": "2023-10-16",
"shortPeriod": false,
"extended": false
}
},
{
"name": "5 days over Easter skip Good Friday, the weekend and Easter Monday",
"args": [
"2026-04-02",
5,
"within",
false,
[]
],
"expect": {
"date": "2026-04-13",
"shortPeriod": true,
"extended": false
}
},
{
"name": "5 days over Christmas and New Year skip both years' bank holidays",
"args": [
"2025-12-23",
5,
"within",
false,
[]
],
"expect": {
"date": "2026-01-02",
"shortPeriod": true,
"extended": false
}
},
{
"name": "6 days is not a short period: Easter counts, calendar days only",
"args": [
"2026-04-03",
6,
"within",
false,
[]
],
"expect": {
"date": "2026-04-09",
"shortPeriod": false,
"extended": false
}
},
{
"name": "a 7-day period ending on a Saturday stays there for an act out of court",
"args": [
"2026-09-12",
7,
"within",
false,
[]
],
"expect": {
"date": "2026-09-19",
"shortPeriod": false,
"extended": false
}
},
{
"name": "the same period for filing at court moves to Monday (CPR 2.8(5))",
"args": [
"2026-09-12",
7,
"within",
true,
[]
],
"expect": {
"date": "2026-09-21",
"shortPeriod": false,
"extended": true
}
},
{
"name": "14 days ending on the August bank holiday: filing is in time on Tuesday",
"args": [
"2026-08-17",
14,
"within",
true,
[]
],
"expect": {
"date": "2026-09-01",
"shortPeriod": false,
"extended": true
}
},
{
"name": "the court office's own closure days move a filing deadline further",
"args": [
"2026-12-15",
14,
"within",
true,
[
"2026-12-29",
"2026-12-30"
]
],
"expect": {
"date": "2026-12-31",
"shortPeriod": false,
"extended": true
}
},
{
"name": "a filing deadline on an open day is not moved",
"args": [
"2026-09-01",
14,
"within",
true,
[
"2026-09-16"
]
],
"expect": {
"date": "2026-09-15",
"shortPeriod": false,
"extended": false
}
},
{
"name": "at least 3 days after notice on a Friday: the clear days are Monday to Wednesday",
"args": [
"2026-09-18",
3,
"at-least-after",
false,
[]
],
"expect": {
"date": "2026-09-24",
"shortPeriod": true,
"extended": false
}
},
{
"name": "3 days before a Thursday hearing: Monday to Wednesday are clear, so literally the Sunday",
"args": [
"2026-09-24",
3,
"at-least-before",
false,
[]
],
"expect": {
"date": "2026-09-20",
"shortPeriod": true,
"extended": false
}
},
{
"name": "7 clear days before a hearing count every calendar day",
"args": [
"2026-09-24",
7,
"at-least-before",
false,
[]
],
"expect": {
"date": "2026-09-16",
"shortPeriod": false,
"extended": false
}
},
{
"name": "a short period triggered on a Saturday starts counting on Monday",
"args": [
"2026-09-19",
2,
"within",
false,
[]
],
"expect": {
"date": "2026-09-22",
"shortPeriod": true,
"extended": false
}
},
{
"name": "1 day within, from a Friday: Monday",
"args": [
"2026-09-18",
1,
"within",
false,
[]
],
"expect": {
"date": "2026-09-21",
"shortPeriod": true,
"extended": false
}
},
{
"name": "zero days is an error",
"args": [
"2026-09-18",
0,
"within",
false,
[]
],
"expectError": "days must be an integer of at least 1"
},
{
"name": "CPR 2.8(5) cannot move a before-deadline later",
"args": [
"2026-09-24",
3,
"at-least-before",
true,
[]
],
"expectError": "atCourtOffice applies only to a within period"
},
{
"name": "closed days without atCourtOffice are an error, not ignored",
"args": [
"2026-09-01",
14,
"within",
false,
[
"2026-09-15"
]
],
"expectError": "courtClosedDays only apply when atCourtOffice is true"
},
{
"name": "a short period in a year without published bank holidays is an error",
"args": [
"2029-03-01",
3,
"within",
false,
[]
],
"expectError": "no bank holiday data"
},
{
"name": "an impossible trigger date is an error",
"args": [
"2026-02-30",
3,
"within",
false,
[]
],
"expectError": "not a real calendar date"
},
{
"name": "an unknown rule is an error",
"args": [
"2026-09-18",
3,
"by",
false,
[]
],
"expectError": "unknown deadline rule"
}
]