-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.py
232 lines (171 loc) · 7.15 KB
/
test.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
import unittest
from selenium import webdriver
from freezegun import freeze_time
from server import app
from model import db, example_data, connect_to_db
import api
from seed import sync_projects
class ServerTests(unittest.TestCase):
"""Tests for my party site."""
def setUp(self):
self.client = app.test_client()
app.config['TESTING'] = True
def test_homepage(self):
result = self.client.get("/")
self.assertIn("projects", result.data)
def test_no_user_yet(self):
result = self.client.get("/")
self.assertIn("Login", result.data)
self.assertNotIn("Logout", result.data)
def test_login_form(self):
result = self.client.get("/login")
self.assertIn("Login", result.data)
self.assertIn("username", result.data)
self.assertNotIn("abc", result.data)
def test_user_no_user(self):
"""Test user page works. """
result = self.client.get("/user", follow_redirects=True)
self.assertIn("Login", result.data)
self.assertIn("password", result.data)
self.assertNotIn("abc", result.data)
def test_project_no_user(self):
""" Test that the project page redirects to login if no current user """
result = self.client.get("/projects", follow_redirects=True)
self.assertIn("Login", result.data)
self.assertIn("password", result.data)
self.assertNotIn("abc", result.data)
@freeze_time("2017-10-31")
class ServerTestsDatabase(unittest.TestCase):
""" Flask tests that use database"""
def setUp(self):
"""Stuff to do before every test."""
# Get the Flask test client
self.client = app.test_client()
# Show Flask errors that happen during tests
app.config['TESTING'] = True
# Connect to test database
connect_to_db(app, "postgresql:///testdb")
# Create tables and add sample data
db.create_all()
example_data()
def f_date():
assert datetime.datetime.now() == datetime.datetime(2017, 10, 31)
def tearDown(self):
"""Do at end of every test."""
db.drop_all()
db.session.close()
def test_login(self):
""" Test login page works. """
result = self.client.post("/login",
data={'username': "abc", 'password': "123"},
follow_redirects=True)
self.assertIn("abc", result.data)
self.assertIn("Logout", result.data)
self.assertIn("Successful", result.data)
self.assertNotIn("password", result.data)
def test_login_fail(self):
""" Test login page works for wrong user info. """
result = self.client.post("/login",
data={'username': "123", 'password': "joe"},
follow_redirects=True)
self.assertIn("username", result.data)
self.assertNotIn("Successful", result.data)
self.assertIn("password", result.data)
@freeze_time("2017-10-31")
class ServerTestsDatabaseSession(unittest.TestCase):
"""Flask tests that use the database."""
def setUp(self):
"""Stuff to do before every test."""
# Get the Flask test client
self.client = app.test_client()
# Show Flask errors that happen during tests
app.config['TESTING'] = True
# Connect to test database
connect_to_db(app, "postgresql:///testdb")
# Create tables and add sample data
db.create_all()
example_data()
def f_date():
assert datetime.datetime.now() == datetime.datetime(2017, 10, 31)
def _mock_post_add_image(project, user, up_image):
pass
api.post_add_image = _mock_post_add_image
def _mock_sync_update(user):
return "test update"
sync_projects = _mock_sync_update
def _mock_post_project_api_update(project, up_notes,
up_status, up_progress, user):
pass
api.post_project_api_update = _mock_post_project_api_update
# add a session
with self.client as c:
with c.session_transaction() as sess:
sess['user'] = 1
def tearDown(self):
"""Do at end of every test."""
db.drop_all()
db.session.close()
def test_user(self):
"""Test user page works. """
result = self.client.get("/user")
self.assertIn("abc", result.data)
self.assertIn("Logout", result.data)
self.assertNotIn("password", result.data)
def test_logout(self):
""" Test logout route """
result = self.client.get("/logout", follow_redirects=True)
self.assertIn("Login", result.data)
self.assertIn("username", result.data)
self.assertNotIn("abc", result.data)
def test_projects(self):
"""Test projects page."""
result = self.client.get("/projects")
self.assertIn("Need Updates", result.data)
self.assertNotIn("basic", result.data)
def test_project_details(self):
"""Test project details page. """
result = self.client.get("/projects/1")
self.assertIn("Logout", result.data)
self.assertIn("knit hat", result.data)
self.assertIn("Test", result.data)
self.assertNotIn("username", result.data)
self.assertIn("https://i.vimeocdn.com/portrait/58832_300x300",
result.data)
def test_project_details_post(self):
"""Test project details page. """
result = self.client.post("/projects/1",
data={'notes': "FINISHED",
'img-url': 'https://cdn0.iconfinder.com/data/icons/the-essential/30/check_ok-512.png',
'status': '2'},
follow_redirects=True)
self.assertIn("Logout", result.data)
self.assertIn("knit hat", result.data)
self.assertIn("Test", result.data)
self.assertIn('FINISHED', result.data)
self.assertNotIn("username", result.data)
self.assertIn("https://i.vimeocdn.com/portrait/58832_300x300",
result.data)
self.assertIn("https://cdn0.iconfinder.com/data/icons/the-essential/30/check_ok-512.png",
result.data)
self.assertIn("Successful", result.data)
def test_user_update(self):
""" Test when a user updates their profile information """
pass
'/user/update'
def test_user_sync(self):
""" Test mock of user sync function """
result = self.client.get("/sync")
self.assertIn("test update", result)
# class SeliniumTest(unittest.TestCase):
# def setUp(self):
# self.browser = webdriver.Chrome("../chromedriver")
# def tearDown(self):
# self.browser.quit()
# def test_title(self):
# self.browser.get('http://localhost:5000/')
# self.assertEqual(self.browser.title, 'Projects')
# def test_login(self):
# self.browser.get('http://localhost:5000/login')
# self.assertEqual(self.browser.title, 'Login')
if __name__ == "__main__":
unittest.main()