Skip to content

Commit 5102b2e

Browse files
committed
tests(): write tests for services api
write tests to cover basic scenarios, coverage of api/models/service 82%.
1 parent b8d82e0 commit 5102b2e

1 file changed

Lines changed: 140 additions & 0 deletions

File tree

rootfs/api/tests/test_services.py

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
from django.contrib.auth.models import User
2+
from django.core.cache import cache
3+
from rest_framework.authtoken.models import Token
4+
5+
from api.models import App
6+
7+
from api.tests import DeisTransactionTestCase
8+
9+
10+
class TestServices(DeisTransactionTestCase):
11+
12+
"""Tests push notification from build system"""
13+
14+
fixtures = ['tests.json']
15+
16+
def setUp(self):
17+
self.user = User.objects.get(username='autotest')
18+
self.token = Token.objects.get(user=self.user).key
19+
self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token)
20+
21+
def tearDown(self):
22+
# make sure every test has a clean slate for k8s mocking
23+
cache.clear()
24+
25+
def test_settings_maintenance(self):
26+
"""
27+
Test that maintenance can be applied
28+
"""
29+
app_id = self.create_app()
30+
app = App.objects.get(id=app_id)
31+
32+
# create service
33+
response = self.client.post(
34+
'/v2/apps/{}/services'.format(app_id),
35+
{'procfile_type': 'test', 'path_pattern': '/testep/notify'}
36+
)
37+
self.assertEqual(response.status_code, 201, response.data)
38+
39+
# maintenance mode & routable sequence
40+
settings = {'maintenance': True}
41+
response = self.client.post(
42+
'/v2/apps/{app_id}/settings'.format(**locals()),
43+
settings)
44+
self.assertEqual(response.status_code, 201, response.data)
45+
self.assertTrue(response.data['maintenance'])
46+
self.assertTrue(app.appsettings_set.latest().maintenance)
47+
48+
settings = {'routable': False}
49+
response = self.client.post(
50+
'/v2/apps/{app_id}/settings'.format(**locals()),
51+
settings)
52+
self.assertEqual(response.status_code, 201, response.data)
53+
self.assertTrue(app.appsettings_set.latest().maintenance)
54+
55+
settings['maintenance'] = False
56+
response = self.client.post(
57+
'/v2/apps/{app_id}/settings'.format(**locals()),
58+
settings)
59+
self.assertEqual(response.status_code, 201, response.data)
60+
self.assertFalse(response.data['maintenance'])
61+
self.assertFalse(app.appsettings_set.latest().maintenance)
62+
63+
response = self.client.post(
64+
'/v2/apps/{app_id}/settings'.format(**locals()),
65+
settings)
66+
self.assertEqual(response.status_code, 409, response.data)
67+
self.assertFalse(app.appsettings_set.latest().maintenance)
68+
69+
def test_service_basic_ops(self):
70+
"""Test basic service operations."""
71+
app_id = self.create_app()
72+
73+
# list non-existing services
74+
response = self.client.get('/v2/apps/{}/services'.format(app_id))
75+
self.assertEqual(response.status_code, 200, response.data)
76+
self.assertEqual(len(response.data['services']), 0)
77+
# create 1st service
78+
response = self.client.post(
79+
'/v2/apps/{}/services'.format(app_id),
80+
{'procfile_type': 'test', 'path_pattern': '/testep/notify'}
81+
)
82+
self.assertEqual(response.status_code, 201, response.data)
83+
# list 1st service
84+
response = self.client.get('/v2/apps/{}/services'.format(app_id))
85+
self.assertEqual(response.status_code, 200, response.data)
86+
self.assertEqual(len(response.data['services']), 1)
87+
expected1 = {
88+
'procfile_type': 'test',
89+
'path_pattern': '/testep/notify'
90+
}
91+
self.assertDictContainsSubset(expected1, response.data['services'][0])
92+
# update 1st service
93+
response = self.client.post(
94+
'/v2/apps/{}/services'.format(app_id),
95+
{'procfile_type': 'test', 'path_pattern': '/testep/notify_new'}
96+
)
97+
self.assertEqual(response.status_code, 201, response.data)
98+
# list 1st service and get new value
99+
response = self.client.get('/v2/apps/{}/services'.format(app_id))
100+
self.assertEqual(response.status_code, 200, response.data)
101+
self.assertEqual(len(response.data['services']), 1)
102+
expected1 = {
103+
'procfile_type': 'test',
104+
'path_pattern': '/testep/notify_new'
105+
}
106+
self.assertDictContainsSubset(expected1, response.data['services'][0])
107+
# create 2nd service
108+
response = self.client.post(
109+
'/v2/apps/{}/services'.format(app_id),
110+
{'procfile_type': 'test2', 'path_pattern': '/testep2/notify'}
111+
)
112+
self.assertEqual(response.status_code, 201, response.data)
113+
# list two services
114+
response = self.client.get('/v2/apps/{}/services'.format(app_id))
115+
self.assertEqual(response.status_code, 200, response.data)
116+
self.assertEqual(len(response.data['services']), 2)
117+
expected2 = {
118+
'procfile_type': 'test2',
119+
'path_pattern': '/testep2/notify'
120+
}
121+
self.assertDictContainsSubset(expected2, response.data['services'][0])
122+
self.assertDictContainsSubset(expected1, response.data['services'][1])
123+
# delete 1st
124+
response = self.client.delete(
125+
'/v2/apps/{}/services'.format(app_id),
126+
{'procfile_type': 'test'}
127+
)
128+
self.assertEqual(response.status_code, 204, response.data)
129+
# delete 2nd
130+
response = self.client.delete(
131+
'/v2/apps/{}/services'.format(app_id),
132+
{'procfile_type': 'test2'}
133+
)
134+
self.assertEqual(response.status_code, 204, response.data)
135+
# delete non-existing (1st again)
136+
response = self.client.delete(
137+
'/v2/apps/{}/services'.format(app_id),
138+
{'procfile_type': 'test'}
139+
)
140+
self.assertEqual(response.status_code, 404, response.data)

0 commit comments

Comments
 (0)