blob: 43acf1d7ab162095dfaf80b9550abe131e8893ab [file] [log] [blame]
Dirk Vogtc9e10ab2016-10-12 13:58:15 +02001from django.contrib.auth.models import User
Dirk Vogtf2a33422016-10-11 17:17:26 +02002from rest_framework.test import APITestCase
3from rest_framework.test import APIClient
Dirk Vogtc9e10ab2016-10-12 13:58:15 +02004import datetime
Dirk Vogtf130c752016-08-23 14:45:01 +02005
6# Create your tests here.
Dirk Vogtf2a33422016-10-11 17:17:26 +02007
8
9class DeviceTestCase(APITestCase):
10
11 def setUp(self):
12 pass
13
14 def test(self):
15 request = self.client.post("/hiccup/api/v1/devices/register/", {})
16 self.assertTrue("token" in request.data)
17 self.assertTrue("uuid" in request.data)
18 self.assertEqual(request.status_code, 200)
19
20# Create your tests here.
21
22
23class ListDevicesTestCase(APITestCase):
24
25 def setUp(self):
26 self.password = "test"
27 self.admin = User.objects.create_superuser(
28 'myuser', 'myemail@test.com', self.password)
29 self.client.post("/hiccup/api/v1/devices/register/", {})
30 request = self.client.post("/hiccup/api/v1/devices/register/", {})
31 self.uuid_to_retrieve = request.data['uuid']
32 self.token_to_retrieve = request.data['token']
33 request = self.client.post("/hiccup/api/v1/devices/register/", {})
34 self.uuid_to_delete = request.data['uuid']
35 self.token_to_delete = request.data['token']
36
37 def test_device_list(self):
38 client = APIClient()
39 client.login(username='myuser', password='test')
40 request = client.get("/hiccup/api/v1/devices/", {})
41 self.assertTrue("uuid" in request.data[1])
42 self.assertTrue(len(request.data) >= 3)
43 self.assertEqual(request.status_code, 200)
44 client.logout()
45
46 def test_device_list_unauth(self):
47 client = APIClient()
48 request = client.get("/hiccup/api/v1/devices/", {})
49 self.assertEqual(request.status_code, 401)
50
51 def test_retrieve_device_auth(self):
52 client = APIClient()
53 client.login(username='myuser', password='test')
54 request = client.get(
55 "/hiccup/api/v1/devices/{}/".format(self.uuid_to_retrieve), {})
56 self.assertEqual(request.status_code, 200)
57 self.assertEqual(request.data['uuid'], str(self.uuid_to_retrieve))
58 self.assertEqual(request.data['token'], self.token_to_retrieve)
59 client.logout()
60
61 def test_retrieve_device_unauth(self):
62 client = APIClient()
63 request = client.get(
64 "/hiccup/api/v1/devices/{}/".format(self.uuid_to_retrieve), {})
65 self.assertEqual(request.status_code, 401)
66
67 def test_delete_device_auth(self):
68 client = APIClient()
69 client.login(username='myuser', password='test')
70 url = "/hiccup/api/v1/devices/{}/".format(self.uuid_to_delete)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020071 request = client.delete(
72 url.format(self.uuid_to_delete), {})
73 self.assertEqual(request.status_code, 204)
74 request = client.delete(
75 url.format(self.uuid_to_delete), {})
76 self.assertEqual(request.status_code, 404)
Dirk Vogtf2a33422016-10-11 17:17:26 +020077 client.logout()
78
Dirk Vogtf2a33422016-10-11 17:17:26 +020079
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020080class HeartbeatListTestCase(APITestCase):
Dirk Vogtf2a33422016-10-11 17:17:26 +020081
82 def setUp(self):
83 self.password = "test"
84 self.admin = User.objects.create_superuser(
85 'myuser', 'myemail@test.com', self.password)
86 # we need a device
87 request = self.client.post("/hiccup/api/v1/devices/register/", {})
88 self.uuid = request.data['uuid']
89 self.token = request.data['token']
90 request = self.client.post("/hiccup/api/v1/devices/register/", {})
91 self.other_uuid = request.data['uuid']
92 self.other_token = request.data['token']
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020093 self.data = self.create_dummy_data(self.uuid)
94 self.url = "/hiccup/api/v1/heartbeats/"
Dirk Vogtf2a33422016-10-11 17:17:26 +020095
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020096 def create_dummy_data(self, uuid="not set"):
97 return {
98 'uuid': uuid,
99 'app_version': 2,
100 'uptime': "2 Hours",
101 'build_fingerprint': "models.CharField(max_length=200)",
102 'date': str(datetime.datetime(year=2016, month=1, day=1))
103 }
104
105 def test_create_no_auth(self):
Dirk Vogtf2a33422016-10-11 17:17:26 +0200106 client = APIClient()
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200107 request = client.post(self.url, self.data)
Dirk Vogtf2a33422016-10-11 17:17:26 +0200108 self.assertEqual(request.status_code, 401)
109
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200110 def test_create_as_admin(self):
Dirk Vogtf2a33422016-10-11 17:17:26 +0200111 client = APIClient()
112 client.login(username='myuser', password='test')
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200113 request = client.post(self.url, self.data)
Dirk Vogtf2a33422016-10-11 17:17:26 +0200114 self.assertEqual(request.status_code, 201)
115 client.logout()
116
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200117 def test_create_as_admin_not_existing_device(self):
Dirk Vogtf2a33422016-10-11 17:17:26 +0200118 client = APIClient()
119 client.login(username='myuser', password='test')
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200120 request = client.post(self.url,
121 self.create_dummy_data())
Dirk Vogtf2a33422016-10-11 17:17:26 +0200122 self.assertEqual(request.status_code, 404)
123 client.logout()
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200124
125 def test_create_as_uuid_owner(self):
Dirk Vogtf2a33422016-10-11 17:17:26 +0200126 client = APIClient()
127 client.credentials(HTTP_AUTHORIZATION='Token ' + self.token)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200128 request = client.post(self.url,
129 self.create_dummy_data(self.uuid))
Dirk Vogtf2a33422016-10-11 17:17:26 +0200130 self.assertEqual(request.status_code, 201)
131 client.credentials()
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200132
133 def test_create_as_uuid_not_owner(self):
Dirk Vogtf2a33422016-10-11 17:17:26 +0200134 client = APIClient()
135 client.credentials(HTTP_AUTHORIZATION='Token ' + self.token)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200136 request = client.post(self.url,
137 self.create_dummy_data(self.other_uuid))
138 self.assertEqual(request.status_code, 403)
Dirk Vogtf2a33422016-10-11 17:17:26 +0200139 client.credentials()
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200140
141 def post_heartbeats(self, client, heartbeat, count=5):
142 for i in range(count):
143 client.post(self.url, heartbeat)
144
145 def test_list(self):
146 count = 5
147 client = APIClient()
148 client.login(username='myuser', password='test')
149 self.post_heartbeats(client, self.data, count)
150 request = client.get(self.url)
151 self.assertEqual(request.status_code, 200)
152 self.assertTrue(len(request.data) >= count)
153 client.logout()
154
155 def test_list_noauth(self):
156 count = 5
157 client = APIClient()
158 client.login(username='myuser', password='test')
159 self.post_heartbeats(client, self.data, count)
160 client.logout()
161 request = client.get(self.url)
162 self.assertEqual(request.status_code, 401)
163
164 def test_list_device_owner(self):
165 count = 5
166 client = APIClient()
167 client.credentials(HTTP_AUTHORIZATION='Token ' + self.token)
168 self.post_heartbeats(client, self.data, count)
169 request = client.get(self.url)
170 client.logout()
171 self.assertEqual(request.status_code, 403)
172
173
174class CrashreportListTestCase(HeartbeatListTestCase):
175
176 def setUp(self):
177 self.password = "test"
178 self.admin = User.objects.create_superuser(
179 'myuser', 'myemail@test.com', self.password)
180 # we need a device
181 request = self.client.post("/hiccup/api/v1/devices/register/", {})
182 self.uuid = request.data['uuid']
183 self.token = request.data['token']
184 request = self.client.post("/hiccup/api/v1/devices/register/", {})
185 self.other_uuid = request.data['uuid']
186 self.other_token = request.data['token']
187 self.data = self.create_dummy_data(self.uuid)
188 self.url = "/hiccup/api/v1/crashreports/"
189
190 def create_dummy_data(self, uuid="not set"):
191 return {
192 'uuid': uuid,
193 'is_fake_report': 0,
194 'app_version': 2,
195 'uptime': "2 Hours",
196 'build_fingerprint': "models.CharField(max_length=200)",
197 'boot_reason': "models.CharField(max_length=200)",
198 'power_on_reason': "models.CharField(max_length=200)",
199 'power_off_reason': "models.CharField(max_length=200)",
200 'date': str(datetime.datetime(year=2016, month=1, day=1))
201 }