-
Notifications
You must be signed in to change notification settings - Fork 0
/
tests.py
298 lines (200 loc) · 9.94 KB
/
tests.py
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
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
import unittest
import os
import flask
# from flask_testing import LiveServerTestCase
# from selenium import webdriver
from server import app
from model import db, User, Movie, Truth, Rating, example_data, connect_to_db, init_app
################################################################
# Route Tests #
################################################################
class ServerTests(unittest. TestCase):
"""Flask tests that test routes on the site"""
def setUp(self):
"""Things to do before every test"""
self.client = app.test_client()
app.config['TESTING'] = True
def test_homepage(self):
"""Test if homepage loads"""
results = self.client.get("/")
self.assertEqual(results.status_code, 200)
self.assertIn(b"Based on a True Story", results.data)
self.assertIn(b"Search for a movie that's based on a true story.", results.data)
def test_login(self):
"""Test if login page loads"""
results = self.client.get("/login")
self.assertEqual(results.status_code, 200)
self.assertIn(b"Welcome Back", results.data)
self.assertIn(b"Email:", results.data)
self.assertIn(b"Password:", results.data)
def test_create_account(self):
"""Test if create account page loads"""
results = self.client.get("/create-account")
self.assertEqual(results.status_code, 200)
self.assertIn(b"You belong here.", results.data)
self.assertIn(b"Username:", results.data)
self.assertIn(b"Email:", results.data)
self.assertIn(b"Password:", results.data)
################################################################
# Database Tests #
################################################################
class DatabaseTestsNoAccount(unittest. TestCase):
"""Flask tests that use data from the database"""
def setUp(self):
"""Things to do before every test"""
self.client = app.test_client()
app.config['TESTING'] = True
connect_to_db(app, "postgresql:///testdb")
db.create_all()
example_data()
def test_process_account(self):
"""Test that a user can create an account"""
results = self.client.post("/process-account",
data={'username': "flixter",
'email': "cat@yahoo.com",
'password': "cats"},
follow_redirects=True)
self.assertEqual(results.status_code, 200)
self.assertIn(b"Your account has been created!", results.data)
self.assertIn(b"Please log in.", results.data)
self.assertIn(b"Welcome Back", results.data)
self.assertNotIn(b"You belong here", results.data)
def test_create_account_username_taken(self):
"""Test redirect for existing username"""
results = self.client.post("/process-account",
data={'username': "filmbuff",
'email': "myemail@yahoo.com",
'password': "pass"},
follow_redirects=True)
self.assertEqual(results.status_code, 200)
self.assertIn(b"That username is taken!", results.data)
self.assertIn(b"Please try another.", results.data)
self.assertIn(b"You belong here", results.data)
self.assertNotIn(b"Your account has been created!", results.data)
self.assertNotIn(b"Please login.", results.data)
def test_create_account_account_exists(self):
"""Test redirect for existing user trying to make a new account"""
results = self.client.post("/process-account",
data={'username': "newuser",
'email': "123@gmail.com",
'password': "somepassword"},
follow_redirects=True)
self.assertEqual(results.status_code, 200)
self.assertIn(b"Your email is already registerd.", results.data)
self.assertIn(b"Please log in", results.data)
self.assertIn(b"Welcome Back", results.data)
self.assertNotIn(b"You belong here.", results.data)
self.assertNotIn(b"Username:", results.data)
def test_login(self):
"""Test is login is working"""
results = self.client.post("/login-verify",
data={'email': "films@yahoo.com",
'password': "films"},
follow_redirects=True)
self.assertEqual(results.status_code, 200)
self.assertIn(b"Logged in.", results.data)
self.assertIn(b"Click here to sign out.", results.data)
self.assertNotIn(b"Click here to sign in.", results.data)
self.assertNotIn(b"Click here to create an account.", results.data)
def test_browse_movies(self):
"""Test if 'browse movies' page loads/displays"""
results = self.client.get("/movie-list")
self.assertEqual(results.status_code, 200)
self.assertIn(b"Movies people are talking about.", results.data)
def test_movie_display_no_account(self):
"""Test movie display for a user without a registered account"""
results = self.client.get("/movies/1")
self.assertEqual(results.status_code, 200)
self.assertIn(b"Please log in to submit a Truth.", results.data)
self.assertNotIn(b"What's your Truth?", results.data)
def test_search_function_success(self):
"""Test the search bar with a successful search"""
results = self.client.get("/search-results?query=blackkklansman")
self.assertEqual(results.status_code, 200)
self.assertIn(b"BlacKkKlansman", results.data)
self.assertIn(b"Yeah, that movie is based on a true story!", results.data)
self.assertNotIn(b"That movie isn't based on a true story.", results.data)
def test_search_function_failure(self):
"""Test the search bar with a failed search"""
results = self.client.get("/search-results?query=1q2w",
follow_redirects=True)
self.assertEqual(results.status_code, 200)
self.assertIn(b"Oops, that's not a movie title.", results.data)
self.assertIn(b"Please try again.", results.data)
self.assertNotIn(b"This movie matches your search:", results.data)
def test_search_function_not_a_bio(self):
"""Test the search bar with a movie that is not a 'true' story"""
results = self.client.get("/search-results?query=beetlejuice")
self.assertEqual(results.status_code, 200)
self.assertIn(b"Hmmmm.", results.data)
self.assertIn(b"Want to search again?", results.data)
self.assertNotIn(b"Yeah, that movie is based on a true story!", results.data)
def tearDown(self):
"""Things to do after every test"""
db.session.close()
db.drop_all()
db.engine.dispose()
################################################################
# Tests With Active Session #
################################################################
class FlaskTestsLoggedIn(unittest. TestCase):
"""Tests that run while user is logged in"""
def setUp(self):
"""Things to do before every test"""
app.config['TESTING'] = True
app.config['SECRET_KEY'] = os.environ["SECRET_KEY"]
self.client = app.test_client()
connect_to_db(app, "postgresql:///testdb")
db.create_all()
example_data()
with self.client.session_transaction() as session:
session['active_user'] = "filmbuff"
session['active_user_id'] = 1
def test_logout(self):
"""Test if logout works"""
results = self.client.get("/logout",
follow_redirects=True)
self.assertEqual(results.status_code, 200)
self.assertIn(b"You've been logged out.", results.data)
self.assertIn(b"We'll miss you.", results.data)
self.assertNotIn(b"Click here to sign out.", results.data)
def test_movie_display_registered_account(self):
"""Test movie display for a user with a registered account"""
results = self.client.get("movies/1")
self.assertEqual(results.status_code, 200)
self.assertIn(b"What's your Truth?", results.data)
self.assertNotIn(b"Please log in to submit a Truth.", results.data)
def test_add_truth(self):
"""Test that a registered user can add a truth to the database"""
results = self.client.post("/movies/1",
data={'title': "A Truth",
'truth': "Some stuff",
'resource': "www.stuff.com"},
follow_redirects=True)
self.assertEqual(results.status_code, 200)
self.assertIn(b"See some Truth discussion:", results.data)
self.assertIn(b"Your truth has been submitted!", results.data)
self.assertNotIn(b"Boo! There are no truths here yet.", results.data)
def tearDown(self):
"""Things to do after every test"""
db.session.close()
db.drop_all()
db.engine.dispose()
################################################################
# Selenium Test WIP #
################################################################
# class TestBase(unittest. TestCase):
# def setUp(self):
# """Things to do before every test"""
# self.browser = webdriver.Firefox()
# def tearDown(self):
# self.driver.quit()
# def test_server_is_up_and_running(self):
# self.browser.get('http://localhost:5000')
# self.assertEqual(results.status_code, 200)
# self.assertEqual(self.browser.title, 'Based on a true story')
################################################################
#
################################################################
if __name__ == "__main__":
unittest.main()