-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_flaskr.py
133 lines (103 loc) · 4.35 KB
/
test_flaskr.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
import os
import unittest
import json
from flask_sqlalchemy import SQLAlchemy
from flaskr import create_app
from models import setup_db, Question, Category
class TriviaTestCase(unittest.TestCase):
"""This class represents the trivia test case"""
def setUp(self):
"""Define test variables and initialize app."""
self.app = create_app()
self.client = self.app.test_client
self.database_name = "trivia_test"
DB_USER = os.environ.get("DB_USER")
DB_PASSWORD = os.environ.get("DB_PASSWORD")
self.database_path = "postgresql://{}:{}@{}/{}".format(
DB_USER, DB_PASSWORD, '192.168.100.10:5432', self.database_name
)
setup_db(self.app, self.database_path)
# binds the app to the current context
with self.app.app_context():
self.db = SQLAlchemy()
self.db.init_app(self.app)
# create all tables
self.db.create_all()
def tearDown(self):
"""Executed after reach test"""
pass
"""
TODO
Write at least one test for each test for successful operation and for expected errors.
"""
def test_get_paginated_questions(self):
res = self.client().get('/questions')
data = json.loads(res.data)
self.assertEqual(res.status_code, 200)
self.assertTrue(data['questions'])
self.assertTrue(data['categories'])
self.assertTrue(data['current_category'])
self.assertTrue(data['total_questions'])
def test_404_sent_requesting_beyond_valid_page(self):
res = self.client().get('/questions?page=1000')
data = json.loads(res.data)
self.assertEqual(res.status_code, 404)
self.assertEqual(data['success'], False)
self.assertEqual(data['message'], 'Resource Not Found')
def test_get_categories(self):
res = self.client().get('/categories')
data = json.loads(res.data)
self.assertEqual(res.status_code, 200)
self.assertEqual(data['success'], True)
self.assertTrue(data['categories'])
def test_get_questions_by_category(self):
res = self.client().get('/categories/1/questions')
data = json.loads(res.data)
self.assertEqual(res.status_code, 200)
self.assertTrue(data['questions'])
def test_delete_question_by__id(self):
res = self.client().delete('/questions/2')
data = json.loads(res.data)
self.assertEqual(data['success'], True)
self.assertEqual(res.status_code, 200)
def test_404_if_question_does_not_exist(self):
res = self.client().delete('/questions/1000')
data = json.loads(res.data)
self.assertEqual(res.status_code, 404)
self.assertEqual(data['success'], False)
self.assertEqual(data['message'], 'Resource Not Found')
def test_create_question(self):
res = self.client().post('/questions', json={
'question': 'What is Brad Pitts Character in Fight Club?',
'answer': 'Tyler Durden',
'category': 5,
'difficulty': 2,
})
data = json.loads(res.data)
self.assertEqual(res.status_code, 200)
self.assertEqual(data['success'], True)
self.assertTrue(data['total_questions'])
def test_405_if_question_creation_not_allowed(self):
res = self.client().post('/questions/10', json={
'question': 'What is Brad Pitts Character in Fight Club?',
'answer': 'Tyler Durden',
'category': 5,
'difficulty': 2,
})
data = json.loads(res.data)
self.assertEqual(res.status_code, 405)
self.assertEqual(data['success'], False)
self.assertEqual(data['message'], "Method Not Allowed")
def test_search_question(self):
res = self.client().post('/search', json={'searchTerm': 'the'})
data = json.loads(res.data)
self.assertEqual(res.status_code, 200)
self.assertTrue(data['questions'])
def test_quizzes(self):
res = self.client().post('/quizzes', json={'previous_questions': [], 'quiz_category': {'id': '5', 'type': 'Entertainment'}})
data = json.loads(res.data)
self.assertEqual(res.status_code, 200)
self.assertTrue(data['question'])
# Make the tests conveniently executable
if __name__ == "__main__":
unittest.main()