From 279c7df84aac417de6b763184fa92a6a6c8d7149 Mon Sep 17 00:00:00 2001 From: emaric Date: Mon, 22 Jan 2024 15:32:17 +0100 Subject: [PATCH] prosli testovi nakon dodavanja user-a --- .../__pycache__/models.cpython-38.pyc | Bin 1105 -> 1107 bytes .../__pycache__/serializers.cpython-38.pyc | Bin 1685 -> 2110 bytes .../__pycache__/tests.cpython-38.pyc | Bin 2704 -> 2682 bytes .../0010_alter_objektsigurnosti_operater.py | 21 +++++ .../0011_alter_objektsigurnosti_operater.py | 21 +++++ ...r_objektsigurnosti_operater.cpython-38.pyc | Bin 0 -> 911 bytes ...r_objektsigurnosti_operater.cpython-38.pyc | Bin 0 -> 883 bytes plovidba_aplikacija/models.py | 3 +- plovidba_aplikacija/serializers.py | 28 ++++++- plovidba_aplikacija/tests.py | 72 +++++++++++++++--- user/__pycache__/tests.cpython-38.pyc | Bin 206 -> 162 bytes user/tests.py | 66 +++++++++++++++- 12 files changed, 197 insertions(+), 14 deletions(-) create mode 100644 plovidba_aplikacija/migrations/0010_alter_objektsigurnosti_operater.py create mode 100644 plovidba_aplikacija/migrations/0011_alter_objektsigurnosti_operater.py create mode 100644 plovidba_aplikacija/migrations/__pycache__/0010_alter_objektsigurnosti_operater.cpython-38.pyc create mode 100644 plovidba_aplikacija/migrations/__pycache__/0011_alter_objektsigurnosti_operater.cpython-38.pyc diff --git a/plovidba_aplikacija/__pycache__/models.cpython-38.pyc b/plovidba_aplikacija/__pycache__/models.cpython-38.pyc index 29ae890ecd67123e8f7e4200da0444c9b730383e..33cec97ec0c29ebd08df91cd6aa3d198bb6acd43 100644 GIT binary patch delta 143 zcmcb}ahZcRl$V!_0SE*$*QIWr$UB#d4aji-;^GYxw@jBy;Yel95=>zRLe5^6D4`Ut z6z&#=DB%>IU!Yt#i>Plp+G{D`4(q>UVKVwPHIVN5eLweB9P&e&oC}z n6rP;Nq{b*Rc`DORu3H?zt|9S$p*}v7bD3S4M3^UUVV(;BR!t_E delta 141 zcmcc2agl>Jl$V!_0SI)gR;4bR$UB#d707V_;^K7^w@jBw70eP!WzG^#;pk4R_X3*rBoXHr$tI2qaGe0jrB{e6tBz5v*#)XVRlUte87{w;9VcIEQ!~!(w q7QbU?h(~;Auxn7fufL0{&n~KMh_7JL(OSY{zf2xG=A~j#vMB6@CDGb`^2Idiid4nDp~x(2ZLC{Xr}0 zx&tw7%**}#Ub5TGlTMnLM6aN}t`Vy4l59ZJ-H}e6c-?Oqg;k8r;rSe1#6m}I#k&HV z?zVSxyelyBulZ;caFB2K5n=h1rI4~29|18}?T-Iwi=~coR!dXI{pa>1ZIRf2JFG@0&!{jj2 z=g~1&2hXsWS?ueG;w{2DVT15riD?-VLc%G+Hi9+`BLssIm%t%}8ic$E*m(t43IdQk z;79BCp5$52w7XB;NLIK0<_$E}UejmMON0ucN!TQ8yHDO)bCGzFlU|F)FhB%6ltHbe N+)wWothx&-{{zRneBJ;6 delta 234 zcmdldFqM}tl$V!_0SJsOSEepwoyd2E(P-jheJ&P;D7Ih*P4-(-lN(v2HajuiWMtHw zEW;ckXy}<&mY9>7qM)9WpQo;nUo^Rid4Y5kZ%%%8Vsd6yVth(sNn()@(8wZT5Ft3( zmPMLTZgM2cWD~fkChINM;?jcDqFaI``SC@m1x2aFsd*)dC7JnoMS?(Ww-_sKF;;3a z7s*dnU^Qh_njFUJ#H7hSS)W~$O%7zN(qw;jSy^=ulOIH|0|^i=W&;u&OnfXHB9pt> MJs8C%Ut!Mz0F2Z*IsgCw diff --git a/plovidba_aplikacija/__pycache__/tests.cpython-38.pyc b/plovidba_aplikacija/__pycache__/tests.cpython-38.pyc index 1d0ffb75144166e3d7fc727ceb7231016a1e6bfc..3cd87f9f075d4cd7bc67b5bcb7275fd52398671e 100644 GIT binary patch delta 414 zcmbOr`b&f_l$V!_0SN9Cu1oFY-^f?Y#ON})iK&axc``5aK}Mg+=b7E)ynqT)7*m*1 znCCFnGS)C;F=T;ArW(c+mK4^>mMronOet)=j0?CIGAv|dWJqBMX3%8!`z2Scl#^JZ zWTjwYs%L0qtfQcmlb;9V8d~U?n3~m2?qV@wl%KqpWdV;r(1v0jkVBZ5CTFrnGipu# zz$C#c0Tl3_{D}3CWcux&by<5#j2zM}x11>3*YD;~Bm7!f>##~rX5y3(N(TxSgTsx9iIM3a8;i)~LRR6)_M8rE`XKd&AlHj(1DR1Em25zQ ogOP)SgQZA&@+Qv3jM_kX@yWSdT#{BGc>y57!w82g0vrPT0E^mO`v3p{ delta 495 zcmbV|Jxc>Y5Qca5zBXSPHBrH6h!!#834Vd1s34>ag4ie)!9CDJO}M*Qgs5OC1chx= zT(GhfYy=gwva?91V4L4y1aUTkKfqmhnAw@#_nmFUF5?{=kw}o>T1{VDzH!sxQV5AN zdJaJmQJ$bjyeiq#HEiI(DOYNgt6ZzmW2g|D*pjpYT<1nrIi?ljD-~+1o@VQH3Iub* zV|Ks};w@GMKU61m0K&;S$pmuE`P-MH$BXPr^ZoP0zW1h9uIZ+-pZ5@j!&cC3FWD$y2+G!n8btv1g@7XIS{sIz@S(`K!5^L>fUhDbhn;CCzMi!pe(=YJVv8->#xOqG@_VB756wG2a zw+cJ4ZKFHfDcr;@yu@p4m-|WZ++rT{KUmBMH}AZ6lMZu7RvdiC_f~A{P(fX1Vy0q8 zM@2TPXq`!+bWlhJT%Ao#-pyn1?cr6&D8Nc=W+e`|A3gB%;FHblnUi#|R>&OYLN|}F zz6Tq5FYo4?`7OkOc`Uf{S?9`~*~u0Q5l>flPglhe$(@qR%ZyDZp(W4ebeiQfc{m&n zpAb38VP30jwy13Vz8;c$CMsDb?dc@4^CW#L+!BmQimagt!51Ta1ww&C%b`IL@9jwTx?wh7f awRQWg_85IS+-;}!)J#bQD0+6^4&6V1?Gix% literal 0 HcmV?d00001 diff --git a/plovidba_aplikacija/migrations/__pycache__/0011_alter_objektsigurnosti_operater.cpython-38.pyc b/plovidba_aplikacija/migrations/__pycache__/0011_alter_objektsigurnosti_operater.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0bb85e1eb4248d7d71e48dab2093569af2fb5904 GIT binary patch literal 883 zcmah{zi-n(6u$G>j^n1Z0+uqs!jdIw*9xIlv;~PaNTgXTOD8AyYT2>xjL#{GSdd`t z$POb5f6#4+iGKl!AMaw)R4klzPw$uY-uHbs-rNicp097dzz2trZ#KAjTnrBI>U}hV z2wISmMwD9LDV&l;taKxH8MDHR{HH{?!h27I2Q2TrV^K%25$XHi@qf~%CeY9{nM`%x zF=3gdb<$)?YU7tmK%s|I+jsMHF*v}hPtX8~s34I8?4t`_?th|!rcTtsS%Gi_gKi$; zd>1zIUf#_&^INt{cvr6QuUJZ>Ez!Yk0@FQPjmAChRE4_C#3bQKRb;bdn&pXkxVyWz z%afvknyX0;vqop>yp~Eg8CMnH;!vCIe@iA<)z15_@g_wgXU3KDqA*=0IbwtcjMJz- zL;Myqmq`iOVy$Zio^um&j(zh2(C=~nYMvCfm-Ct-Bj&Dtom5pa!McD7 zqyRZx)TkvfTZiNGXM8+5e#y^X937vU-gQR?+JuJ|+=-o7Tb)gKqH4%e`5YF;7kMI6 zWgIav!E$Sq$poY0b3PoOo|>?QX|?-I>ihWn()@V)WIrBjsC7JQ=D16<7axJ1HL8kN zEXU;nww&x-CkO2d9jwTxcPwZ-Z4JNm9$?M{k6P6pTa~nrrboAF G!2STtR|oI_ literal 0 HcmV?d00001 diff --git a/plovidba_aplikacija/models.py b/plovidba_aplikacija/models.py index fad5ea1..281112f 100644 --- a/plovidba_aplikacija/models.py +++ b/plovidba_aplikacija/models.py @@ -13,7 +13,8 @@ class ObjektSigurnosti(models.Model): fotografija = models.CharField(max_length=255, null=True, blank=True) id_ais = models.CharField(max_length=255, null=True, blank=True) simbol_oznaka = models.CharField(max_length=255, null=True, blank=True) - operater = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) + operater = models.ForeignKey("user.User", on_delete=models.SET_NULL, null=True, blank=True) + def __str__(self): return self.naziv diff --git a/plovidba_aplikacija/serializers.py b/plovidba_aplikacija/serializers.py index b5824bf..f87adaf 100644 --- a/plovidba_aplikacija/serializers.py +++ b/plovidba_aplikacija/serializers.py @@ -27,7 +27,7 @@ class ObjektSigurnostiSerializer(serializers.ModelSerializer): objekt = ObjektSigurnosti.objects.create(lokacija=lokacija, **validated_data) return objekt - raise ValidationError("Invalid 'lon' or 'lat' vrijednosti za 'lokacija'.") + raise ValidationError("Nevaljani 'lon' i 'lat' vrijednosti za 'lokacija'.") def to_representation(self, instance): #u sklopu ovog definiran i update @@ -35,3 +35,29 @@ class ObjektSigurnostiSerializer(serializers.ModelSerializer): representation['lon'] = instance.lokacija.x representation['lat'] = instance.lokacija.y return representation + + def update(self, instance, validated_data): + lokacija_data = validated_data.get('lokacija', None) + + if lokacija_data: + try: + lokacija_data = json.loads(lokacija_data) + except (json.JSONDecodeError, TypeError): + raise ValidationError("Nevaljan format za 'lokacija'. Mora biti JSON.") + + if isinstance(lokacija_data, dict): + lon = lokacija_data.get('lon') + lat = lokacija_data.get('lat') + + if lon is not None and lat is not None: + lokacija = Point(lon, lat, srid=3765) + instance.lokacija = lokacija + instance.save() + return instance + + raise ValidationError("Nevaljani 'lon' i 'lat' vrijednosti za 'lokacija'.") + + return super().update(instance, validated_data) + + + diff --git a/plovidba_aplikacija/tests.py b/plovidba_aplikacija/tests.py index c71f8b5..aa75fe5 100644 --- a/plovidba_aplikacija/tests.py +++ b/plovidba_aplikacija/tests.py @@ -1,3 +1,60 @@ +# from django.test import TestCase +# from django.contrib.gis.geos import Point +# from django.urls import reverse +# from rest_framework import status +# from rest_framework.test import APITestCase +# from plovidba_aplikacija.models import ObjektSigurnosti + + +# # Testiranje listanja objekata +# class ObjektSigurnostiListTest(APITestCase): +# def test_list_objekti_sigurnosti(self): +# url = reverse('objektisigurnosti-list') +# response = self.client.get(url) + +# self.assertEqual(response.status_code, status.HTTP_200_OK) + +# # Testiranje stvaranja objekata +# class ObjektSigurnostiCreateTest(APITestCase): +# def setUp(self): +# self.url = reverse('objektisigurnosti-list') + +# def test_create_objekt_sigurnosti(self): +# data = { +# 'lokacija': {'lat': 45.123, 'lon': 18.456}, +# 'naziv': 'test-naziv', +# } +# response = self.client.post(self.url, data, format='json') +# self.assertEqual(response.status_code, status.HTTP_201_CREATED) +# self.assertTrue(ObjektSigurnosti.objects.filter(naziv='test-naziv').exists()) + + +# # Testiranje dohvaćanja pojedinog objekata +# class ObjektSigurnostiDetailTest(APITestCase): +# def setUp(self): +# self.objekt = ObjektSigurnosti.objects.create( +# lokacija=Point(18.456, 45.123), +# naziv='test-naziv', +# ) +# self.url = reverse('objektisigurnosti-detail', args=[self.objekt.pk]) + + +# def test_get_objekt_sigurnosti(self): +# response = self.client.get(self.url) +# self.assertEqual(response.status_code, status.HTTP_200_OK) + +# def test_update_objekt_sigurnosti(self): +# data = { +# 'lokacija': {'type': 'Point', 'coordinates': [45.123,18.456]}, +# 'naziv' : 'updated-naziv', + +# } +# response = self.client.patch(self.url, data, format='json') +# self.assertEqual(response.status_code, status.HTTP_200_OK) + + + + from django.test import TestCase from django.contrib.gis.geos import Point from django.urls import reverse @@ -21,7 +78,7 @@ class ObjektSigurnostiCreateTest(APITestCase): def test_create_objekt_sigurnosti(self): data = { - 'lokacija': {'lat': 45.123, 'lon': 18.456}, + 'lokacija': '{"lat": 45.123, "lon": 18.456}', 'naziv': 'test-naziv', } response = self.client.post(self.url, data, format='json') @@ -45,13 +102,8 @@ class ObjektSigurnostiDetailTest(APITestCase): def test_update_objekt_sigurnosti(self): data = { - 'lokacija': {'lat': 45.123, 'lon': 18.456}, - 'naziv' : 'updated-naziv', - - } + 'lokacija': '{"lat": 45.123, "lon": 18.456}', + 'naziv': 'test-naziv', + } response = self.client.patch(self.url, data, format='json') - self.assertEqual(response.status_code, status.HTTP_200_OK) - - - - + self.assertEqual(response.status_code, status.HTTP_200_OK) \ No newline at end of file diff --git a/user/__pycache__/tests.cpython-38.pyc b/user/__pycache__/tests.cpython-38.pyc index eb59ad010419e1a61c6ea5030d3923520f829496..c3823b23234a4e3a6c6a5a700a6d26c41638d5a9 100644 GIT binary patch delta 75 zcmX@dxQNj?l$V!_0SIo#tV{I=vL1st$bb>ZaRB0C79f$r5X_*-=(m!g2qX+8Cg#Tj E0Jx?K{Qv*} delta 135 zcmZ3)c#g3?l$V!_0SFGSU7l(Wq#uJg$bbpRaRB0C0U(jWkiwY5kjogw$jFew6wIK> z{1Pb2pvicPBP6xB#5u7z)lZY@7I#WkVqSW_UI|dF2xP!Yh9VXq1txyEJ6pws7N-^! L#{`#54E6^AjvyTk diff --git a/user/tests.py b/user/tests.py index 7ce503c..21d258e 100644 --- a/user/tests.py +++ b/user/tests.py @@ -1,3 +1,65 @@ -from django.test import TestCase +# from django.test import TestCase -# Create your tests here. +# from django.urls import reverse +# from rest_framework import status +# from rest_framework.test import APITestCase +# from user.models import Organization, User +# from user.views import user_delete, change_password + + + +# class UserApiTestCase(APITestCase): + +# def setUp(self): + +# self.organization = Organization.objects.create(name="test organization") + +# self.user01 = User.objects.create( +# username="user01", +# email="test@example.com", +# first_name="User", +# last_name="01", +# organization=self.organization +# ) +# self.user01.set_password('test1234') + +# self.user02 = User.objects.create( +# username="user02", +# email="test02@example.com", +# first_name="User", +# last_name="02", +# organization=self.organization +# ) + +# def test_user_delete_forbidden(self): +# self.client.force_authenticate(self.user02) +# url = reverse("user_delete", kwargs={"pk": self.user01.id}) +# response = self.client.delete(url) +# self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + +# def test_user_delete_success(self): +# self.client.force_authenticate(self.user01) +# url = reverse("user_delete", kwargs={"pk": self.user01.id}) +# response = self.client.delete(url) +# self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + +# def test_user_password_change_bad_request(self): +# self.client.force_authenticate(self.user01) +# url = reverse("change_password") +# data = {'old_password': 'wrong-paasword', 'new_password': 'pass1234'} +# response = self.client.put(url, data=data) +# self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + +# def test_user_password_change_too_comon(self): +# self.client.force_authenticate(self.user01) +# url = reverse("change_password") +# data = {'old_password': 'test1234', 'new_password': 'pass1234'} +# response = self.client.put(url, data=data) +# self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + +# def test_user_password_change_success(self): +# self.client.force_authenticate(self.user01) +# url = reverse("change_password") +# data = {'old_password': 'test1234', 'new_password': 'listlabs12'} +# response = self.client.put(url, data=data) +# self.assertEqual(response.status_code, status.HTTP_200_OK)