-
Notifications
You must be signed in to change notification settings - Fork 0
/
flask_db_unittests.py
213 lines (172 loc) · 8.36 KB
/
flask_db_unittests.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
import unittest
import server_helper_functions as shf
from server import app
from model import connect_to_db, User, Pattern, UserLikesPattern, db, create_test_data
import json
from passlib.hash import argon2
class DBTestCase(unittest.TestCase):
def setUp(self):
self.client=app.test_client()
app.config['TESTING'] = True
connect_to_db(app,'knitpreviewtest')
db.create_all()
create_test_data()
def test_get_most_liked(self):
"""in the test data, the pattern_2 was liked 4 times and named 'Purl'"""
self.assertEqual(shf.get_most_liked()[0][1], 'Purl')
def test_get_newest(self):
""" create a new pattern, that pattern should be newest"""
user = User.query.filter(User.email == 'potato@potato').one()
pattern_new = Pattern(pattern_name='new', user_id=user.user_id, pattern_text='new')
db.session.add(pattern_new)
db.session.commit()
self.assertEqual(shf.get_newest()[0][1],'new')
def test_make_search_json(self):
"""in the test data, only 1 pattern had 'knit' in the name"""
search_json =shf.make_search_json('knit', 1)
search_dict = json.loads(search_json)
self.assertEqual(search_dict['numResults'], 1)
self.assertEqual(search_dict['patterns'][0][1], 'Knit')
self.assertEqual(search_dict['numPages'], 1)
def test_register_new_user(self):
email = 'otatopay@potato'
password='thisissafe'
shf.register_new_user(email, password)
user = User.query.filter(User.email == email).one()
self.assertTrue(user)
self.assertNotEqual(password, user.password)
self.assertTrue(argon2.verify(password, user.password))
def test_unlike_pattern(self):
# in test data user with email 'fry@potato' liked pattern named 'Purl'
pattern = Pattern.query.filter(Pattern.pattern_name == 'Purl').one()
user = User.query.filter(User.email == 'fry@potato').one()
self.assertIn(pattern, user.likes)
shf.unlike_pattern(user.user_id, pattern.pattern_id)
self.assertNotIn(pattern, user.likes)
def test_like_pattern(self):
# in test data user with email 'fry@potato' did not like pattern named 'Knit'
pattern = Pattern.query.filter(Pattern.pattern_name == 'Knit').one()
user = User.query.filter(User.email == 'fry@potato').one()
self.assertNotIn(pattern, user.likes)
shf.like_pattern(user.user_id, pattern.pattern_id)
self.assertIn(pattern, user.likes)
def test_save_new_pattern(self):
user = User.query.filter(User.email == 'fry@potato').one()
pattern_name = 'new_save'
pattern_svg = 'would be SVG code'
pattern_text = 'knit instructions'
self.assertEqual(Pattern.query.filter(Pattern.pattern_name == pattern_name).all(),[])
pattern = shf.save_new_pattern(user.user_id, pattern_text, pattern_name, pattern_svg)
self.assertTrue(pattern)
self.assertEqual(pattern.pattern_name,pattern_name)
self.assertEqual(pattern.user_id,user.user_id)
file = open(f'static/patternSVGs/{pattern.pattern_id}.svg')
text = file.readline()
file.close()
self.assertEqual(text,pattern_svg)
class FlaskTestCase(unittest.TestCase):
def setUp(self):
self.client = app.test_client()
app.config['TESTING'] = False
app.config['SECRET_KEY'] = 'totalysecret'
connect_to_db(app,'knitpreviewtest')
db.create_all()
create_test_data()
def test_homepage(self):
result = self.client.get('/')
self.assertEqual(result.status_code, 200)
self.assertIn(b'<h2>News</h2>', result.data)
def test_search_shows(self):
result = self.client.get('/patterns/search')
self.assertIn(b'patternsSearchTranslated.js', result.data)
def test_pattern_page_shows(self):
pattern = Pattern.query.filter(Pattern.pattern_name=='Purl').one()
result = self.client.get(f'/patterns/{pattern.pattern_id}')
self.assertIn(b'Purl', result.data)
self.assertIn(b'Row1: P10', result.data)
def test_log_in_shows(self):
result = self.client.get('/login')
self.assertIn(b'Email Address', result.data)
self.assertNotIn(b'Repeat Password', result.data)
def test_login(self):
# the correct password for potato is password
user = User.query.filter(User.email == 'potato@potato').one()
result = self.client.post('/login', data={'email': user.email,
'password': 'password'})
with self.client as c:
with c.session_transaction() as sess:
self.assertEqual(sess.get('user_id'), user.user_id)
def test_logout(self):
user = User.query.filter(User.email == 'potato@potato').one()
with self.client as c:
with c.session_transaction() as sess:
sess['user_id'] = user.user_id
result = self.client.get('/logout')
with self.client as c:
with c.session_transaction() as sess:
self.assertIsNone(sess.get('user_id'))
def test_bad_login(self):
user = User.query.filter(User.email == 'potato@potato').one()
result = self.client.post('/login', data={'email': user.email,
'password': 'not the correct password'})
with self.client as c:
with c.session_transaction() as sess:
self.assertIsNone(sess.get('user_id'))
def test_register_page_shows(self):
result = self.client.get('/register')
self.assertIn(b'Repeat Password', result.data)
def test_register_user(self):
result = self.client.post('/register', data={'email': 'testemail@email',
'password': 'totalysecret', 'confirm': 'totalysecret'})
user = User.query.filter(User.email == 'testemail@email').one()
self.assertTrue(user)
def test_bad_register_user(self):
result = self.client.post('/register', data={'email': 'potato@potato',
'password': 'nope', 'confirm': 'no'})
user = User.query.filter(User.email == 'testemail@email').first()
self.assertFalse(user)
def test_user_logged_out_user_page(self):
result = self.client.get('/user', follow_redirects = True)
self.assertNotIn(b'Patterns You Created', result.data)
self.assertIn(b'Email Address', result.data)
def test_user_logged_out_new_pattern_page(self):
result = self.client.get('/patterns/new', follow_redirects = True)
self.assertNotIn(b'patternMakerReact.js', result.data)
self.assertIn(b'Email Address', result.data)
def test_user_logged_in_user_page(self):
user = User.query.filter(User.email=='fry@potato').one()
with self.client as c:
with c.session_transaction() as sess:
sess['user_id'] = user.user_id
result = self.client.get('/user', follow_redirects = True)
self.assertIn(b'Your Patterns', result.data)
self.assertNotIn(b'Email Address', result.data)
def test_user_logged_in_new_pattern_page(self):
user = User.query.filter(User.email=='fry@potato').one()
with self.client as c:
with c.session_transaction() as sess:
sess['user_id'] = user.user_id
result = self.client.get('/patterns/new', follow_redirects = True)
self.assertIn(b'patternMakerTranslated.js', result.data)
self.assertNotIn(b'Email Address', result.data)
def test_pattern_save(self):
user = User.query.filter(User.email == 'fry@potato').one()
pattern_name = 'new_save'
pattern_svg = 'would be SVG code'
pattern_text = 'knit instructions'
self.assertEqual(Pattern.query.filter(Pattern.pattern_name == pattern_name).all(),[])
with self.client as c:
with c.session_transaction() as sess:
sess['user_id'] = user.user_id
result = self.client.post('/save', data = {'patternText': pattern_text,
'svgString': pattern_svg, 'name': pattern_name})
pattern = Pattern.query.get(int(result.data))
self.assertTrue(pattern)
self.assertEqual(pattern.pattern_name,pattern_name)
self.assertEqual(pattern.user_id,user.user_id)
file = open(f'static/patternSVGs/{pattern.pattern_id}.svg')
text = file.readline()
file.close()
self.assertEqual(text,pattern_svg)
if __name__ == '__main__':
unittest.main()