diff options
| author | Danilo M. <danix@danix.xyz> | 2026-07-03 17:43:28 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-07-03 17:43:28 +0200 |
| commit | 5d4d393a0de8a6c429a34dc1a51cde4e703cc033 (patch) | |
| tree | af1a83bebe3c59f6bd28487531ef4b8bb4a89c0d /tests/unit/test_commands_budget.py | |
| parent | b125853ab2e5fe3d8d0ad045609a5863e46a607a (diff) | |
| download | firefly-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.py | 50 |
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() |
