Skip to content

Commit cd6f722

Browse files
author
tsv2013
committed
Added unit tests
1 parent 36d322a commit cd6f722

File tree

3 files changed

+265
-0
lines changed

3 files changed

+265
-0
lines changed

.vscode/settings.json

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"python.testing.unittestArgs": [
3+
"-v",
4+
"-s",
5+
"./tests",
6+
"-p",
7+
"*_test.py"
8+
],
9+
"python.testing.pytestEnabled": false,
10+
"python.testing.unittestEnabled": true
11+
}

tests/app_test.py

+138
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
import unittest
2+
import json
3+
from app import app
4+
5+
class TestApp(unittest.TestCase):
6+
def setUp(self):
7+
app.testing = True
8+
self.client = app.test_client()
9+
self.session = {}
10+
11+
app.config['SESSION_TYPE'] = 'null'
12+
app.config['TESTING'] = True
13+
14+
def test_get_active_surveys(self):
15+
with self.client:
16+
response = self.client.get('/api/getActive')
17+
data = json.loads(response.data)
18+
19+
self.assertEqual(response.status_code, 200)
20+
self.assertGreater(len(data), 0)
21+
self.assertIn('id', data[0])
22+
self.assertIn('name', data[0])
23+
24+
def test_get_survey_exists(self):
25+
with self.client:
26+
get_active = self.client.get('/api/getActive')
27+
first_id = json.loads(get_active.data)[0]['id']
28+
29+
response = self.client.get(f'/api/getSurvey?surveyId={first_id}')
30+
data = json.loads(response.data)
31+
32+
self.assertEqual(response.status_code, 200)
33+
self.assertEqual(data['id'], first_id)
34+
35+
def test_get_survey_not_exists(self):
36+
with self.client:
37+
response = self.client.get('/api/getSurvey?surveyId=9999')
38+
self.assertEqual(response.status_code, 200)
39+
self.assertIsNone(json.loads(response.data))
40+
41+
def test_change_name(self):
42+
with self.client:
43+
create_resp = self.client.get('/api/create?name=Test%20Survey')
44+
survey = json.loads(create_resp.data)
45+
46+
new_name = "New Name"
47+
response = self.client.get(
48+
f'/api/changeName?id={survey["id"]}&name={new_name}'
49+
)
50+
updated = json.loads(response.data)
51+
52+
self.assertEqual(updated['name'], new_name)
53+
self.assertEqual(updated['id'], survey['id'])
54+
55+
def test_create_survey(self):
56+
with self.client:
57+
response = self.client.get('/api/create?name=Test%20Create')
58+
data = json.loads(response.data)
59+
60+
self.assertEqual(response.status_code, 200)
61+
self.assertEqual(data['name'], 'Test Create')
62+
self.assertIsNotNone(data['id'])
63+
64+
def test_change_json(self):
65+
with self.client:
66+
create_resp = self.client.get('/api/create')
67+
survey = json.loads(create_resp.data)
68+
69+
test_json = {'question': 'Test?'}
70+
response = self.client.post(
71+
'/api/changeJson',
72+
json={'id': survey['id'], 'json': test_json}
73+
)
74+
updated = json.loads(response.data)
75+
76+
self.assertEqual(updated['json'], test_json)
77+
78+
def test_post_results(self):
79+
with self.client:
80+
post_id = '123'
81+
test_data = {'answer': 42}
82+
83+
response = self.client.post(
84+
'/api/post',
85+
json={'postId': post_id, 'surveyResult': test_data}
86+
)
87+
88+
self.assertEqual(response.status_code, 200)
89+
self.assertEqual(json.loads(response.data), {})
90+
91+
def test_delete_survey(self):
92+
with self.client:
93+
create_resp = self.client.get('/api/create')
94+
survey = json.loads(create_resp.data)
95+
96+
response = self.client.get(f'/api/delete?id={survey["id"]}')
97+
data = json.loads(response.data)
98+
99+
self.assertEqual(data['id'], survey['id'])
100+
101+
def test_get_results(self):
102+
with self.client:
103+
post_id = 'results_test'
104+
test_data = {'data': 'test'}
105+
106+
self.client.post(
107+
'/api/post',
108+
json={'postId': post_id, 'surveyResult': test_data}
109+
)
110+
111+
response = self.client.get(f'/api/results?postId={post_id}')
112+
data = json.loads(response.data)
113+
114+
self.assertEqual(len(data['data']), 1)
115+
self.assertEqual(data['data'][0], test_data)
116+
117+
@unittest.skip("it doesn't work properly yet")
118+
def test_static_routes(self):
119+
routes = [
120+
'/',
121+
'/about',
122+
'/run/test',
123+
'/edit/123',
124+
'/results/456'
125+
]
126+
127+
for route in routes:
128+
with self.subTest(route=route):
129+
response = self.client.get(route)
130+
self.assertEqual(response.status_code, 200)
131+
self.assertIn(b'index.html', response.data)
132+
133+
def test_invalid_route(self):
134+
response = self.client.get('/invalid-route')
135+
self.assertEqual(response.status_code, 404)
136+
137+
if __name__ == '__main__':
138+
unittest.main()

tests/inmemorydbadapter_test.py

+116
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
import unittest
2+
from inmemorydbadapter import InMemoryDBAdapter
3+
from demo_surveys import demo_data
4+
5+
class TestInMemoryDBAdapter(unittest.TestCase):
6+
def setUp(self):
7+
self.session = {}
8+
self.adapter = InMemoryDBAdapter(self.session)
9+
10+
def test_initialization(self):
11+
self.assertEqual(self.adapter.current_id, len(demo_data["surveys"]) + 1)
12+
13+
def test_get_table_existing(self):
14+
self.session["surveys"] = [{"test": "data"}]
15+
table = self.adapter.get_table("surveys")
16+
self.assertEqual(table, [{"test": "data"}])
17+
18+
def test_get_table_new(self):
19+
table = self.adapter.get_table("new_table")
20+
self.assertEqual(table, [])
21+
self.assertIn("new_table", self.session)
22+
23+
def test_find_by_id_found(self):
24+
objects = [{"id": "1"}, {"id": "2"}]
25+
result = self.adapter.find_by_id(objects, "1")
26+
self.assertEqual(result, {"id": "1"})
27+
28+
def test_find_by_id_not_found(self):
29+
objects = [{"id": "1"}]
30+
result = self.adapter.find_by_id(objects, "2")
31+
self.assertIsNone(result)
32+
33+
def test_add_survey_with_name(self):
34+
new_survey = self.adapter.add_survey("Test Survey")
35+
self.assertEqual(new_survey["name"], "Test Survey")
36+
self.assertEqual(new_survey["id"], str(len(demo_data["surveys"]) + 1))
37+
self.assertEqual(len(self.adapter.get_table("surveys")), 1)
38+
39+
def test_add_survey_without_name(self):
40+
new_survey = self.adapter.add_survey(None)
41+
expected_name = f"{demo_data['default_name']} {self.adapter.current_id - 1}"
42+
self.assertEqual(new_survey["name"], expected_name)
43+
44+
def test_post_results_new_post(self):
45+
post_id = "123"
46+
test_data = {"answer": 42}
47+
self.adapter.post_results(post_id, test_data)
48+
results = self.adapter.get_results(post_id)
49+
self.assertEqual(len(results["data"]), 1)
50+
self.assertEqual(results["data"][0], test_data)
51+
52+
def test_post_results_existing_post(self):
53+
post_id = "123"
54+
self.adapter.post_results(post_id, {"data": 1})
55+
self.adapter.post_results(post_id, {"data": 2})
56+
results = self.adapter.get_results(post_id)
57+
self.assertEqual(len(results["data"]), 2)
58+
59+
def test_get_results_not_exists(self):
60+
results = self.adapter.get_results("non_existent")
61+
self.assertIsNone(results)
62+
63+
def test_delete_survey_exists(self):
64+
survey = {"id": "1", "name": "Test"}
65+
self.adapter.get_table("surveys").append(survey)
66+
result = self.adapter.delete_survey("1")
67+
self.assertEqual(result, survey)
68+
self.assertEqual(len(self.adapter.get_table("surveys")), 0)
69+
70+
def test_delete_survey_not_exists(self):
71+
result = self.adapter.delete_survey("999")
72+
self.assertIsNone(result)
73+
74+
def test_store_survey_update(self):
75+
survey = {"id": "1", "name": "Old", "json": "{}"}
76+
self.adapter.get_table("surveys").append(survey)
77+
updated = self.adapter.store_survey("1", "New", '{"new": "data"}')
78+
self.assertEqual(updated["json"], '{"new": "data"}')
79+
80+
def test_store_survey_create(self):
81+
survey = self.adapter.store_survey("100", "New Survey", "{}")
82+
self.assertEqual(survey["name"], "New Survey")
83+
self.assertIn(survey, self.adapter.get_table("surveys"))
84+
85+
def test_change_name_exists(self):
86+
survey = {"id": "1", "name": "Old"}
87+
self.adapter.get_table("surveys").append(survey)
88+
self.adapter.change_name("1", "New")
89+
self.assertEqual(survey["name"], "New")
90+
91+
def test_change_name_not_exists(self):
92+
result = self.adapter.change_name("999", "New")
93+
self.assertIsNone(result)
94+
95+
def test_get_surveys_initial_load(self):
96+
surveys = self.adapter.get_surveys()
97+
self.assertEqual(len(surveys), len(demo_data["surveys"]))
98+
self.assertEqual(len(self.session["results"]), len(demo_data["results"]))
99+
100+
def test_get_surveys_subsequent_calls(self):
101+
self.adapter.get_surveys()
102+
new_survey = self.adapter.add_survey("Test")
103+
surveys = self.adapter.get_surveys()
104+
self.assertIn(new_survey, surveys)
105+
106+
def test_get_survey_exists(self):
107+
self.adapter.get_surveys()
108+
survey = self.adapter.get_survey("1")
109+
self.assertEqual(survey["id"], "1")
110+
111+
def test_get_survey_not_exists(self):
112+
survey = self.adapter.get_survey("999")
113+
self.assertIsNone(survey)
114+
115+
if __name__ == '__main__':
116+
unittest.main()

0 commit comments

Comments
 (0)