From ac4e68ff2dfa30150c429d7699a2a32661149652 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexis=20M=C3=A9taireau?= Date: Sat, 11 Nov 2023 21:09:55 +0100 Subject: [PATCH 1/4] Replace Fred by Jeanne in tests and examples --- docs/api.md | 4 +- ihatemoney/tests/api_test.py | 38 +++++++------- ihatemoney/tests/budget_test.py | 73 +++++++++++++------------- ihatemoney/tests/import_test.py | 90 ++++++++++++++++++--------------- ihatemoney/tests/main_test.py | 4 +- 5 files changed, 111 insertions(+), 98 deletions(-) diff --git a/docs/api.md b/docs/api.md index 0ae34073e..a24dd9295 100644 --- a/docs/api.md +++ b/docs/api.md @@ -133,7 +133,7 @@ You can get all the members with a `GET` on [{"weight": 1, "activated": true, "id": 31, "name": "Arnaud"}, {"weight": 1, "activated": true, "id": 32, "name": "Alexis"}, {"weight": 1, "activated": true, "id": 33, "name": "Olivier"}, - {"weight": 1, "activated": true, "id": 34, "name": "Fred"}] + {"weight": 1, "activated": true, "id": 34, "name": "Jeanne"}] Add a member with a `POST` request on `/api/projects//members`: @@ -244,7 +244,7 @@ You can get some project stats with a `GET` on "balance": 10.5 }, { - "member": {"activated": true, "id": 2, "name": "fred", "weight": 1.0}, + "member": {"activated": true, "id": 2, "name": "jeanne", "weight": 1.0}, "paid": 5, "spent": 15.5, "balance": -10.5 diff --git a/ihatemoney/tests/api_test.py b/ihatemoney/tests/api_test.py index 9d70e8e69..13477adab 100644 --- a/ihatemoney/tests/api_test.py +++ b/ihatemoney/tests/api_test.py @@ -314,7 +314,7 @@ def test_member(self): # edit the participant req = self.client.put( "/api/projects/raclette/members/1", - data={"name": "Fred", "weight": 2}, + data={"name": "Jeanne", "weight": 2}, headers=self.get_auth("raclette"), ) @@ -326,14 +326,14 @@ def test_member(self): ) self.assertStatus(200, req) - assert "Fred" == json.loads(req.data.decode("utf-8"))["name"] + assert "Jeanne" == json.loads(req.data.decode("utf-8"))["name"] assert 2 == json.loads(req.data.decode("utf-8"))["weight"] # edit this member with same information - # (test PUT idemopotence) + # (test PUT idempotence) req = self.client.put( "/api/projects/raclette/members/1", - data={"name": "Fred"}, + data={"name": "Jeanne"}, headers=self.get_auth("raclette"), ) @@ -342,7 +342,7 @@ def test_member(self): # de-activate the participant req = self.client.put( "/api/projects/raclette/members/1", - data={"name": "Fred", "activated": False}, + data={"name": "Jeanne", "activated": False}, headers=self.get_auth("raclette"), ) self.assertStatus(200, req) @@ -356,7 +356,7 @@ def test_member(self): # re-activate the participant req = self.client.put( "/api/projects/raclette/members/1", - data={"name": "Fred", "activated": True}, + data={"name": "Jeanne", "activated": True}, headers=self.get_auth("raclette"), ) @@ -388,7 +388,7 @@ def test_bills(self): # add participants self.api_add_member("raclette", "zorglub") - self.api_add_member("raclette", "fred") + self.api_add_member("raclette", "jeanne") self.api_add_member("raclette", "quentin") # get the list of bills (should be empty) @@ -429,7 +429,7 @@ def test_bills(self): "payer_id": 1, "owers": [ {"activated": True, "id": 1, "name": "zorglub", "weight": 1}, - {"activated": True, "id": 2, "name": "fred", "weight": 1}, + {"activated": True, "id": 2, "name": "jeanne", "weight": 1}, ], "amount": 25.0, "date": "2011-08-10", @@ -498,7 +498,7 @@ def test_bills(self): "payer_id": 2, "owers": [ {"activated": True, "id": 1, "name": "zorglub", "weight": 1}, - {"activated": True, "id": 2, "name": "fred", "weight": 1}, + {"activated": True, "id": 2, "name": "jeanne", "weight": 1}, ], "amount": 25.0, "date": "2011-09-10", @@ -534,7 +534,7 @@ def test_bills_with_calculation(self): # add participants self.api_add_member("raclette", "zorglub") - self.api_add_member("raclette", "fred") + self.api_add_member("raclette", "jeanne") # valid amounts input_expected = [ @@ -576,7 +576,7 @@ def test_bills_with_calculation(self): "payer_id": 1, "owers": [ {"activated": True, "id": 1, "name": "zorglub", "weight": 1}, - {"activated": True, "id": 2, "name": "fred", "weight": 1}, + {"activated": True, "id": 2, "name": "jeanne", "weight": 1}, ], "amount": expected_amount, "date": "2011-08-10", @@ -647,7 +647,7 @@ def test_currencies(self): # Add participants self.api_add_member("raclette", "zorglub") - self.api_add_member("raclette", "fred") + self.api_add_member("raclette", "jeanne") self.api_add_member("raclette", "quentin") # Add a bill without explicit currency @@ -680,7 +680,7 @@ def test_currencies(self): "payer_id": 1, "owers": [ {"activated": True, "id": 1, "name": "zorglub", "weight": 1}, - {"activated": True, "id": 2, "name": "fred", "weight": 1}, + {"activated": True, "id": 2, "name": "jeanne", "weight": 1}, ], "amount": 25.0, "date": "2011-08-10", @@ -725,7 +725,7 @@ def test_currencies(self): "payer_id": 1, "owers": [ {"activated": True, "id": 1, "name": "zorglub", "weight": 1.0}, - {"activated": True, "id": 2, "name": "fred", "weight": 1.0}, + {"activated": True, "id": 2, "name": "jeanne", "weight": 1.0}, ], "amount": 30.0, "date": "2011-08-10", @@ -781,7 +781,7 @@ def test_statistics(self): # add participants self.api_add_member("raclette", "zorglub") - self.api_add_member("raclette", "fred") + self.api_add_member("raclette", "jeanne") # add a bill req = self.client.post( @@ -818,7 +818,7 @@ def test_statistics(self): "member": { "activated": True, "id": 2, - "name": "fred", + "name": "jeanne", "weight": 1.0, }, "paid": 0, @@ -844,7 +844,7 @@ def test_weighted_bills(self): # add participants self.api_add_member("raclette", "zorglub") - self.api_add_member("raclette", "freddy familly", 4) + self.api_add_member("raclette", "jeannedy familly", 4) self.api_add_member("raclette", "quentin") # add a bill @@ -875,7 +875,7 @@ def test_weighted_bills(self): "payer_id": 1, "owers": [ {"activated": True, "id": 1, "name": "zorglub", "weight": 1}, - {"activated": True, "id": 2, "name": "freddy familly", "weight": 4}, + {"activated": True, "id": 2, "name": "jeannedy familly", "weight": 4}, ], "amount": 25.0, "date": "2011-08-10", @@ -909,7 +909,7 @@ def test_weighted_bills(self): { "activated": True, "id": 2, - "name": "freddy familly", + "name": "jeannedy familly", "weight": 4.0, "balance": -20.0, }, diff --git a/ihatemoney/tests/budget_test.py b/ihatemoney/tests/budget_test.py index 7c6c55d8f..e3292053a 100644 --- a/ihatemoney/tests/budget_test.py +++ b/ihatemoney/tests/budget_test.py @@ -400,25 +400,25 @@ def test_membership(self): # should not accept him assert len(self.get_project("raclette").members) == 1 - # add fred - self.client.post("/raclette/members/add", data={"name": "fred"}) + # add jeanne + self.client.post("/raclette/members/add", data={"name": "jeanne"}) assert len(self.get_project("raclette").members) == 2 - # check fred is present in the bills page + # check jeanne is present in the bills page result = self.client.get("/raclette/") - assert "fred" in result.data.decode("utf-8") + assert "jeanne" in result.data.decode("utf-8") - # remove fred + # remove jeanne self.client.post( "/raclette/members/%s/delete" % self.get_project("raclette").members[-1].id ) - # as fred is not bound to any bill, he is removed + # as jeanne is not bound to any bill, he is removed assert len(self.get_project("raclette").members) == 1 - # add fred again - self.client.post("/raclette/members/add", data={"name": "fred"}) - fred_id = self.get_project("raclette").members[-1].id + # add jeanne again + self.client.post("/raclette/members/add", data={"name": "jeanne"}) + jeanne_id = self.get_project("raclette").members[-1].id # bound him to a bill result = self.client.post( @@ -426,38 +426,38 @@ def test_membership(self): data={ "date": "2011-08-10", "what": "fromage à raclette", - "payer": fred_id, - "payed_for": [fred_id], + "payer": jeanne_id, + "payed_for": [jeanne_id], "amount": "25", }, ) - # remove fred - self.client.post(f"/raclette/members/{fred_id}/delete") + # remove jeanne + self.client.post(f"/raclette/members/{jeanne_id}/delete") # he is still in the database, but is deactivated assert len(self.get_project("raclette").members) == 2 assert len(self.get_project("raclette").active_members) == 1 - # as fred is now deactivated, check that he is not listed when adding + # as jeanne is now deactivated, check that he is not listed when adding # a bill or displaying the balance result = self.client.get("/raclette/") - assert (f"/raclette/members/{fred_id}/delete") not in result.data.decode( + assert (f"/raclette/members/{jeanne_id}/delete") not in result.data.decode( "utf-8" ) result = self.client.get("/raclette/add") - assert "fred" not in result.data.decode("utf-8") + assert "jeanne" not in result.data.decode("utf-8") # adding him again should reactivate him - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) assert len(self.get_project("raclette").active_members) == 2 # adding an user with the same name as another user from a different # project should not cause any troubles self.post_project("randomid") self.login("randomid") - self.client.post("/randomid/members/add", data={"name": "fred"}) + self.client.post("/randomid/members/add", data={"name": "jeanne"}) assert len(self.get_project("randomid").active_members) == 1 def test_person_model(self): @@ -634,7 +634,7 @@ def test_manage_bills(self): # add two participants self.client.post("/raclette/members/add", data={"name": "zorglub"}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) members_ids = [m.id for m in self.get_project("raclette").members] @@ -776,7 +776,7 @@ def test_weighted_balance(self): # add two participants self.client.post("/raclette/members/add", data={"name": "zorglub"}) self.client.post( - "/raclette/members/add", data={"name": "freddy familly", "weight": 4} + "/raclette/members/add", data={"name": "jeannedy familly", "weight": 4} ) members_ids = [m.id for m in self.get_project("raclette").members] @@ -828,7 +828,7 @@ def test_weighted_members_list(self): assert "extra-info" in resp.data.decode("utf-8") self.client.post( - "/raclette/members/add", data={"name": "freddy familly", "weight": 4} + "/raclette/members/add", data={"name": "jeannedy familly", "weight": 4} ) resp = self.client.get("/raclette/") @@ -853,7 +853,7 @@ def test_rounding(self): # add participants self.client.post("/raclette/members/add", data={"name": "zorglub"}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) self.client.post("/raclette/members/add", data={"name": "tata"}) # create bills @@ -993,7 +993,7 @@ def test_statistics(self): # add participants self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) self.client.post("/raclette/members/add", data={"name": "tata"}) # Add a participant with a balance at 0 : self.client.post("/raclette/members/add", data={"name": "pépé"}) @@ -1052,7 +1052,8 @@ def test_statistics(self): response.data.decode("utf-8"), ) assert re.search( - regex.format("fred", r"\$20\.00", r"\$5\.83"), response.data.decode("utf-8") + 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") @@ -1063,7 +1064,7 @@ def test_statistics(self): # Check that the order of participants in the sidebar table is the # same as in the main table. - order = ["fred", "pépé", "tata", "zorglub"] + order = ["jeanne", "pépé", "tata", "zorglub"] regex1 = r".*".join( r"{}".format(name) for name in order ) @@ -1178,7 +1179,7 @@ def test_settle(self): # add participants self.client.post("/raclette/members/add", data={"name": "zorglub"}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) self.client.post("/raclette/members/add", data={"name": "tata"}) # Add a participant with a balance at 0 : self.client.post("/raclette/members/add", data={"name": "pépé"}) @@ -1233,7 +1234,7 @@ def test_settle_zero(self): # add participants self.client.post("/raclette/members/add", data={"name": "zorglub"}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) self.client.post("/raclette/members/add", data={"name": "tata"}) # create bills @@ -1286,7 +1287,7 @@ def test_access_other_projects(self): # Add participants self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) self.client.post("/raclette/members/add", data={"name": "tata"}) self.client.post("/raclette/members/add", data={"name": "pépé"}) @@ -1410,7 +1411,7 @@ def test_currency_switch(self): # add participants self.client.post("/raclette/members/add", data={"name": "zorglub"}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) self.client.post("/raclette/members/add", data={"name": "tata"}) # create bills @@ -1537,7 +1538,7 @@ def test_currency_switch_to_bill_currency(self): # add participants self.client.post("/raclette/members/add", data={"name": "zorglub"}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) # Bill with a different currency than project's default self.client.post( @@ -1572,7 +1573,7 @@ def test_currency_switch_to_no_currency(self): # add participants self.client.post("/raclette/members/add", data={"name": "zorglub"}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) # Bills with a different currency than project's default self.client.post( @@ -1647,13 +1648,15 @@ def test_decimals_on_weighted_members_list(self): "/raclette/members/add", data={"name": "zorglub", "weight": 1.0} ) self.client.post("/raclette/members/add", data={"name": "tata", "weight": 1.10}) - self.client.post("/raclette/members/add", data={"name": "fred", "weight": 1.15}) + self.client.post( + "/raclette/members/add", data={"name": "jeanne", "weight": 1.15} + ) # check if weights of the users are 1, 1.1, 1.15 respectively resp = self.client.get("/raclette/") assert 'zorglub(x1)' in resp.data.decode("utf-8") assert 'tata(x1.1)' in resp.data.decode("utf-8") - assert 'fred(x1.15)' in resp.data.decode("utf-8") + assert 'jeanne(x1.15)' in resp.data.decode("utf-8") def test_amount_too_high(self): self.post_project("raclette") @@ -2060,7 +2063,7 @@ def test_remember_payer_per_project(self): """ self.post_project("raclette") self.client.post("/raclette/members/add", data={"name": "zorglub"}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) members_ids = [m.id for m in self.get_project("raclette").members] # create a bill self.client.post( @@ -2110,7 +2113,7 @@ def test_remember_payed_for(self): """ self.post_project("raclette") self.client.post("/raclette/members/add", data={"name": "zorglub"}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) self.client.post("/raclette/members/add", data={"name": "pipistrelle"}) members_ids = [m.id for m in self.get_project("raclette").members] # create a bill diff --git a/ihatemoney/tests/import_test.py b/ihatemoney/tests/import_test.py index 463363c2d..8bc438253 100644 --- a/ihatemoney/tests/import_test.py +++ b/ihatemoney/tests/import_test.py @@ -16,13 +16,13 @@ def import_data(request: pytest.FixtureRequest): "amount": 13.33, "payer_name": "tata", "payer_weight": 1.0, - "owers": ["fred"], + "owers": ["jeanne"], }, { "date": "2016-12-31", "what": "red wine", "amount": 200.0, - "payer_name": "fred", + "payer_name": "jeanne", "payer_weight": 1.0, "owers": ["zorglub", "tata"], }, @@ -32,7 +32,7 @@ def import_data(request: pytest.FixtureRequest): "amount": 10.0, "payer_name": "zorglub", "payer_weight": 2.0, - "owers": ["zorglub", "fred", "tata", "pepe"], + "owers": ["zorglub", "jeanne", "tata", "pepe"], }, ] request.cls.data = data @@ -51,13 +51,13 @@ def setUp(self): "amount": 13.33, "payer_name": "tata", "payer_weight": 1.0, - "owers": ["fred"], + "owers": ["jeanne"], }, { "date": "2016-12-31", "what": "red wine", "amount": 200.0, - "payer_name": "fred", + "payer_name": "jeanne", "payer_weight": 1.0, "owers": ["zorglub", "tata"], }, @@ -67,7 +67,7 @@ def setUp(self): "amount": 10.0, "payer_name": "zorglub", "payer_weight": 2.0, - "owers": ["zorglub", "fred", "tata", "pepe"], + "owers": ["zorglub", "jeanne", "tata", "pepe"], }, ] @@ -264,7 +264,7 @@ def test_import_partial_project(self): self.client.post( "/raclette/members/add", data={"name": "zorglub", "weight": 2} ) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) self.client.post("/raclette/members/add", data={"name": "tata"}) self.client.post( "/raclette/add", @@ -328,7 +328,7 @@ def test_import_wrong_data(self): "what": "refund", "payer_name": "tata", "payer_weight": 1.0, - "owers": ["fred"], + "owers": ["jeanne"], } ] for data in [data_wrong_keys, data_amount_missing]: @@ -344,7 +344,7 @@ def test_export(self): # add participants self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) self.client.post("/raclette/members/add", data={"name": "tata"}) self.client.post("/raclette/members/add", data={"name": "pépé"}) @@ -392,14 +392,14 @@ def test_export(self): "currency": "XXX", "payer_name": "tata", "payer_weight": 1.0, - "owers": ["fred"], + "owers": ["jeanne"], }, { "date": "2016-12-31", "what": "red wine", "amount": 200.0, "currency": "XXX", - "payer_name": "fred", + "payer_name": "jeanne", "payer_weight": 1.0, "owers": ["zorglub", "tata"], }, @@ -410,7 +410,7 @@ def test_export(self): "currency": "XXX", "payer_name": "zorglub", "payer_weight": 2.0, - "owers": ["zorglub", "fred", "tata", "p\xe9p\xe9"], + "owers": ["zorglub", "jeanne", "tata", "p\xe9p\xe9"], }, ] assert json.loads(resp.data.decode("utf-8")) == expected @@ -419,9 +419,9 @@ def test_export(self): resp = self.client.get("/raclette/export/bills.csv") expected = [ "date,what,amount,currency,payer_name,payer_weight,owers", - "2017-01-01,refund,XXX,13.33,tata,1.0,fred", - '2016-12-31,red wine,XXX,200.0,fred,1.0,"zorglub, tata"', - '2016-12-31,fromage à raclette,10.0,XXX,zorglub,2.0,"zorglub, fred, tata, pépé"', + "2017-01-01,refund,XXX,13.33,tata,1.0,jeanne", + '2016-12-31,red wine,XXX,200.0,jeanne,1.0,"zorglub, tata"', + '2016-12-31,fromage à raclette,10.0,XXX,zorglub,2.0,"zorglub, jeanne, tata, pépé"', ] received_lines = resp.data.decode("utf-8").split("\n") @@ -434,14 +434,14 @@ def test_export(self): { "amount": 2.00, "currency": "XXX", - "receiver": "fred", + "receiver": "jeanne", "ower": "p\xe9p\xe9", }, - {"amount": 55.34, "currency": "XXX", "receiver": "fred", "ower": "tata"}, + {"amount": 55.34, "currency": "XXX", "receiver": "jeanne", "ower": "tata"}, { "amount": 127.33, "currency": "XXX", - "receiver": "fred", + "receiver": "jeanne", "ower": "zorglub", }, ] @@ -453,9 +453,9 @@ def test_export(self): expected = [ "amount,currency,receiver,ower", - "2.0,XXX,fred,pépé", - "55.34,XXX,fred,tata", - "127.33,XXX,fred,zorglub", + "2.0,XXX,jeanne,pépé", + "55.34,XXX,jeanne,tata", + "127.33,XXX,jeanne,zorglub", ] received_lines = resp.data.decode("utf-8").split("\n") @@ -472,7 +472,7 @@ def test_export_with_currencies(self): # add participants self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) self.client.post("/raclette/members/add", data={"name": "tata"}) self.client.post("/raclette/members/add", data={"name": "pépé"}) @@ -523,14 +523,14 @@ def test_export_with_currencies(self): "currency": "EUR", "payer_name": "tata", "payer_weight": 1.0, - "owers": ["fred"], + "owers": ["jeanne"], }, { "date": "2016-12-31", "what": "poutine from Qu\xe9bec", "amount": 100.0, "currency": "CAD", - "payer_name": "fred", + "payer_name": "jeanne", "payer_weight": 1.0, "owers": ["zorglub", "tata"], }, @@ -541,7 +541,7 @@ def test_export_with_currencies(self): "currency": "EUR", "payer_name": "zorglub", "payer_weight": 2.0, - "owers": ["zorglub", "fred", "tata", "p\xe9p\xe9"], + "owers": ["zorglub", "jeanne", "tata", "p\xe9p\xe9"], }, ] assert json.loads(resp.data.decode("utf-8")) == expected @@ -550,9 +550,9 @@ def test_export_with_currencies(self): resp = self.client.get("/raclette/export/bills.csv") expected = [ "date,what,amount,currency,payer_name,payer_weight,owers", - "2017-01-01,refund,13.33,EUR,tata,1.0,fred", - '2016-12-31,poutine from Québec,100.0,CAD,fred,1.0,"zorglub, tata"', - '2016-12-31,fromage à raclette,10.0,EUR,zorglub,2.0,"zorglub, fred, tata, pépé"', + "2017-01-01,refund,13.33,EUR,tata,1.0,jeanne", + '2016-12-31,poutine from Québec,100.0,CAD,jeanne,1.0,"zorglub, tata"', + '2016-12-31,fromage à raclette,10.0,EUR,zorglub,2.0,"zorglub, jeanne, tata, pépé"', ] received_lines = resp.data.decode("utf-8").split("\n") @@ -565,11 +565,16 @@ def test_export_with_currencies(self): { "amount": 2.00, "currency": "EUR", - "receiver": "fred", + "receiver": "jeanne", "ower": "p\xe9p\xe9", }, - {"amount": 10.89, "currency": "EUR", "receiver": "fred", "ower": "tata"}, - {"amount": 38.45, "currency": "EUR", "receiver": "fred", "ower": "zorglub"}, + {"amount": 10.89, "currency": "EUR", "receiver": "jeanne", "ower": "tata"}, + { + "amount": 38.45, + "currency": "EUR", + "receiver": "jeanne", + "ower": "zorglub", + }, ] assert json.loads(resp.data.decode("utf-8")) == expected @@ -579,9 +584,9 @@ def test_export_with_currencies(self): expected = [ "amount,currency,receiver,ower", - "2.0,EUR,fred,pépé", - "10.89,EUR,fred,tata", - "38.45,EUR,fred,zorglub", + "2.0,EUR,jeanne,pépé", + "10.89,EUR,jeanne,tata", + "38.45,EUR,jeanne,zorglub", ] received_lines = resp.data.decode("utf-8").split("\n") @@ -598,11 +603,16 @@ def test_export_with_currencies(self): { "amount": 3.00, "currency": "CAD", - "receiver": "fred", + "receiver": "jeanne", "ower": "p\xe9p\xe9", }, - {"amount": 16.34, "currency": "CAD", "receiver": "fred", "ower": "tata"}, - {"amount": 57.67, "currency": "CAD", "receiver": "fred", "ower": "zorglub"}, + {"amount": 16.34, "currency": "CAD", "receiver": "jeanne", "ower": "tata"}, + { + "amount": 57.67, + "currency": "CAD", + "receiver": "jeanne", + "ower": "zorglub", + }, ] assert json.loads(resp.data.decode("utf-8")) == expected @@ -612,9 +622,9 @@ def test_export_with_currencies(self): expected = [ "amount,currency,receiver,ower", - "3.0,CAD,fred,pépé", - "16.34,CAD,fred,tata", - "57.67,CAD,fred,zorglub", + "3.0,CAD,jeanne,pépé", + "16.34,CAD,jeanne,tata", + "57.67,CAD,jeanne,zorglub", ] received_lines = resp.data.decode("utf-8").split("\n") diff --git a/ihatemoney/tests/main_test.py b/ihatemoney/tests/main_test.py index be0868913..ecafe831c 100644 --- a/ihatemoney/tests/main_test.py +++ b/ihatemoney/tests/main_test.py @@ -113,7 +113,7 @@ def test_weighted_bills(self): # add members self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) self.client.post("/raclette/members/add", data={"name": "tata"}) # Add a member with a balance=0 : self.client.post("/raclette/members/add", data={"name": "pépé"}) @@ -168,7 +168,7 @@ def test_bill_pay_each(self): # add members self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2}) - self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "jeanne"}) self.client.post("/raclette/members/add", data={"name": "tata"}) # Add a member with a balance=0 : self.client.post("/raclette/members/add", data={"name": "pépé"}) From da42765ea27a095cdc6e3db6af5c420cd2687133 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexis=20M=C3=A9taireau?= Date: Sat, 11 Nov 2023 21:09:55 +0100 Subject: [PATCH 2/4] Replace Fred by Jeanne in tests and examples --- ihatemoney/tests/budget_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ihatemoney/tests/budget_test.py b/ihatemoney/tests/budget_test.py index e3292053a..662ff514d 100644 --- a/ihatemoney/tests/budget_test.py +++ b/ihatemoney/tests/budget_test.py @@ -1,11 +1,11 @@ -from collections import defaultdict import datetime import re +from collections import defaultdict from urllib.parse import unquote, urlparse, urlunparse +import pytest from flask import session, url_for from libfaketime import fake_time -import pytest from werkzeug.security import check_password_hash from ihatemoney import models From 0fa1a0d4f80b70d85429885bce3fbc699fb5da0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexis=20M=C3=A9taireau?= Date: Sun, 12 Nov 2023 19:32:57 +0100 Subject: [PATCH 3/4] Add a failing test showing that member edition reuses default values. --- ihatemoney/tests/api_test.py | 38 +++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/ihatemoney/tests/api_test.py b/ihatemoney/tests/api_test.py index 13477adab..aeef79e58 100644 --- a/ihatemoney/tests/api_test.py +++ b/ihatemoney/tests/api_test.py @@ -34,11 +34,12 @@ def api_create( ) def api_add_member(self, project, name, weight=1): - self.client.post( + resp = self.client.post( f"/api/projects/{project}/members", data={"name": name, "weight": weight}, headers=self.get_auth(project), ) + return resp.json def get_auth(self, username, password=None): password = password or username @@ -382,6 +383,41 @@ def test_member(self): self.assertStatus(200, req) assert "[]\n" == req.data.decode("utf-8") + def test_member_edition_keep_data(self): + # create a project + self.api_create("raclette") + zorg_id = self.api_add_member("raclette", "zorglub", weight=2) + self.api_add_member("raclette", "jeanne") + + resp = self.client.get( + f"/api/projects/raclette/members/{zorg_id}", + headers=self.get_auth("raclette"), + ) + assert resp.json == { + "activated": True, + "id": 1, + "name": "zorglub", + "weight": 2.0, + } + + self.client.put( + f"/api/projects/raclette/members/{zorg_id}", + data={"name": "zorglub"}, + headers=self.get_auth("raclette"), + ) + + resp = self.client.get( + f"/api/projects/raclette/members/{zorg_id}", + headers=self.get_auth("raclette"), + ) + # The user should still be activated and weight 2 + assert resp.json == { + "activated": True, + "id": 1, + "name": "zorglub", + "weight": 2.0, + } + def test_bills(self): # create a project self.api_create("raclette") From b3e10dad91f7f21a48f5ac1365c1695cd1a93ba6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexis=20M=C3=A9taireau?= Date: Sun, 12 Nov 2023 20:35:40 +0100 Subject: [PATCH 4/4] Keep member's activation when not specified. --- ihatemoney/api/common.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ihatemoney/api/common.py b/ihatemoney/api/common.py index caf8148bc..06cfc74ab 100644 --- a/ihatemoney/api/common.py +++ b/ihatemoney/api/common.py @@ -103,10 +103,12 @@ class APIMemberForm(MemberForm): But we want Member.enabled to be togglable via the API. """ - activated = BooleanField(false_values=("false", "", "False")) + activated = BooleanField(false_values=("false", "False")) def save(self, project, person): - person.activated = self.activated.data + # Check for raw data, otherwise no value will make it default to False + if self.activated.raw_data: + person.activated = self.activated.data return super(APIMemberForm, self).save(project, person) @@ -136,9 +138,10 @@ def get(self, project, member_id): return member def put(self, project, member_id): - form = APIMemberForm(project, meta={"csrf": False}, edit=True) + member = Person.query.get(member_id, project) + form = APIMemberForm(project, obj=member, meta={"csrf": False}, edit=True) + if form.validate(): - member = Person.query.get(member_id, project) form.save(project, member) db.session.commit() return member