Functional Weave
Code in Rust

retail.refund-calculate@1.0.0

vectors.json

9,237 bytes · view raw

[
  {"name": "one of three teas, with its share of a 5.00 coupon", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 500, "currency": "GBP"}, [{"line": 0, "quantity": 1}]], "expect": {"lines": [{"line": 0, "sku": "TEA", "quantity": 1, "paid": {"minor": 1286, "currency": "GBP"}, "amount": {"minor": 429, "currency": "GBP"}}], "total": {"minor": 429, "currency": "GBP"}}},
  {"name": "a single mug refunds its whole paid price", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 500, "currency": "GBP"}, [{"line": 1, "quantity": 1}]], "expect": {"lines": [{"line": 1, "sku": "MUG", "quantity": 1, "paid": {"minor": 686, "currency": "GBP"}, "amount": {"minor": 686, "currency": "GBP"}}], "total": {"minor": 686, "currency": "GBP"}}},
  {"name": "one of two books; the coupon's spare penny went to the book line", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 500, "currency": "GBP"}, [{"line": 2, "quantity": 1}]], "expect": {"lines": [{"line": 2, "sku": "BOOK", "quantity": 1, "paid": {"minor": 1028, "currency": "GBP"}, "amount": {"minor": 514, "currency": "GBP"}}], "total": {"minor": 514, "currency": "GBP"}}},
  {"name": "returning everything refunds exactly what was paid", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 500, "currency": "GBP"}, [{"line": 0, "quantity": 3}, {"line": 1, "quantity": 1}, {"line": 2, "quantity": 2}]], "expect": {"lines": [{"line": 0, "sku": "TEA", "quantity": 3, "paid": {"minor": 1286, "currency": "GBP"}, "amount": {"minor": 1286, "currency": "GBP"}}, {"line": 1, "sku": "MUG", "quantity": 1, "paid": {"minor": 686, "currency": "GBP"}, "amount": {"minor": 686, "currency": "GBP"}}, {"line": 2, "sku": "BOOK", "quantity": 2, "paid": {"minor": 1028, "currency": "GBP"}, "amount": {"minor": 1028, "currency": "GBP"}}], "total": {"minor": 3000, "currency": "GBP"}}},
  {"name": "the second tea of three, after one came back earlier", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 1}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 500, "currency": "GBP"}, [{"line": 0, "quantity": 1}]], "expect": {"lines": [{"line": 0, "sku": "TEA", "quantity": 1, "paid": {"minor": 1286, "currency": "GBP"}, "amount": {"minor": 428, "currency": "GBP"}}], "total": {"minor": 428, "currency": "GBP"}}},
  {"name": "the last tea: 4.29 + 4.28 + 4.29 is exactly 12.86", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 2}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 500, "currency": "GBP"}, [{"line": 0, "quantity": 1}]], "expect": {"lines": [{"line": 0, "sku": "TEA", "quantity": 1, "paid": {"minor": 1286, "currency": "GBP"}, "amount": {"minor": 429, "currency": "GBP"}}], "total": {"minor": 429, "currency": "GBP"}}},
  {"name": "returns are listed in the order given", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 500, "currency": "GBP"}, [{"line": 2, "quantity": 1}, {"line": 0, "quantity": 2}]], "expect": {"lines": [{"line": 2, "sku": "BOOK", "quantity": 1, "paid": {"minor": 1028, "currency": "GBP"}, "amount": {"minor": 514, "currency": "GBP"}}, {"line": 0, "sku": "TEA", "quantity": 2, "paid": {"minor": 1286, "currency": "GBP"}, "amount": {"minor": 857, "currency": "GBP"}}], "total": {"minor": 1371, "currency": "GBP"}}},
  {"name": "no basket discount refunds the line net share", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 0, "currency": "GBP"}, [{"line": 0, "quantity": 1}]], "expect": {"lines": [{"line": 0, "sku": "TEA", "quantity": 1, "paid": {"minor": 1500, "currency": "GBP"}, "amount": {"minor": 500, "currency": "GBP"}}], "total": {"minor": 500, "currency": "GBP"}}},
  {"name": "nothing returned refunds nothing", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 500, "currency": "GBP"}, []], "expect": {"lines": [], "total": {"minor": 0, "currency": "GBP"}}},
  {"name": "a discount equal to the whole basket leaves nothing to refund", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 3500, "currency": "GBP"}, [{"line": 1, "quantity": 1}]], "expect": {"lines": [{"line": 1, "sku": "MUG", "quantity": 1, "paid": {"minor": 0, "currency": "GBP"}, "amount": {"minor": 0, "currency": "GBP"}}], "total": {"minor": 0, "currency": "GBP"}}},
  {"name": "returning more than is left is an error", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 2}], {"minor": 0, "currency": "GBP"}, [{"line": 0, "quantity": 2}]], "expectError": "cannot return 2 of line 0: 3 bought, 2 already returned"},
  {"name": "an unknown line is an error", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 0, "currency": "GBP"}, [{"line": 5, "quantity": 1}]], "expectError": "no line 5 in the sale"},
  {"name": "the same line twice in one return is an error", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 0, "currency": "GBP"}, [{"line": 0, "quantity": 1}, {"line": 0, "quantity": 1}]], "expectError": "line 0 is returned twice in one refund"},
  {"name": "a discount bigger than the basket is an error", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 4000, "currency": "GBP"}, [{"line": 0, "quantity": 1}]], "expectError": "basketDiscount 4000 is more than the lines' total 3500"},
  {"name": "a discount in another currency is an error", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 500, "currency": "EUR"}, [{"line": 0, "quantity": 1}]], "expectError": "currency mismatch: GBP and EUR"},
  {"name": "a zero return quantity is an error", "args": [[{"sku": "TEA", "quantity": 3, "net": {"minor": 1500, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "MUG", "quantity": 1, "net": {"minor": 800, "currency": "GBP"}, "returnedBefore": 0}, {"sku": "BOOK", "quantity": 2, "net": {"minor": 1200, "currency": "GBP"}, "returnedBefore": 0}], {"minor": 0, "currency": "GBP"}, [{"line": 0, "quantity": 0}]], "expectError": "return quantity must be 1 or more"}
]