-
Notifications
You must be signed in to change notification settings - Fork 98
/
tests.py
130 lines (90 loc) · 3.19 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
import unittest
import subprocess
import http.client
import random
class WebTestCase(unittest.TestCase):
"""tests for the WSGI Calculator"""
def setUp(self):
self.server_process = subprocess.Popen(
[
"python",
"calculator.py"
],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
def tearDown(self):
self.server_process.kill()
self.server_process.communicate()
def get_response(self, url):
"""
Helper function to get a response from a given url, using http.client
"""
conn = http.client.HTTPConnection('localhost:8080')
conn.request('GET', url)
response = conn.getresponse()
self.assertEqual(200, response.getcode())
conn.close()
return response
def test_add(self):
"""
A call to /add/a/b yields a + b
"""
a = random.randint(100, 10000)
b = random.randint(100, 10000)
path = "/add/{}/{}".format(a, b)
response = self.get_response(path)
self.assertEqual(200, response.getcode())
self.assertIn(str(a + b).encode(), response.read())
def test_multiply(self):
"""
A call to /multiply/a/b yields a*b
"""
a = random.randint(100, 10000)
b = random.randint(100, 10000)
path = "/multiply/{}/{}".format(a, b)
response = self.get_response(path)
self.assertEqual(200, response.getcode())
self.assertIn(str(a*b).encode(), response.read())
def test_subtract_positive_result(self):
"""
A call to /subtract/a/b yields a - b, for a > b
"""
a = random.randint(10000, 100000)
b = random.randint(100, 1000)
path = "/subtract/{}/{}".format(a, b)
response = self.get_response(path)
self.assertEqual(200, response.getcode())
self.assertIn(str(a - b).encode(), response.read())
def test_subtract_negative_result(self):
"""
A call to /subtract/a/b yields a - b, for a < b
"""
a = random.randint(100, 1000)
b = random.randint(10000, 100000)
path = "/subtract/{}/{}".format(a, b)
response = self.get_response(path)
self.assertEqual(200, response.getcode())
self.assertIn(str(a - b).encode(), response.read())
def test_divide(self):
"""
A call to /divide/a/b yields a/b, for a % b = 0
"""
result = random.randint(2, 10)
b = random.randint(100, 1000)
a = result * b
path = "/divide/{}/{}".format(a, b)
response = self.get_response(path)
self.assertEqual(200, response.getcode())
self.assertIn(str(result).encode(), response.read())
def test_index_instructions(self):
"""
The index page at the root of the server shall include instructions
on how to use the page.
"""
response = self.get_response('/')
self.assertEqual(200, response.getcode())
# We're just testing if the word "add" is present in the index
self.assertIn("add".encode(), response.read())
if __name__ == '__main__':
unittest.main()