Functional Weave
Code in TypeScript

property.deposit-cap@1.0.2

vectors.json

6,350 bytes · view raw

[
 {
  "name": "£1,000 a month: five weeks is £1,153.84 (rounded down from £1,153.846)",
  "args": [
   {
    "minor": 100000,
    "currency": "GBP"
   },
   "monthly",
   "england",
   "2026-09-01"
  ],
  "expect": {
   "annualRent": {
    "minor": 1200000,
    "currency": "GBP"
   },
   "weeklyRent": {
    "minor": 23076,
    "currency": "GBP"
   },
   "weeks": 5,
   "maximum": {
    "minor": 115384,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "£240 a week: five weeks is exactly £1,200 (the guidance's joint-tenancy example)",
  "args": [
   {
    "minor": 24000,
    "currency": "GBP"
   },
   "weekly",
   "england",
   "2026-09-01"
  ],
  "expect": {
   "annualRent": {
    "minor": 1248000,
    "currency": "GBP"
   },
   "weeklyRent": {
    "minor": 24000,
    "currency": "GBP"
   },
   "weeks": 5,
   "maximum": {
    "minor": 120000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "£4,166.66 a month is £49,999.92 a year: still five weeks",
  "args": [
   {
    "minor": 416666,
    "currency": "GBP"
   },
   "monthly",
   "england",
   "2026-09-01"
  ],
  "expect": {
   "annualRent": {
    "minor": 4999992,
    "currency": "GBP"
   },
   "weeklyRent": {
    "minor": 96153,
    "currency": "GBP"
   },
   "weeks": 5,
   "maximum": {
    "minor": 480768,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "£4,166.67 a month is £50,000.04 a year: six weeks",
  "args": [
   {
    "minor": 416667,
    "currency": "GBP"
   },
   "monthly",
   "england",
   "2026-09-01"
  ],
  "expect": {
   "annualRent": {
    "minor": 5000004,
    "currency": "GBP"
   },
   "weeklyRent": {
    "minor": 96153,
    "currency": "GBP"
   },
   "weeks": 6,
   "maximum": {
    "minor": 576923,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "exactly £50,000 a year is six weeks, not five",
  "args": [
   {
    "minor": 5000000,
    "currency": "GBP"
   },
   "annual",
   "england",
   "2026-09-01"
  ],
  "expect": {
   "annualRent": {
    "minor": 5000000,
    "currency": "GBP"
   },
   "weeklyRent": {
    "minor": 96153,
    "currency": "GBP"
   },
   "weeks": 6,
   "maximum": {
    "minor": 576923,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "£49,999.99 a year is five weeks",
  "args": [
   {
    "minor": 4999999,
    "currency": "GBP"
   },
   "annual",
   "england",
   "2026-09-01"
  ],
  "expect": {
   "annualRent": {
    "minor": 4999999,
    "currency": "GBP"
   },
   "weeklyRent": {
    "minor": 96153,
    "currency": "GBP"
   },
   "weeks": 5,
   "maximum": {
    "minor": 480769,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "£961.54 a week (£50,000.08 a year): six weeks, exactly 6 × weekly",
  "args": [
   {
    "minor": 96154,
    "currency": "GBP"
   },
   "weekly",
   "england",
   "2026-09-01"
  ],
  "expect": {
   "annualRent": {
    "minor": 5000008,
    "currency": "GBP"
   },
   "weeklyRent": {
    "minor": 96154,
    "currency": "GBP"
   },
   "weeks": 6,
   "maximum": {
    "minor": 576924,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "£961.53 a week (£49,999.56 a year): five weeks",
  "args": [
   {
    "minor": 96153,
    "currency": "GBP"
   },
   "weekly",
   "england",
   "2026-09-01"
  ],
  "expect": {
   "annualRent": {
    "minor": 4999956,
    "currency": "GBP"
   },
   "weeklyRent": {
    "minor": 96153,
    "currency": "GBP"
   },
   "weeks": 5,
   "maximum": {
    "minor": 480765,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "the cap is not five times the rounded weekly rent: £1,250 a month",
  "args": [
   {
    "minor": 125000,
    "currency": "GBP"
   },
   "monthly",
   "england",
   "2026-09-01"
  ],
  "expect": {
   "annualRent": {
    "minor": 1500000,
    "currency": "GBP"
   },
   "weeklyRent": {
    "minor": 28846,
    "currency": "GBP"
   },
   "weeks": 5,
   "maximum": {
    "minor": 144230,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "zero rent: zero deposit",
  "args": [
   {
    "minor": 0,
    "currency": "GBP"
   },
   "monthly",
   "england",
   "2026-09-01"
  ],
  "expect": {
   "annualRent": {
    "minor": 0,
    "currency": "GBP"
   },
   "weeklyRent": {
    "minor": 0,
    "currency": "GBP"
   },
   "weeks": 5,
   "maximum": {
    "minor": 0,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "the first day of the cap, 1 June 2019",
  "args": [
   {
    "minor": 100000,
    "currency": "GBP"
   },
   "monthly",
   "england",
   "2019-06-01"
  ],
  "expect": {
   "annualRent": {
    "minor": 1200000,
    "currency": "GBP"
   },
   "weeklyRent": {
    "minor": 23076,
    "currency": "GBP"
   },
   "weeks": 5,
   "maximum": {
    "minor": 115384,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "before 1 June 2019 there is no cap to apply",
  "args": [
   {
    "minor": 100000,
    "currency": "GBP"
   },
   "monthly",
   "england",
   "2019-05-31"
  ],
  "expectError": "no deposit cap rule for england on 2019-05-31"
 },
 {
  "name": "no data for Scotland",
  "args": [
   {
    "minor": 100000,
    "currency": "GBP"
   },
   "monthly",
   "scotland",
   "2026-09-01"
  ],
  "expectError": "no deposit cap rule for scotland"
 },
 {
  "name": "rent in euros is refused",
  "args": [
   {
    "minor": 100000,
    "currency": "EUR"
   },
   "monthly",
   "england",
   "2026-09-01"
  ],
  "expectError": "rent must be in GBP"
 },
 {
  "name": "negative rent is refused",
  "args": [
   {
    "minor": -1,
    "currency": "GBP"
   },
   "monthly",
   "england",
   "2026-09-01"
  ],
  "expectError": "rent must not be negative"
 },
 {
  "name": "an unknown rent period is refused",
  "args": [
   {
    "minor": 100000,
    "currency": "GBP"
   },
   "fortnightly",
   "england",
   "2026-09-01"
  ],
  "expectError": "unknown rent period"
 },
 {
  "name": "a malformed date is refused",
  "args": [
   {
    "minor": 100000,
    "currency": "GBP"
   },
   "monthly",
   "england",
   "1/6/2019"
  ],
  "expectError": "onDate must be an ISO date"
 },
 {
  "name": "a trailing newline is not part of an ISO date",
  "args": [
   {
    "minor": 100000,
    "currency": "GBP"
   },
   "monthly",
   "england",
   "2026-09-01\n"
  ],
  "expectError": "onDate must be an ISO date"
 },
 {
  "name": "Arabic-Indic digits are not an ISO date",
  "args": [
   {
    "minor": 100000,
    "currency": "GBP"
   },
   "monthly",
   "england",
   "٢٠٢٦-٠٩-٠١"
  ],
  "expectError": "onDate must be an ISO date"
 }
]