[
{"name": "£1 at 20% is 25p", "args": [{"minor": 100, "currency": "GBP"}, "2026-09-23"], "expect": {"donation": {"minor": 100, "currency": "GBP"}, "taxReclaimable": {"minor": 25, "currency": "GBP"}, "gross": {"minor": 125, "currency": "GBP"}, "basicRateBasisPoints": 2000}},
{"name": "£100 is £25 of Gift Aid, £125 gross", "args": [{"minor": 10000, "currency": "GBP"}, "2025-01-10"], "expect": {"donation": {"minor": 10000, "currency": "GBP"}, "taxReclaimable": {"minor": 2500, "currency": "GBP"}, "gross": {"minor": 12500, "currency": "GBP"}, "basicRateBasisPoints": 2000}},
{"name": "£10.01 gives 250.25p, rounded down to 250p, not up", "args": [{"minor": 1001, "currency": "GBP"}, "2026-04-06"], "expect": {"donation": {"minor": 1001, "currency": "GBP"}, "taxReclaimable": {"minor": 250, "currency": "GBP"}, "gross": {"minor": 1251, "currency": "GBP"}, "basicRateBasisPoints": 2000}},
{"name": "3p gives 0.75p, rounded down to 0", "args": [{"minor": 3, "currency": "GBP"}, "2026-04-06"], "expect": {"donation": {"minor": 3, "currency": "GBP"}, "taxReclaimable": {"minor": 0, "currency": "GBP"}, "gross": {"minor": 3, "currency": "GBP"}, "basicRateBasisPoints": 2000}},
{"name": "a zero donation claims nothing", "args": [{"minor": 0, "currency": "GBP"}, "2026-04-06"], "expect": {"donation": {"minor": 0, "currency": "GBP"}, "taxReclaimable": {"minor": 0, "currency": "GBP"}, "gross": {"minor": 0, "currency": "GBP"}, "basicRateBasisPoints": 2000}},
{"name": "2007-08 at 22%: £10 is 22/78, 282.05p rounded down to 282p (not 25%)", "args": [{"minor": 1000, "currency": "GBP"}, "2008-04-05"], "expect": {"donation": {"minor": 1000, "currency": "GBP"}, "taxReclaimable": {"minor": 282, "currency": "GBP"}, "gross": {"minor": 1282, "currency": "GBP"}, "basicRateBasisPoints": 2200}},
{"name": "6 April 2008 is the first day of the 20% basic rate", "args": [{"minor": 1000, "currency": "GBP"}, "2008-04-06"], "expect": {"donation": {"minor": 1000, "currency": "GBP"}, "taxReclaimable": {"minor": 250, "currency": "GBP"}, "gross": {"minor": 1250, "currency": "GBP"}, "basicRateBasisPoints": 2000}},
{"name": "£78 at 22% is exactly £22", "args": [{"minor": 7800, "currency": "GBP"}, "2007-04-06"], "expect": {"donation": {"minor": 7800, "currency": "GBP"}, "taxReclaimable": {"minor": 2200, "currency": "GBP"}, "gross": {"minor": 10000, "currency": "GBP"}, "basicRateBasisPoints": 2200}},
{"name": "a large donation: £1,000,000 is £250,000", "args": [{"minor": 100000000, "currency": "GBP"}, "2026-04-06"], "expect": {"donation": {"minor": 100000000, "currency": "GBP"}, "taxReclaimable": {"minor": 25000000, "currency": "GBP"}, "gross": {"minor": 125000000, "currency": "GBP"}, "basicRateBasisPoints": 2000}},
{"name": "a date before the rates on file is an error", "args": [{"minor": 1000, "currency": "GBP"}, "2007-04-05"], "expectError": "no Gift Aid basic rate on 2007-04-05"},
{"name": "a euro donation is an error", "args": [{"minor": 1000, "currency": "EUR"}, "2026-04-06"], "expectError": "Gift Aid is claimed in GBP, received EUR"},
{"name": "a negative donation is an error", "args": [{"minor": -100, "currency": "GBP"}, "2026-04-06"], "expectError": "donation must not be negative"},
{"name": "a malformed date is an error", "args": [{"minor": 100, "currency": "GBP"}, "6/4/2026"], "expectError": "onDate must be an ISO date"},
{"name": "a trailing newline after onDate is not an ISO date", "args": [{"minor": 100, "currency": "GBP"}, "2026-09-16\n"], "expectError": "onDate must be an ISO date"},
{"name": "Arabic-Indic digits in onDate are not an ISO date", "args": [{"minor": 100, "currency": "GBP"}, "٢٠٢٦-09-16"], "expectError": "onDate must be an ISO date"}
]