From 0a50941c359da2a45e9d6bec71a60b140087547f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexis=20M=C3=A9taireau?= Date: Thu, 26 Dec 2024 13:39:35 +0100 Subject: [PATCH] Update tests to work with the new statistics --- ihatemoney/tests/api_test.py | 15 +++-- ihatemoney/tests/budget_test.py | 99 +++++++++++++++++++++------------ 2 files changed, 74 insertions(+), 40 deletions(-) diff --git a/ihatemoney/tests/api_test.py b/ihatemoney/tests/api_test.py index c676e3e32..40054f75f 100644 --- a/ihatemoney/tests/api_test.py +++ b/ihatemoney/tests/api_test.py @@ -814,7 +814,8 @@ def test_statistics(self): "/api/projects/raclette/statistics", headers=self.get_auth("raclette") ) self.assertStatus(200, req) - assert [ + received_stats = json.loads(req.data.decode("utf-8")) + assert received_stats == [ { "balance": 12.5, "member": { @@ -824,7 +825,9 @@ def test_statistics(self): "weight": 1.0, }, "paid": 25.0, - "spent": 12.5, + "received": 0.0, + "spent": -12.5, + "transferred": 0.0, }, { "balance": -12.5, @@ -834,10 +837,12 @@ def test_statistics(self): "name": "jeanne", "weight": 1.0, }, - "paid": 0, - "spent": 12.5, + "paid": 0.0, + "received": 0.0, + "spent": -12.5, + "transferred": 0.0, }, - ] == json.loads(req.data.decode("utf-8")) + ] def test_username_xss(self): # create a project diff --git a/ihatemoney/tests/budget_test.py b/ihatemoney/tests/budget_test.py index a3fc813f8..b14781bb2 100644 --- a/ihatemoney/tests/budget_test.py +++ b/ihatemoney/tests/budget_test.py @@ -790,15 +790,18 @@ def test_reimbursement_bill(self): self.client.post("/rent/members/add", data={"name": "bob"}) self.client.post("/rent/members/add", data={"name": "alice"}) - members_ids = [m.id for m in self.get_project("rent").members] - # create a bill to test reimbursement + everybody = [m.id for m in self.get_project("rent").members] + bob = everybody[0] + alice = everybody[1] + + # create a bill self.client.post( "/rent/add", data={ "date": "2022-12-12", "what": "december rent", - "payer": members_ids[0], # bob - "payed_for": members_ids, # bob and alice + "payer": bob, + "payed_for": everybody, "bill_type": "Expense", "amount": "1000", }, @@ -806,32 +809,40 @@ def test_reimbursement_bill(self): # check balance balance = self.get_project("rent").balance assert set(balance.values()), set([500 == -500]) - # check paid - bob_paid = self.get_project("rent").full_balance[2][members_ids[0]] - alice_paid = self.get_project("rent").full_balance[2][members_ids[1]] + + project = self.get_project("rent") + bob_paid = project.full_balance[2][bob] + alice_paid = project.full_balance[2][alice] assert bob_paid == 1000 assert alice_paid == 0 - # test reimbursement bill + # reimbursement bill self.client.post( "/rent/add", data={ "date": "2022-12-13", "what": "reimbursement for rent", - "payer": members_ids[1], # alice - "payed_for": members_ids[0], # bob + "payer": alice, + "payed_for": bob, "bill_type": "Reimbursement", "amount": "500", }, ) - balance = self.get_project("rent").balance + balance = project.balance assert set(balance.values()), set([0 == 0]) - # check paid - bob_paid = self.get_project("rent").full_balance[2][members_ids[0]] - alice_paid = self.get_project("rent").full_balance[2][members_ids[1]] - assert bob_paid == 500 - assert alice_paid == 500 + + # After the reimbursement, the full balance should be populated with + # transfer items + bob_paid = project.full_balance[2][bob] + alice_paid = project.full_balance[2][alice] + assert bob_paid == 1000 + assert alice_paid == 0 + + bob_received = project.full_balance[4][bob] + alice_transferred = project.full_balance[3][alice] + assert bob_received == 500 + assert alice_transferred == 500 def test_weighted_balance(self): self.post_project("raclette") @@ -1069,14 +1080,25 @@ def test_statistics(self): assert len(project.active_months_range()) == 0 assert len(project.monthly_stats) == 0 - # Check that the "monthly expenses" table is empty + # Check that the "monthly expenses" table exists + # and is empty. response = self.client.get("/raclette/statistics") + regex = ( - r"\s*\s*\s*\s*" - r"\s*\s*\s*\s*\s*
PeriodSpent
" + r'\n' + r" \n" + r" \n" + r" \n" + r" \n" + r" \n" + r" \n" + r" \n" + r" \n" + r" \n" + r"
PeriodExpenses
" ) - assert re.search(regex, response.data.decode("utf-8")) + assert re.search(regex, response.data.decode("utf-8")) # create bills self.client.post( "/raclette/add", @@ -1115,22 +1137,29 @@ def test_statistics(self): ) response = self.client.get("/raclette/statistics") - regex = r"{}\s*{}\s*{}" - assert re.search( - regex.format("zorglub", r"\$20\.00", r"\$31\.67"), - response.data.decode("utf-8"), - ) - assert re.search( - regex.format("jeanne", r"\$20\.00", r"\$5\.83"), - response.data.decode("utf-8"), - ) - assert re.search( - regex.format("tata", r"\$0\.00", r"\$2\.50"), response.data.decode("utf-8") - ) - assert re.search( - regex.format("pépé", r"\$0\.00", r"\$0\.00"), response.data.decode("utf-8") - ) + html = response.data.decode("utf-8") + + def stat_entry(name, paid, spent, transferred=None, received=None): + return ( + f'{name}\n' + f" {paid}\n" + f" {spent}\n" + # f" ${spent}\n" + # f" ${transferred}" + ) + + # set_trace() + + # regex = ( + # r'\s*{}\n' + # r"\s*{}\n" + # r"\s*{}\n" + # ) + assert stat_entry("zorglub", "$20.00", "-$31.67") in html + assert stat_entry("jeanne", "$20.00", "-$5.83") in html + assert stat_entry("tata", "$0.00", "-$2.50") in html + assert stat_entry("pépé", "$0.00", "-$0.00") in html # Check that the order of participants in the sidebar table is the # same as in the main table. order = ["jeanne", "pépé", "tata", "zorglub"]