Compare commits

...

3 commits

Author SHA1 Message Date
Baptiste Jonglez
f5000d46da Remove unused test 2023-02-03 20:50:24 +01:00
Zhongqi Ma
43807fb7f1 Update budget_test.py
Added 2 tests checking for validate_name() in MemberForm()
2023-02-03 20:49:40 +01:00
Zhongqi Ma
707ba186f3 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).
2023-02-03 20:49:29 +01:00
2 changed files with 61 additions and 1 deletions

View file

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

View file

@ -1655,5 +1655,66 @@ class BudgetTestCase(IhatemoneyTestCase):
self.assertIn("No bills", resp.data.decode("utf-8"))
def test_add_duplicate_user(self):
'''
Adding a user with same name as a deactivated user with 0 balance
and no associated bills should success
'''
self.post_project("raclette")
self.login("raclette")
# adds a member to this project
self.client.post("/raclette/members/add", data={"name": "zorglub"})
# delete user using POST method
self.client.post("/raclette/members/1/delete")
self.assertEqual(len(self.get_project("raclette").active_members), 0)
self.assertEqual(len(self.get_project("raclette").members), 0)
# try to add this deleted user should be successful
response = self.client.get("/raclette/members/add", data={"name": "zorglub"})
self.assertEqual(len(self.get_project("raclette").members), 1)
self.assertEqual(response.status_code, 200)
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
)
self.assertEqual(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
self.assertEqual(len(self.get_project("raclette").members), 2)
# The only active_member is Alice, this means adding a new Bob failed
self.assertEqual(len(self.get_project("raclette").active_members), 1)
if __name__ == "__main__":
unittest.main()