aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/test_resolver.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/unit/test_resolver.py b/tests/unit/test_resolver.py
index 82ac30b..8c93a84 100644
--- a/tests/unit/test_resolver.py
+++ b/tests/unit/test_resolver.py
@@ -51,3 +51,36 @@ class TestResolver(unittest.TestCase):
acc = r.account_by_id("129")
self.assertEqual(acc, {"id": "129", "name": "Nexi", "type": "revenue"})
c.request.assert_called_once_with("GET", "/api/v1/accounts/129")
+
+
+def _budget_list_resp(budgets):
+ return {"data": [{"id": b["id"], "attributes": {"name": b["name"]}}
+ for b in budgets]}
+
+
+class TestResolverBudget(unittest.TestCase):
+ def test_budget_by_name(self):
+ client = MagicMock()
+ client.request.return_value = _budget_list_resp(
+ [{"id": "3", "name": "Groceries"}, {"id": "4", "name": "Rent"}])
+ r = Resolver(client)
+ self.assertEqual(r.budget("Groceries")["id"], "3")
+
+ def test_budget_missing_raises_with_candidates(self):
+ client = MagicMock()
+ client.request.return_value = _budget_list_resp([{"id": "3", "name": "Rent"}])
+ r = Resolver(client)
+ with self.assertRaises(ResolutionError) as cm:
+ r.budget("Nope")
+ self.assertIn("Rent", str(cm.exception))
+
+ def test_budget_numeric_ref_goes_by_id(self):
+ client = MagicMock()
+ client.request.return_value = {
+ "data": {"id": "7", "attributes": {"name": "Fun"}}}
+ r = Resolver(client)
+ got = r.budget("7")
+ self.assertEqual(got["id"], "7")
+ self.assertEqual(got["name"], "Fun")
+ # Must hit the show endpoint, not list.
+ client.request.assert_called_with("GET", "/api/v1/budgets/7")