summaryrefslogtreecommitdiff
path: root/archaeological_finds/tests.py
diff options
context:
space:
mode:
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
commit91e2a7bc05b9decd3668bf739e4fbfa457ae01a6 (patch)
treeb03a5ef5abf4b0d1bb222b220e935bff067044cf /archaeological_finds/tests.py
parent39b9d28faf50ec340e69e6389a7eba3e6d99f291 (diff)
downloadIshtar-91e2a7bc05b9decd3668bf739e4fbfa457ae01a6.tar.bz2
Ishtar-91e2a7bc05b9decd3668bf739e4fbfa457ae01a6.zip
API test
Diffstat (limited to 'archaeological_finds/tests.py')
-rw-r--r--archaeological_finds/tests.py96
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)
+