Functional Weave
Code in TypeScript

education.school-year-group@1.0.1

vectors.json

5,751 bytes · view raw

[
 {
  "name": "England: born 1 September 2020, the oldest in Reception in 2025/26",
  "args": [
   "2020-09-01",
   "2025-09-15",
   "england"
  ],
  "expect": {
   "schoolYearStart": "2025-09-01",
   "entryYear": 2025,
   "index": 0,
   "yearGroup": "Reception",
   "stage": "primary"
  }
 },
 {
  "name": "England: born 31 August 2021, the youngest in the same Reception class",
  "args": [
   "2021-08-31",
   "2025-09-15",
   "england"
  ],
  "expect": {
   "schoolYearStart": "2025-09-01",
   "entryYear": 2025,
   "index": 0,
   "yearGroup": "Reception",
   "stage": "primary"
  }
 },
 {
  "name": "England: born a day earlier, 31 August 2020, is a year ahead in Year 1",
  "args": [
   "2020-08-31",
   "2025-09-15",
   "england"
  ],
  "expect": {
   "schoolYearStart": "2025-09-01",
   "entryYear": 2024,
   "index": 1,
   "yearGroup": "Year 1",
   "stage": "primary"
  }
 },
 {
  "name": "England: 31 August is still the previous school year, before Reception",
  "args": [
   "2020-09-01",
   "2025-08-31",
   "england"
  ],
  "expect": {
   "schoolYearStart": "2024-09-01",
   "entryYear": 2025,
   "index": -1,
   "yearGroup": null,
   "stage": null
  }
 },
 {
  "name": "England: Year 7 is secondary",
  "args": [
   "2014-01-15",
   "2025-11-01",
   "england"
  ],
  "expect": {
   "schoolYearStart": "2025-09-01",
   "entryYear": 2018,
   "index": 7,
   "yearGroup": "Year 7",
   "stage": "secondary"
  }
 },
 {
  "name": "England: Year 13, the last year",
  "args": [
   "2008-01-15",
   "2026-03-01",
   "england"
  ],
  "expect": {
   "schoolYearStart": "2025-09-01",
   "entryYear": 2012,
   "index": 13,
   "yearGroup": "Year 13",
   "stage": "secondary"
  }
 },
 {
  "name": "England: after Year 13 there is no year group",
  "args": [
   "2007-01-15",
   "2026-03-01",
   "england"
  ],
  "expect": {
   "schoolYearStart": "2025-09-01",
   "entryYear": 2011,
   "index": 14,
   "yearGroup": null,
   "stage": null
  }
 },
 {
  "name": "Wales uses the same cut-off and names",
  "args": [
   "2019-02-10",
   "2026-01-10",
   "wales"
  ],
  "expect": {
   "schoolYearStart": "2025-09-01",
   "entryYear": 2023,
   "index": 2,
   "yearGroup": "Year 2",
   "stage": "primary"
  }
 },
 {
  "name": "Scotland: born 1 March 2020 starts P1 in August 2025",
  "args": [
   "2020-03-01",
   "2025-08-20",
   "scotland"
  ],
  "expect": {
   "schoolYearStart": "2025-08-01",
   "entryYear": 2025,
   "index": 0,
   "yearGroup": "P1",
   "stage": "primary"
  }
 },
 {
  "name": "Scotland: born 28 February 2021 is in the same P1",
  "args": [
   "2021-02-28",
   "2025-08-20",
   "scotland"
  ],
  "expect": {
   "schoolYearStart": "2025-08-01",
   "entryYear": 2025,
   "index": 0,
   "yearGroup": "P1",
   "stage": "primary"
  }
 },
 {
  "name": "Scotland: born 29 February 2020 belongs to the year before, P2, though aged like the 1 March children",
  "args": [
   "2020-02-29",
   "2025-08-20",
   "scotland"
  ],
  "expect": {
   "schoolYearStart": "2025-08-01",
   "entryYear": 2024,
   "index": 1,
   "yearGroup": "P2",
   "stage": "primary"
  }
 },
 {
  "name": "Scotland: July is still the previous session",
  "args": [
   "2020-03-01",
   "2025-07-31",
   "scotland"
  ],
  "expect": {
   "schoolYearStart": "2024-08-01",
   "entryYear": 2025,
   "index": -1,
   "yearGroup": null,
   "stage": null
  }
 },
 {
  "name": "Scotland: S1 is secondary",
  "args": [
   "2013-06-01",
   "2025-10-01",
   "scotland"
  ],
  "expect": {
   "schoolYearStart": "2025-08-01",
   "entryYear": 2018,
   "index": 7,
   "yearGroup": "S1",
   "stage": "secondary"
  }
 },
 {
  "name": "Scotland: S6 is the last year",
  "args": [
   "2008-05-01",
   "2026-05-01",
   "scotland"
  ],
  "expect": {
   "schoolYearStart": "2025-08-01",
   "entryYear": 2013,
   "index": 12,
   "yearGroup": "S6",
   "stage": "secondary"
  }
 },
 {
  "name": "Northern Ireland: 4 on 1 July 2025 starts P1 in September 2025",
  "args": [
   "2021-07-01",
   "2025-09-10",
   "northern-ireland"
  ],
  "expect": {
   "schoolYearStart": "2025-09-01",
   "entryYear": 2025,
   "index": 0,
   "yearGroup": "P1",
   "stage": "primary"
  }
 },
 {
  "name": "Northern Ireland: 4 on 2 July 2025 waits a year",
  "args": [
   "2021-07-02",
   "2025-09-10",
   "northern-ireland"
  ],
  "expect": {
   "schoolYearStart": "2025-09-01",
   "entryYear": 2026,
   "index": -1,
   "yearGroup": null,
   "stage": null
  }
 },
 {
  "name": "Northern Ireland: secondary years are numbered on from primary",
  "args": [
   "2011-12-01",
   "2025-10-01",
   "northern-ireland"
  ],
  "expect": {
   "schoolYearStart": "2025-09-01",
   "entryYear": 2016,
   "index": 9,
   "yearGroup": "Year 10",
   "stage": "secondary"
  }
 },
 {
  "name": "Northern Ireland: Year 14, the last year",
  "args": [
   "2008-03-01",
   "2026-03-01",
   "northern-ireland"
  ],
  "expect": {
   "schoolYearStart": "2025-09-01",
   "entryYear": 2012,
   "index": 13,
   "yearGroup": "Year 14",
   "stage": "secondary"
  }
 },
 {
  "name": "born today is years before school",
  "args": [
   "2025-09-15",
   "2025-09-15",
   "england"
  ],
  "expect": {
   "schoolYearStart": "2025-09-01",
   "entryYear": 2030,
   "index": -5,
   "yearGroup": null,
   "stage": null
  }
 },
 {
  "name": "onDate before birthDate is an error",
  "args": [
   "2020-09-01",
   "2019-09-01",
   "england"
  ],
  "expectError": "onDate 2019-09-01 is before birthDate 2020-09-01"
 },
 {
  "name": "an unknown nation is an error",
  "args": [
   "2020-09-01",
   "2025-09-15",
   "ireland"
  ],
  "expectError": "unknown nation \"ireland\""
 },
 {
  "name": "an impossible birth date is an error",
  "args": [
   "2021-02-29",
   "2025-09-15",
   "scotland"
  ],
  "expectError": "\"2021-02-29\" is not a real calendar date"
 }
]