diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-07-15 13:16:58 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-07-15 13:16:58 +0200 |
commit | 91e2a7bc05b9decd3668bf739e4fbfa457ae01a6 (patch) | |
tree | b03a5ef5abf4b0d1bb222b220e935bff067044cf /archaeological_finds/tests.py | |
parent | 39b9d28faf50ec340e69e6389a7eba3e6d99f291 (diff) | |
download | Ishtar-91e2a7bc05b9decd3668bf739e4fbfa457ae01a6.tar.bz2 Ishtar-91e2a7bc05b9decd3668bf739e4fbfa457ae01a6.zip |
API test
Diffstat (limited to 'archaeological_finds/tests.py')
-rw-r--r-- | archaeological_finds/tests.py | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index 6426cf38b..8cde0f0d2 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -17,9 +17,13 @@ # See the file COPYING for details. +from copy import deepcopy import datetime import json +from rest_framework.test import APITestCase +from rest_framework.authtoken.models import Token + from django.conf import settings from django.contrib.auth.models import User, Permission, ContentType from django.contrib.gis.geos import GEOSGeometry @@ -2029,3 +2033,95 @@ class AutocompleteTest(AutocompleteTestBase, TestCase): ) find.base_finds.add(base_find) return find, None + + +class PublicAPITest(FindInit, APITestCase): + fixtures = FIND_FIXTURES + model = models.Find + + def setUp(self): + self.create_finds(data_base={"label": u"Find 1"}, force=True) + self.basket = models.FindBasket.objects.create( + slug="my-basket", label="My basket", + user=IshtarUser.objects.get(pk=self.get_default_user().pk)) + for find in self.finds: + self.basket.items.add(find) + self.username = 'myuser' + self.password = 'mypassword' + user = User.objects.create_user(self.username, 'myemail@test.com', + self.password) + self.auth_token = 'Token '+ Token.objects.create(user=user).key + + def test_authentication(self): + url = reverse('api-public-find') + "?basket=my-basket" + response = self.client.get(url, format='json') + self.assertEqual(response.status_code, 401) + response = self.client.get(url, format='json', + HTTP_AUTHORIZATION=self.auth_token) + self.assertEqual(response.status_code, 200) + + def test_basket(self): + # unknown basket + url = reverse('api-public-find') + "?basket=non-exist-basket" + response = self.client.get(url, format='json', + HTTP_AUTHORIZATION=self.auth_token) + self.assertEqual(response.status_code, 200) + content = response.content.decode() + res = json.loads(content) + self.assertEqual(res, []) + + # basket is not public + url = reverse('api-public-find') + "?basket=my-basket" + response = self.client.get(url, format='json', + HTTP_AUTHORIZATION=self.auth_token) + self.assertEqual(response.status_code, 200) + content = response.content.decode() + res = json.loads(content) + self.assertEqual(res, []) + + # ok + self.basket.public = True + self.basket.save() + response = self.client.get(url, format='json', + HTTP_AUTHORIZATION=self.auth_token) + self.assertEqual(response.status_code, 200) + content = response.content.decode() + res = json.loads(content) + self.assertEqual(len(res), 1) + + def test_basket_content(self): + find = self.finds[0] + find.denomination = "denomination" + ceram = models.MaterialType.objects.get(txt_idx='ceramic') + find.material_types.add(ceram) + find.save() + + url = reverse('api-public-find') + "?basket=my-basket" + self.basket.public = True + self.basket.save() + response = self.client.get(url, format='json', + HTTP_AUTHORIZATION=self.auth_token) + self.assertEqual(response.status_code, 200) + content = response.content.decode() + res = json.loads(content) + expected_results = [ + ((0, 'denomination',), 'denomination'), + ((0, 'materials', 0), 'Céramique'), + ((0, 'base-finds', 0, 'context-record', 'label'), + 'Context record'), + ((0, 'base-finds', 0, 'context-record', 'town'), + 'default_town (12345)'), + ((0, 'base-finds', 0, 'context-record', 'operation', 'year'), 2010), + ] + for path, result in expected_results: + path = list(reversed(path)) + value = deepcopy(res) + while path: + key = path.pop() + if isinstance(key, int): + self.assertTrue(len(value) > key) + else: + self.assertIn(key, value) + value = value[key] + self.assertEqual(value, result) + |