diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-05-01 17:33:17 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-10-15 19:32:59 +0200 |
commit | 99ca4cbcf573cdd80ab525d573b1f0e3ab738057 (patch) | |
tree | ef54ff649355b574b6a0af5789d5aabc73bcace2 /ishtar_common/tests.py | |
parent | 22e1f1f2a167b362ccaa3629c66c64d55aca8dae (diff) | |
download | Ishtar-99ca4cbcf573cdd80ab525d573b1f0e3ab738057.tar.bz2 Ishtar-99ca4cbcf573cdd80ab525d573b1f0e3ab738057.zip |
🗃️ GIS API: database migrations - some logic to manage token request
Diffstat (limited to 'ishtar_common/tests.py')
-rw-r--r-- | ishtar_common/tests.py | 87 |
1 files changed, 86 insertions, 1 deletions
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index 053e19e7c..7582bf163 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -50,16 +50,19 @@ from django.core.exceptions import ValidationError from django.core.files import File as DjangoFile from django.core.files.uploadedfile import SimpleUploadedFile from django.core.management import call_command +from django.db import transaction from django.db.models.fields import BooleanField from django.db.models.fields.related import ForeignKey +from django.db.utils import IntegrityError from django.template.defaultfilters import slugify from django.test import TestCase as BaseTestCase from django.test.client import Client from django.test.runner import DiscoverRunner +from django.utils import timezone from django.utils.translation import gettext_lazy as _ from django.urls import reverse -from ishtar_common import models, models_common, forms_common +from ishtar_common import models, models_common, models_rest, forms_common from ishtar_common import views from ishtar_common.apps import admin_site from ishtar_common.serializers import ( @@ -84,6 +87,7 @@ from archaeological_finds.serializers import FIND_MODEL_LIST from archaeological_warehouse.serializers import WAREHOUSE_MODEL_LIST from ishtar_common.serializers_utils import serialization_info from ishtar_common.utils import ( + get_current_profile, update_data, move_dict_data, rename_and_simplify_media_name, @@ -3601,6 +3605,87 @@ class SheetFilterTest(TestCase): self.assertIn('Bill', content) +class QgisAPITest(TestCase): + def setUp(self): + self.password = "mypassword" + self.user = User.objects.create_user( + "myuser", "myemail@test.com", self.password + ) + + def test_profile_not_set(self): + profile = get_current_profile() + profile.gis_connector = False + profile.save() + # no key generation + req = models_rest.UserRequestToken.objects.create( + user=self.user + ) + token = req.generate_token("AAAAAA") + self.assertFalse( + models_rest.UserRequestToken.objects.filter(pk=req.pk).count() + ) + self.assertFalse(token) # token is not generated + + def test_normal_key_generation(self): + profile = get_current_profile() + profile.gis_connector = True + profile.save() + + req = models_rest.UserRequestToken.objects.create( + user=self.user + ) + with transaction.atomic(): + # only one request is possible by user + try: + with self.assertRaises(IntegrityError): + models_rest.UserRequestToken.objects.create( + user=self.user + ) + except IntegrityError: + pass + self.assertTrue(req.key) + token = req.generate_token("AAAAAA") + # request is deleted + self.assertFalse( + models_rest.UserRequestToken.objects.filter(pk=req.pk).count() + ) + self.assertTrue(token) # token is generated + self.assertTrue(token.key.startswith("AAAAAA0")) + + def test_clean(self): + profile = get_current_profile() + profile.gis_connector = True + profile.save() + req = models_rest.UserRequestToken.objects.create( + user=self.user + ) + models_rest.UserRequestToken.clean_keys() + # request is still valid keep it + self.assertTrue( + models_rest.UserRequestToken.objects.filter(pk=req.pk).count() + ) + + req.created = timezone.now() - datetime.timedelta(seconds=(10*60+1)) + req.save() + models_rest.UserRequestToken.clean_keys() + # request is no more valid + self.assertFalse( + models_rest.UserRequestToken.objects.filter(pk=req.pk).count() + ) + + req = models_rest.UserRequestToken.objects.create( + user=self.user + ) + req.created = timezone.now() - datetime.timedelta(seconds=(10*60+1)) + req.save() + # cannot generate token + self.assertIsNone(req.generate_token("AAAAAA")) + # request is also deleted + self.assertFalse( + models_rest.UserRequestToken.objects.filter(pk=req.pk).count() + ) + + class GeoVectorFormTest(TestCase): fixtures = FILE_FIXTURES |