whisper-money/tests/Fixtures/rule-engine-parity.json

81 lines
3.9 KiB
JSON

[
{
"name": "in operator matches description",
"rule": { "in": ["grocery", { "var": "description" }] },
"transaction": { "description": "Grocery Store Purchase", "amount": -50, "creditor_name": null, "debtor_name": null, "notes": null },
"expected": true
},
{
"name": "in operator does not match unrelated description",
"rule": { "in": ["grocery", { "var": "description" }] },
"transaction": { "description": "Coffee Shop Downtown", "amount": -50, "creditor_name": null, "debtor_name": null, "notes": null },
"expected": false
},
{
"name": "in operator matches creditor_name",
"rule": { "in": ["amazon", { "var": "creditor_name" }] },
"transaction": { "description": "Card payment", "amount": -50, "creditor_name": "Amazon EU", "debtor_name": null, "notes": null },
"expected": true
},
{
"name": "in operator does not match unrelated creditor_name",
"rule": { "in": ["ikea", { "var": "creditor_name" }] },
"transaction": { "description": "Card payment", "amount": -50, "creditor_name": "Amazon EU", "debtor_name": null, "notes": null },
"expected": false
},
{
"name": "in operator matches debtor_name",
"rule": { "in": ["payroll", { "var": "debtor_name" }] },
"transaction": { "description": "Incoming transfer", "amount": 5000, "creditor_name": null, "debtor_name": "Payroll GmbH", "notes": null },
"expected": true
},
{
"name": "equals operator matches exact lowercased description",
"rule": { "==": [{ "var": "description" }, "salary payment"] },
"transaction": { "description": "Salary Payment", "amount": 1000, "creditor_name": null, "debtor_name": null, "notes": null },
"expected": true
},
{
"name": "rule value is matched case-insensitively",
"rule": { "in": ["GROCERY", { "var": "description" }] },
"transaction": { "description": "grocery store", "amount": -30, "creditor_name": null, "debtor_name": null, "notes": null },
"expected": true
},
{
"name": "description whitespace is normalized before matching",
"rule": { "in": ["grocery store", { "var": "description" }] },
"transaction": { "description": " Grocery Store Purchase ", "amount": -30, "creditor_name": null, "debtor_name": null, "notes": null },
"expected": true
},
{
"name": "in operator matches notes",
"rule": { "in": ["reimburse", { "var": "notes" }] },
"transaction": { "description": "Bank transfer", "amount": 200, "creditor_name": null, "debtor_name": null, "notes": "Please Reimburse Me" },
"expected": true
},
{
"name": "greater than amount comparison uses dollars",
"rule": { ">": [{ "var": "amount" }, 50] },
"transaction": { "description": "Salary", "amount": 100, "creditor_name": null, "debtor_name": null, "notes": null },
"expected": true
},
{
"name": "greater than amount comparison fails below threshold",
"rule": { ">": [{ "var": "amount" }, 200] },
"transaction": { "description": "Small purchase", "amount": 50, "creditor_name": null, "debtor_name": null, "notes": null },
"expected": false
},
{
"name": "compound and rule matches when both conditions hold",
"rule": { "and": [{ "in": ["grocery", { "var": "description" }] }, { "<": [{ "var": "amount" }, 0] }] },
"transaction": { "description": "Grocery Store", "amount": -50, "creditor_name": null, "debtor_name": null, "notes": null },
"expected": true
},
{
"name": "compound and rule fails when one condition fails",
"rule": { "and": [{ "in": ["grocery", { "var": "description" }] }, { ">": [{ "var": "amount" }, 0] }] },
"transaction": { "description": "Grocery Store", "amount": -50, "creditor_name": null, "debtor_name": null, "notes": null },
"expected": false
}
]