Compare commits

...

5 commits

Author SHA1 Message Date
Zhongqi Ma
5eb52eda4a
Merge 43260d0dc4 into 19ecdb5052 2025-01-05 22:11:46 +01:00
43260d0dc4
Fix the tests for user reactivation 2025-01-05 16:05:33 +01:00
Baptiste Jonglez
0d7308fccb
Remove unused test 2025-01-05 15:51:50 +01:00
Zhongqi Ma
dff1956c14
Update budget_test.py
Added 2 tests checking for validate_name() in MemberForm()
2025-01-05 15:51:48 +01:00
Zhongqi Ma
cedb2934b8
Updated checks for validate_name() in MemberForm()
The database allows users to deactivate an account with a non-zero value, and create a new user with the same name, reactivating the previous user will allow two users of the same name. This change assures that new user names can not be the same as deactivated users with associated bills (Users that are not deleted from deactivation).
2025-01-05 15:50:43 +01:00
2 changed files with 58 additions and 3 deletions

View file

@ -475,7 +475,6 @@ class MemberForm(FlaskForm):
and Person.query.filter( and Person.query.filter(
Person.name == field.data, Person.name == field.data,
Person.project == self.project, Person.project == self.project,
Person.activated,
).all() ).all()
): # NOQA ): # NOQA
raise ValidationError(_("This project already have this participant")) raise ValidationError(_("This project already have this participant"))

View file

@ -452,8 +452,8 @@ class TestBudget(IhatemoneyTestCase):
result = self.client.get("/raclette/add") result = self.client.get("/raclette/add")
assert "jeanne" not in result.data.decode("utf-8") assert "jeanne" not in result.data.decode("utf-8")
# adding him again should reactivate him # it should be possible to reactivate him
self.client.post("/raclette/members/add", data={"name": "jeanne"}) self.client.post(f"/raclette/members/{jeanne_id}/reactivate")
assert len(self.get_project("raclette").active_members) == 2 assert len(self.get_project("raclette").active_members) == 2
# adding an user with the same name as another user from a different # adding an user with the same name as another user from a different
@ -1938,6 +1938,62 @@ class TestBudget(IhatemoneyTestCase):
# No bills, the previous one was not added # No bills, the previous one was not added
assert "No bills" in resp.data.decode("utf-8") assert "No bills" in resp.data.decode("utf-8")
def test_add_duplicate_user(self):
"""
Adding a user with the same name as a deactivated user with 0 balance
and no associated bills should succeed
"""
self.post_project("raclette")
self.login("raclette")
# adds a member to this project and delete it right after.
self.client.post("/raclette/members/add", data={"name": "zorglub"})
self.client.post("/raclette/members/1/delete")
assert len(self.get_project("raclette").active_members) == 0
assert len(self.get_project("raclette").members) == 0
# try to add this deleted user should be successful
response = self.client.post("/raclette/members/add", data={"name": "zorglub"})
assert len(self.get_project("raclette").members) == 1
def test_add_duplicate_user_with_balance(self):
"""
Adding a user with same name as a deactivated user with non-zero balance
and associated bills should fail
"""
self.post_project("raclette")
# add two participants
self.client.post("/raclette/members/add", data={"name": "Alice"})
self.client.post("/raclette/members/add", data={"name": "Bob"})
members_ids = [m.id for m in self.get_project("raclette").members]
# create one bill
self.client.post(
"/raclette/add",
data={
"date": "2011-08-10",
"what": "fromage à raclette",
"payer": members_ids[0],
"payed_for": members_ids,
"amount": "100",
},
)
# deactivate Bob
self.client.post(
"/raclette/members/%s/delete" % self.get_project("raclette").members[-1].id
)
assert len(self.get_project("raclette").members) == 2
self.client.post("/raclette/members/add", data={"name": "Bob"})
# adding a user with the same name should fail
assert len(self.get_project("raclette").members) == 2
# The only active_member is Alice, this means adding a new Bob failed
assert len(self.get_project("raclette").active_members) == 1
def test_session_projects_migration_to_list(self): def test_session_projects_migration_to_list(self):
"""In https://github.com/spiral-project/ihatemoney/pull/1082, session["projects"] """In https://github.com/spiral-project/ihatemoney/pull/1082, session["projects"]
was migrated from a list to a dict. We need to handle this. was migrated from a list to a dict. We need to handle this.