Skip to content

Commit 8924616

Browse files
test: add tests for user file (#1121)
1 parent c154317 commit 8924616

File tree

4 files changed

+207
-38
lines changed

4 files changed

+207
-38
lines changed

app/api/dao/user.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,8 @@ def delete_user(user_id: int):
9494
if admins_list_count <= UserDAO.MIN_NUMBER_OF_ADMINS:
9595
return messages.USER_CANT_DELETE, HTTPStatus.BAD_REQUEST
9696

97-
if user:
98-
user.delete_from_db()
99-
return messages.USER_SUCCESSFULLY_DELETED, HTTPStatus.OK
100-
101-
return messages.USER_DOES_NOT_EXIST, HTTPStatus.NOT_FOUND
97+
user.delete_from_db()
98+
return messages.USER_SUCCESSFULLY_DELETED, HTTPStatus.OK
10299

103100
@staticmethod
104101
@email_verification_required
@@ -223,8 +220,6 @@ def update_user_profile(user_id: int, data: Dict[str, str]):
223220
"""
224221

225222
user = UserModel.find_by_id(user_id)
226-
if not user:
227-
return messages.USER_DOES_NOT_EXIST, HTTPStatus.NOT_FOUND
228223

229224
username = data.get("username", None)
230225
if username:

tests/users/test_dao.py

Lines changed: 116 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717

1818

1919
class TestUserDao(BaseTestCase):
20+
def setUp(self):
21+
super().setUp()
22+
23+
self.user = UserModel(**user2)
24+
2025
def test_dao_create_user(self):
2126
dao = UserDAO()
2227
data = dict(
@@ -45,14 +50,7 @@ def test_dao_create_user(self):
4550
def test_dao_confirm_registration_good_token(self):
4651
dao = UserDAO()
4752

48-
user = UserModel(
49-
name=user2["name"],
50-
email=user2["email"],
51-
username=user2["username"],
52-
password=user2["password"],
53-
terms_and_conditions_checked=user2["terms_and_conditions_checked"],
54-
)
55-
db.session.add(user)
53+
db.session.add(self.user)
5654
db.session.commit()
5755

5856
# Verify that user was inserted in database through DAO
@@ -75,14 +73,7 @@ def test_dao_confirm_registration_good_token(self):
7573
def test_dao_confirm_registration_bad_token(self):
7674
dao = UserDAO()
7775

78-
user = UserModel(
79-
name=user2["name"],
80-
email=user2["email"],
81-
username=user2["username"],
82-
password=user2["password"],
83-
terms_and_conditions_checked=user2["terms_and_conditions_checked"],
84-
)
85-
db.session.add(user)
76+
db.session.add(self.user)
8677
db.session.commit()
8778

8879
# Verify that user was inserted in database through DAO
@@ -106,14 +97,7 @@ def test_dao_confirm_registration_bad_token(self):
10697
def test_dao_confirm_registration_of_already_verified_user(self):
10798
dao = UserDAO()
10899

109-
user = UserModel(
110-
name=user2["name"],
111-
email=user2["email"],
112-
username=user2["username"],
113-
password=user2["password"],
114-
terms_and_conditions_checked=user2["terms_and_conditions_checked"],
115-
)
116-
db.session.add(user)
100+
db.session.add(self.user)
117101
db.session.commit()
118102

119103
# Verify that user was inserted in database through DAO
@@ -150,6 +134,114 @@ def test_dao_delete_only_user_admin(self):
150134
(messages.USER_CANT_DELETE, HTTPStatus.BAD_REQUEST), dao_result
151135
)
152136

137+
def test_dao_delete_user(self):
138+
dao = UserDAO()
139+
140+
db.session.add(self.user)
141+
db.session.commit()
142+
143+
# Verify that user was inserted in database through DAO
144+
user = UserModel.query.filter_by(id=2).first()
145+
self.assertIsNotNone(user)
146+
147+
# Verify email
148+
token = generate_confirmation_token(user2["email"])
149+
result = dao.confirm_registration(token)
150+
self.assertTrue(user.is_email_verified)
151+
152+
dao_result = dao.delete_user(2)
153+
154+
user = UserModel.query.filter_by(id=2).first()
155+
self.assertIsNone(user)
156+
self.assertEqual(
157+
(messages.USER_SUCCESSFULLY_DELETED, HTTPStatus.OK), dao_result
158+
)
159+
160+
def test_dao_delete_user_that_does_not_exist(self):
161+
dao = UserDAO()
162+
163+
# Verify that user does not exist
164+
before_delete_user = UserModel.query.filter_by(id=2).first()
165+
self.assertIsNone(before_delete_user)
166+
167+
dao_result = dao.delete_user(2)
168+
169+
self.assertEqual(
170+
(messages.USER_DOES_NOT_EXIST, HTTPStatus.NOT_FOUND), dao_result
171+
)
172+
173+
def test_dao_get_user_by_email(self):
174+
dao = UserDAO()
175+
176+
db.session.add(self.user)
177+
db.session.commit()
178+
179+
# Verify that user was inserted in database through DAO
180+
user = UserModel.query.filter_by(email=user2["email"]).first()
181+
self.assertIsNotNone(user)
182+
183+
user_with_given_email = dao.get_user_by_email(user2["email"])
184+
self.assertIsNotNone(user_with_given_email)
185+
self.assertEqual(user_with_given_email, user)
186+
187+
def test_dao_get_user_by_username(self):
188+
dao = UserDAO()
189+
190+
db.session.add(self.user)
191+
db.session.commit()
192+
193+
# Verify that user was inserted in database through DAO
194+
user = UserModel.query.filter_by(email=user2["email"]).first()
195+
self.assertIsNotNone(user)
196+
197+
user_with_given_username = dao.get_user_by_username(user2["username"])
198+
self.assertIsNotNone(user_with_given_username)
199+
self.assertEqual(user_with_given_username, user)
200+
201+
def test_authenticate_user_by_email(self):
202+
dao = UserDAO()
203+
204+
db.session.add(self.user)
205+
db.session.commit()
206+
207+
# Verify that user was inserted in database through DAO
208+
before_delete_user = UserModel.query.filter_by(id=2).first()
209+
self.assertIsNotNone(before_delete_user)
210+
211+
# Verify email
212+
token = generate_confirmation_token(user2["email"])
213+
result = dao.confirm_registration(token)
214+
self.assertTrue(self.user.is_email_verified)
215+
216+
dao_result = dao.authenticate(user2["email"], user2["password"])
217+
218+
self.assertIsNotNone(dao_result)
219+
self.assertEqual(dao_result, self.user)
220+
221+
def test_change_password_with_incorrect_password(self):
222+
dao = UserDAO()
223+
224+
db.session.add(self.user)
225+
db.session.commit()
226+
227+
# Verify that user was inserted in database through DAO
228+
before_delete_user = UserModel.query.filter_by(id=2).first()
229+
self.assertIsNotNone(before_delete_user)
230+
231+
# Verify email
232+
token = generate_confirmation_token(user2["email"])
233+
result = dao.confirm_registration(token)
234+
self.assertTrue(self.user.is_email_verified)
235+
236+
data = dict(current_password="wrong password", new_password="new password")
237+
dao_result = dao.change_password(user_id=2, data=data)
238+
239+
self.assertIsNotNone(dao_result)
240+
self.assertEqual(
241+
(messages.USER_ENTERED_INCORRECT_PASSWORD, HTTPStatus.BAD_REQUEST),
242+
dao_result,
243+
)
244+
153245
def test_get_achievements(self):
154246
dao = UserDAO()
155247

tests/users/test_dao_dashboard.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,14 @@ def test_dao_get_user_dashboard(self):
176176
actual_response = UserDAO.get_user_dashboard(self.first_user.id)
177177
self.assertEqual(actual_response, expected_response)
178178

179+
def test_user_does_not_exist(self):
180+
id_with_no_user = 4
181+
user = UserModel.query.filter_by(id=id_with_no_user).first()
182+
self.assertIsNone(user)
183+
184+
response = UserDAO.get_user_dashboard(id_with_no_user)
185+
self.assertIsNone(response)
186+
179187

180188
if __name__ == "__main__":
181189
unittest.main()

tests/users/test_dao_update_user.py

Lines changed: 81 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,111 @@
11
import unittest
2+
from http import HTTPStatus
23

4+
from app import messages
35
from app.api.dao.user import UserDAO
6+
from app.database.models.user import UserModel
47
from tests.base_test_case import BaseTestCase
58

69

710
class TestUpdateUserDao(BaseTestCase):
811
def test_dao_update_user(self):
912

13+
self.assertIsNotNone(self.admin_user.name)
14+
self.assertIsNone(self.admin_user.bio)
15+
self.assertIsNone(self.admin_user.location)
1016
self.assertIsNone(self.admin_user.occupation)
1117
self.assertIsNone(self.admin_user.organization)
18+
self.assertIsNone(self.admin_user.slack_username)
19+
self.assertIsNone(self.admin_user.social_media_links)
20+
self.assertIsNone(self.admin_user.skills)
21+
self.assertIsNone(self.admin_user.interests)
22+
self.assertIsNone(self.admin_user.resume_url)
23+
self.assertIsNone(self.admin_user.photo_url)
1224

13-
data = dict(occupation="good_developer", organization="good_org")
25+
data = dict(
26+
name="good_name",
27+
bio="good_bio",
28+
location="good_location",
29+
occupation="good_developer",
30+
organization="good_org",
31+
slack_username="good_slack_username",
32+
social_media_links="good_social_media_links",
33+
skills="good_skills",
34+
interests="good_interests",
35+
resume_url="good_resume_url",
36+
photo_url="good_photo_url",
37+
)
1438
UserDAO.update_user_profile(self.admin_user.id, data)
1539

40+
self.assertEqual("good_name", self.admin_user.name)
41+
self.assertEqual("good_bio", self.admin_user.bio)
42+
self.assertEqual("good_location", self.admin_user.location)
1643
self.assertEqual("good_developer", self.admin_user.occupation)
1744
self.assertEqual("good_org", self.admin_user.organization)
45+
self.assertEqual("good_slack_username", self.admin_user.slack_username)
46+
self.assertEqual("good_social_media_links", self.admin_user.social_media_links)
47+
self.assertEqual("good_skills", self.admin_user.skills)
48+
self.assertEqual("good_interests", self.admin_user.interests)
49+
self.assertEqual("good_resume_url", self.admin_user.resume_url)
50+
self.assertEqual("good_photo_url", self.admin_user.photo_url)
1851

1952
def test_update_fields_with_empty_data(self):
2053

54+
name_before_update = self.admin_user.name
55+
self.assertIsNotNone(self.admin_user.name)
56+
57+
self.assertIsNone(self.admin_user.bio)
58+
self.assertIsNone(self.admin_user.location)
2159
self.assertIsNone(self.admin_user.occupation)
2260
self.assertIsNone(self.admin_user.organization)
61+
self.assertIsNone(self.admin_user.slack_username)
62+
self.assertIsNone(self.admin_user.social_media_links)
63+
self.assertIsNone(self.admin_user.skills)
64+
self.assertIsNone(self.admin_user.interests)
65+
self.assertIsNone(self.admin_user.resume_url)
66+
self.assertIsNone(self.admin_user.photo_url)
2367

24-
data = dict(occupation="good_developer", organization="good_org")
68+
data = dict(
69+
name="",
70+
bio="",
71+
location="",
72+
occupation="",
73+
organization="",
74+
slack_username="",
75+
social_media_links="",
76+
skills="",
77+
interests="",
78+
resume_url="",
79+
photo_url="",
80+
)
2581
UserDAO.update_user_profile(self.admin_user.id, data)
2682

27-
self.assertEqual("good_developer", self.admin_user.occupation)
28-
self.assertEqual("good_org", self.admin_user.organization)
29-
30-
data = dict(occupation="", organization="")
31-
UserDAO.update_user_profile(self.admin_user.id, data)
83+
name_after_update = self.admin_user.name
84+
self.assertIsNotNone(self.admin_user.name)
85+
self.assertEqual(name_before_update, name_after_update)
3286

87+
self.assertIsNone(self.admin_user.bio)
88+
self.assertIsNone(self.admin_user.location)
3389
self.assertIsNone(self.admin_user.occupation)
3490
self.assertIsNone(self.admin_user.organization)
91+
self.assertIsNone(self.admin_user.slack_username)
92+
self.assertIsNone(self.admin_user.social_media_links)
93+
self.assertIsNone(self.admin_user.skills)
94+
self.assertIsNone(self.admin_user.interests)
95+
self.assertIsNone(self.admin_user.resume_url)
96+
self.assertIsNone(self.admin_user.photo_url)
97+
98+
def test_update_user_that_does_not_exist(self):
99+
100+
user = UserModel.query.filter_by(id=2).first()
101+
self.assertIsNone(user)
102+
103+
data = dict(occupation="good_developer", organization="good_org")
104+
dao_result = UserDAO.update_user_profile(user, data)
105+
106+
self.assertEqual(
107+
(messages.USER_DOES_NOT_EXIST, HTTPStatus.NOT_FOUND), dao_result
108+
)
35109

36110

37111
if __name__ == "__main__":

0 commit comments

Comments
 (0)