aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit/test_commands_budget.py
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-07-03 17:43:28 +0200
committerDanilo M. <danix@danix.xyz>2026-07-03 17:43:28 +0200
commit5d4d393a0de8a6c429a34dc1a51cde4e703cc033 (patch)
treeaf1a83bebe3c59f6bd28487531ef4b8bb4a89c0d /tests/unit/test_commands_budget.py
parentb125853ab2e5fe3d8d0ad045609a5863e46a607a (diff)
downloadfirefly-cli-5d4d393a0de8a6c429a34dc1a51cde4e703cc033.tar.gz
firefly-cli-5d4d393a0de8a6c429a34dc1a51cde4e703cc033.zip
feat(budget): budget create
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Diffstat (limited to 'tests/unit/test_commands_budget.py')
-rw-r--r--tests/unit/test_commands_budget.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/unit/test_commands_budget.py b/tests/unit/test_commands_budget.py
index 7741840..26e9dae 100644
--- a/tests/unit/test_commands_budget.py
+++ b/tests/unit/test_commands_budget.py
@@ -32,5 +32,55 @@ class TestBudgetList(unittest.TestCase):
{"start": "2026-01-01", "end": "2026-01-31"})
+class TestBudgetCreate(unittest.TestCase):
+ def test_create_minimal_active(self):
+ client = MagicMock()
+ client.request.return_value = {"data": {"id": "9", "attributes": {"name": "Fun"}}}
+ args = SimpleNamespace(name="Fun", active=True, currency=None,
+ auto_budget_amount=None, auto_budget_period=None,
+ auto_budget_type=None)
+ rc = budget.cmd_create(args, _ctx(client=client))
+ self.assertEqual(rc, 0)
+ method, path = client.request.call_args[0][:2]
+ body = client.request.call_args[1]["body"]
+ self.assertEqual((method, path), ("POST", "/api/v1/budgets"))
+ self.assertEqual(body["name"], "Fun")
+ self.assertTrue(body["active"])
+
+ def test_create_inactive_with_auto_budget(self):
+ client = MagicMock()
+ client.request.return_value = {"data": {"id": "9", "attributes": {}}}
+ args = SimpleNamespace(name="Cap", active=False, currency="EUR",
+ auto_budget_amount="500", auto_budget_period="monthly",
+ auto_budget_type="reset")
+ budget.cmd_create(args, _ctx(client=client))
+ body = client.request.call_args[1]["body"]
+ self.assertFalse(body["active"])
+ self.assertEqual(body["auto_budget_amount"], "500")
+ self.assertEqual(body["auto_budget_type"], "reset")
+ self.assertEqual(body["currency_code"], "EUR")
+
+
+class TestBudgetSpent(unittest.TestCase):
+ def test_human_mode_replaces_spent_with_scalar(self):
+ client = MagicMock()
+ client.request.return_value = {"data": [
+ {"id": "1", "attributes": {"name": "Food",
+ "spent": [{"sum": "-12.50"}, {"sum": "-2.50"}]}}]}
+ ctx = _ctx(client=client)
+ ctx.human = True
+ captured = {}
+ import firefly_cli.output as output
+ orig = output.emit
+ def spy(data, human=False, stream=None):
+ captured["rows"] = data
+ output.emit = spy
+ try:
+ budget.cmd_list(SimpleNamespace(start=None, end=None), ctx)
+ finally:
+ output.emit = orig
+ self.assertEqual(captured["rows"][0]["spent"], "-15.00")
+
+
if __name__ == "__main__":
unittest.main()