[
{
"name": "index up 10%, no collar or cap: £55,000",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
1200,
1320,
null,
null,
true
],
"expect": {
"newRent": {
"minor": 5500000,
"currency": "GBP"
},
"indexRent": {
"minor": 5500000,
"currency": "GBP"
},
"indexChangeBasisPoints": 1000,
"appliedBy": "index"
}
},
{
"name": "index up 10% with a 4% cap: £52,000",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
1200,
1320,
200,
400,
true
],
"expect": {
"newRent": {
"minor": 5200000,
"currency": "GBP"
},
"indexRent": {
"minor": 5500000,
"currency": "GBP"
},
"indexChangeBasisPoints": 1000,
"appliedBy": "cap"
}
},
{
"name": "index up 3% between a 2% collar and 4% cap",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
1200,
1236,
200,
400,
true
],
"expect": {
"newRent": {
"minor": 5150000,
"currency": "GBP"
},
"indexRent": {
"minor": 5150000,
"currency": "GBP"
},
"indexChangeBasisPoints": 300,
"appliedBy": "index"
}
},
{
"name": "index up 1% under a 2% collar: the collar sets it",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
1200,
1212,
200,
400,
true
],
"expect": {
"newRent": {
"minor": 5100000,
"currency": "GBP"
},
"indexRent": {
"minor": 5050000,
"currency": "GBP"
},
"indexChangeBasisPoints": 100,
"appliedBy": "collar"
}
},
{
"name": "index exactly on the cap: the index sets it",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
1250,
1300,
null,
400,
true
],
"expect": {
"newRent": {
"minor": 5200000,
"currency": "GBP"
},
"indexRent": {
"minor": 5200000,
"currency": "GBP"
},
"indexChangeBasisPoints": 400,
"appliedBy": "index"
}
},
{
"name": "index falls 5%, upward-only: rent stays at £50,000",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
1320,
1254,
null,
null,
true
],
"expect": {
"newRent": {
"minor": 5000000,
"currency": "GBP"
},
"indexRent": {
"minor": 4750000,
"currency": "GBP"
},
"indexChangeBasisPoints": -500,
"appliedBy": "upward-only"
}
},
{
"name": "index falls 5%, not upward-only: rent falls to £47,500",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
1320,
1254,
null,
null,
false
],
"expect": {
"newRent": {
"minor": 4750000,
"currency": "GBP"
},
"indexRent": {
"minor": 4750000,
"currency": "GBP"
},
"indexChangeBasisPoints": -500,
"appliedBy": "index"
}
},
{
"name": "index falls 5% with a 1% collar and no upward-only: the collar still lifts it",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
1320,
1254,
100,
null,
false
],
"expect": {
"newRent": {
"minor": 5050000,
"currency": "GBP"
},
"indexRent": {
"minor": 4750000,
"currency": "GBP"
},
"indexChangeBasisPoints": -500,
"appliedBy": "collar"
}
},
{
"name": "a negative collar limits a fall to 2%",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
1320,
1254,
-200,
null,
false
],
"expect": {
"newRent": {
"minor": 4900000,
"currency": "GBP"
},
"indexRent": {
"minor": 4750000,
"currency": "GBP"
},
"indexChangeBasisPoints": -500,
"appliedBy": "collar"
}
},
{
"name": "a flat index, upward-only: unchanged, by the index",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
1200,
1200,
null,
null,
true
],
"expect": {
"newRent": {
"minor": 5000000,
"currency": "GBP"
},
"indexRent": {
"minor": 5000000,
"currency": "GBP"
},
"indexChangeBasisPoints": 0,
"appliedBy": "index"
}
},
{
"name": "applying the index, not a rounded percentage: 1200 to 1277 is £53,208.33, not £53,210.00",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
1200,
1277,
null,
null,
true
],
"expect": {
"newRent": {
"minor": 5320833,
"currency": "GBP"
},
"indexRent": {
"minor": 5320833,
"currency": "GBP"
},
"indexChangeBasisPoints": 642,
"appliedBy": "index"
}
},
{
"name": "the rent is rounded half-up once",
"args": [
{
"minor": 1234567,
"currency": "GBP"
},
1000,
1033,
null,
null,
true
],
"expect": {
"newRent": {
"minor": 1275308,
"currency": "GBP"
},
"indexRent": {
"minor": 1275308,
"currency": "GBP"
},
"indexChangeBasisPoints": 330,
"appliedBy": "index"
}
},
{
"name": "a tiny movement: 8 basis points shown, exact rent used",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
1200,
1201,
null,
null,
true
],
"expect": {
"newRent": {
"minor": 5004167,
"currency": "GBP"
},
"indexRent": {
"minor": 5004167,
"currency": "GBP"
},
"indexChangeBasisPoints": 8,
"appliedBy": "index"
}
},
{
"name": "a peppercorn stays a peppercorn",
"args": [
{
"minor": 0,
"currency": "GBP"
},
1200,
1320,
200,
400,
true
],
"expect": {
"newRent": {
"minor": 0,
"currency": "GBP"
},
"indexRent": {
"minor": 0,
"currency": "GBP"
},
"indexChangeBasisPoints": 1000,
"appliedBy": "cap"
}
},
{
"name": "a collar above the cap is refused",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
1200,
1320,
500,
400,
true
],
"expectError": "collar 500 is above cap 400"
},
{
"name": "a zero base index is refused",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
0,
1320,
null,
null,
true
],
"expectError": "baseIndex must be an integer from 1 to"
},
{
"name": "a fractional index is refused",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
128.4,
133.9,
null,
null,
true
],
"expectError": "baseIndex must be an integer from 1 to"
},
{
"name": "a negative rent is refused",
"args": [
{
"minor": -1,
"currency": "GBP"
},
1200,
1320,
null,
null,
true
],
"expectError": "passingRent must be between 0 and"
},
{
"name": "a cap of -100% is refused",
"args": [
{
"minor": 5000000,
"currency": "GBP"
},
1200,
1320,
null,
-10000,
true
],
"expectError": "capBasisPoints must be an integer from -9999 to 100000"
}
]