diff options
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) +  | 
