-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtests.py
More file actions
executable file
·271 lines (231 loc) · 11.8 KB
/
tests.py
File metadata and controls
executable file
·271 lines (231 loc) · 11.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
#!/home/tomek/.envs/flask/bin/python
import os
import unittest
from project import app, db, bcrypt
from config import BASE_DIR
from project.models import User, Task
TEST_DB = os.path.join(BASE_DIR, 'test.db')
class TestCase(unittest.TestCase):
def setUp(self):
# executes prior to each test
app.config['TESTING'] = True
app.config['WTF_CSRF_ENABLED'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + TEST_DB
app.config['DEBUG'] = False
self.app = app.test_client()
db.create_all()
def tearDown(self):
# executes after each TestCase
db.drop_all()
# ============================= helpers ================================= #
def login(self, name, password):
# helper function to keep our code keep DRY
return self.app.post("/users/login",
data=dict(name=name, password=password),
follow_redirects=True)
def register(self, name, email, password):
return self.app.post("/users/register",
data=dict(
name=name, email=email,
password=password,
confirm=password
),
follow_redirects=True)
def create_user(self, name, email, password):
new_user = User(name=name, email=email,
password=bcrypt.generate_password_hash(password))
db.session.add(new_user)
db.session.commit()
def create_superuser(self, name, email, password):
superuser = User(name=name, email=email,
password=bcrypt.generate_password_hash(password),
role="admin")
db.session.add(superuser)
db.session.commit()
def post_task(self, task_name, due_date="2014/10/20",
posted_date='2014/10/11'):
return self.app.post("/tasks/add", data=dict(name=task_name,
due_date=due_date,
posted_date=posted_date,
priority='10',
status='1'),
follow_redirects=True)
def create_task(self, task_name, user_id, due_date="2014/10/20",
posted_date="2014/10/11"):
new_task = Task(name=task_name, due_date=due_date,
posted_date=posted_date, priority=10, status=1,
user_id=user_id)
db.session.add(new_task)
db.session.commit()
def logout(self):
return self.app.get("/users/logout", follow_redirects=True)
# ======================================================================= #
# ============================= test functions ========================== #
def test_user_set_up(self):
self.create_user("foobar", "foobar@gmai.com", "foobarfoo")
def test_user_can_register(self):
self.register("foouser", "foo@bar.com.pl", "foouser")
test = db.session.query(User).all()
self.assertIn("foouser", [elem.name for elem in test])
def test_registered_user_see_message(self):
response = self.register("newuser", "newuser@com.pl", "newuser")
self.assertIn("You have been succesfully registered. Please login",
response.data)
def test_user_cannot_register_unless_all_fields_filled(self):
response = self.register("fooBar", "foobar@foobar.pl", "")
self.assertIn('This field is required', response.data)
def test_form_is_present_on_login_page(self):
response = self.app.get("/users/login")
self.assertEquals(response.status_code, 200)
self.assertIn("Please login to see your tasks", response.data)
def test_unregister_users_cannot_login(self):
response = self.login('foo', 'bar')
self.assertIn("Invalid username or password", response.data)
def test_register_users_can_login(self):
self.register(name="foofoofoo", email="foo@com.pl",
password="foofoofoo")
response = self.login(name="foofoofoo", password="foofoofoo")
self.assertIn("You have succesfully logged in", response.data)
def test_invalid_form_name(self):
self.register(name="foofoofoo", email="foo@com.pl",
password="foofoofoo")
response = self.login(name="fofofo", password="foofoofoo")
self.assertIn("Invalid username or password", response.data)
def test_invalid_form_password(self):
self.register(name="foofoofoo", email="foo@com.pl",
password="foofoofoo")
response = self.login(name="foofoofoo", password="fofofo")
self.assertIn("Invalid username or password", response.data)
def test_not_logged_users_cannot_logout(self):
response = self.logout()
self.assertNotIn("You are now logged out. Thank you, come again",
response.data)
def test_logged_users_can_logout(self):
self.register("tomekfoo", "foobar@bar.pl", "foobar")
self.login("tomekfoo", "foobar")
response = self.logout()
self.assertIn("You are now logged out. Thank you, come again",
response.data)
def test_not_logged_users_cannot_see_tasks(self):
response = self.app.get("/", follow_redirects=True)
self.assertIn("You need to login first", response.data)
def test_users_can_add_task(self):
self.create_user("FooBar", "foobar@pl.com", "password")
self.login("FooBar", "password")
self.app.get("/tasks", follow_redirects=True)
response = self.post_task("Go to movies")
self.assertIn("New task has been succesfully added", response.data)
def test_task_not_added_when_error(self):
self.create_user("FooBar", "foobar@pl.com", "password")
self.login("FooBar", "password")
self.app.get("/tasks", follow_redirects=True)
response = self.post_task("Go to movies", due_date="")
self.assertNotIn("New task has been succesfully added", response.data)
self.assertIn("input date by YYYY/MM/DD (ex. 2014/10/10)",
response.data)
def test_user_can_complete_task(self):
self.create_user("FooBar", "foobar@pl.com", "password")
self.login("FooBar", "password")
self.app.get("/tasks", follow_redirects=True)
self.post_task("Go to movies")
response = self.app.get("/tasks/mark/1", follow_redirects=True)
self.assertIn("Task has been marked as completed", response.data)
status = db.session.query(Task).all()[0].status
self.assertEquals(status, 0)
def test_user_can_delete_task(self):
self.create_user("FooBar", "foobar@pl.com", "password")
self.login("FooBar", "password")
self.app.get("/tasks", follow_redirects=True)
self.post_task("Go to movies")
response = self.app.get("/tasks/delete/1", follow_redirects=True)
self.assertIn("Task has been deleted", response.data)
task = db.session.query(Task).all()
self.assertEquals([], task)
def test_default_user_role(self):
db.session.add(User("tomek", "tomek@tomek.pl", "tomek123"))
db.session.commit()
users = db.session.query(User).all()
for user in users:
self.assertEquals(user.role, "user")
def test_superuser_can_mark_tasks_not_created_by_him(self):
self.create_user("some_user", "user@email.com", "password")
self.login("some_user", "password")
self.app.get("/tasks", follow_redirects=True)
self.post_task("My ordinary user task")
self.app.get("/users/logout", follow_redirects=True)
self.create_superuser("admin", "admin@admin.com", "password")
self.login("admin", "password")
self.app.get("/tasks", follow_redirects=True)
response = self.app.get("/tasks/mark/1", follow_redirects=True)
self.assertIn("Task has been marked as completed", response.data)
status = db.session.query(Task).all()[0].status
self.assertEquals(status, 0)
def test_superuser_can_delete_tasks_not_created_by_him(self):
self.create_user("some_user", "user@email.com", "password")
self.login("some_user", "password")
self.app.get("/tasks", follow_redirects=True)
self.post_task("My ordinary user task")
self.app.get("/users/logout", follow_redirects=True)
self.create_superuser("admin", "admin@admin.com", "password")
self.login("admin", "password")
self.app.get("/tasks", follow_redirects=True)
response = self.app.get("/tasks/delete/1", follow_redirects=True)
self.assertIn("Task has been deleted", response.data)
task = db.session.query(Task).all()
self.assertEquals([], task)
def test_username_and_user_role_is_display_afert_login(self):
self.create_user("some_user", "user@email.com", "password")
self.login("some_user", "password")
response = self.app.get("/tasks", follow_redirects=True)
self.assertIn("some_user", response.data)
self.assertIn("Your role is user", response.data)
def test_no_task_modify_links_for_tasks_not_created_by_users(self):
self.create_user("some_user", "user@email.com", "password")
self.login("some_user", "password")
self.app.get("/tasks", follow_redirects=True)
self.post_task(task_name="Test task")
self.logout()
self.create_user("another_user", "another@user.com", "password")
self.login("another_user", "password")
response = self.app.get("/tasks", follow_redirects=True)
self.assertNotIn("Mark as complete", response.data)
self.assertNotIn("Delete task", response.data)
def test_users_can_see_task_modify_links_only_for_their_tasks(self):
self.create_user("some_user", "user@email.com", "password")
self.login("some_user", "password")
self.app.get("/tasks", follow_redirects=True)
self.post_task(task_name="Test task")
self.logout()
self.create_user("another_user", "another@user.com", "password")
self.login("another_user", "password")
self.app.get("/tasks", follow_redirects=True)
response = self.post_task(task_name="Test task2")
self.assertIn("tasks/mark/2", response.data)
self.assertIn("tasks/delete/2", response.data)
self.assertNotIn("tasks/mark/1", response.data)
self.assertNotIn("tasks/delete/1", response.data)
def test_admin_users_can_see_all_tasks_modify_links(self):
self.create_user("some_user", "user@email.com", "password")
self.login("some_user", "password")
self.app.get("/tasks", follow_redirects=True)
self.post_task(task_name="Test task")
self.logout()
self.create_user("another_user", "another@user.com", "password")
self.login("another_user", "password")
self.app.get("/tasks", follow_redirects=True)
self.post_task(task_name="Test2 task2")
self.logout()
self.create_superuser("superuser", "super@user.com", "password")
self.login("superuser", "password")
response = self.app.get('/tasks', follow_redirects=True)
self.assertIn("tasks/mark/2", response.data)
self.assertIn("tasks/delete/2", response.data)
self.assertIn("tasks/mark/1", response.data)
self.assertIn("tasks/delete/1", response.data)
def test_404_error(self):
response = self.app.get("/this-route-does-not-exist")
self.assertEquals(404, response.status_code)
self.assertIn('Sorry. There is nothing here', response.data)
# =================================================================== #
if __name__ == "__main__":
unittest.main()