File tree Expand file tree Collapse file tree
safe_transaction_service/notifications Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -21,6 +21,7 @@ firebase-admin==4.3.0
2121gnosis-py == 2.5.6
2222gunicorn [gevent ]== 20.0.4
2323hexbytes == 0.2.1
24+ packaging >= 19.2
2425psycopg2-binary == 2.8.5
2526redis == 3.5.3
2627requests == 2.24.0
Original file line number Diff line number Diff line change 33
44from django .db import IntegrityError
55
6+ from packaging import version as semantic_version
67from rest_framework import serializers
78
89from gnosis .eth .django .serializers import EthereumAddressField
@@ -23,9 +24,16 @@ class FirebaseDeviceSerializer(serializers.Serializer):
2324
2425 def validate_safes (self , safes : Sequence [str ]):
2526 if SafeContract .objects .filter (address__in = safes ).count () != len (safes ):
26- raise serializers .ValidationError (" At least one Safe provided was not found" )
27+ raise serializers .ValidationError (' At least one Safe provided was not found' )
2728 return safes
2829
30+ def validate_version (self , value : str ):
31+ try :
32+ semantic_version .Version (value )
33+ except semantic_version .InvalidVersion :
34+ raise serializers .ValidationError ('Semantic version was expected' )
35+ return value
36+
2937 def save (self , ** kwargs ):
3038 try :
3139 firebase_device , _ = FirebaseDevice .objects .update_or_create (
Original file line number Diff line number Diff line change @@ -67,11 +67,20 @@ def test_notifications_devices_create_view(self):
6767 self .assertEqual (FirebaseDevice .objects .first ().safes .count (), 2 )
6868
6969 # Use not valid deviceType
70+ previous_device_type = data ['deviceType' ]
7071 data ['deviceType' ] = 'RANGER-MORPHER'
7172 response = self .client .post (reverse ('v1:notifications-devices' ), format = 'json' , data = data )
7273 self .assertIn ('is not a valid choice' , response .content .decode ())
7374 self .assertEqual (response .status_code , status .HTTP_400_BAD_REQUEST )
7475 self .assertEqual (safe_contract .firebase_devices .count (), 1 )
76+ data ['deviceType' ] = previous_device_type
77+
78+ # Use not valid version
79+ data ['version' ] = 'Megazord'
80+ response = self .client .post (reverse ('v1:notifications-devices' ), format = 'json' , data = data )
81+ self .assertIn ('Semantic version was expected' , response .content .decode ())
82+ self .assertEqual (response .status_code , status .HTTP_400_BAD_REQUEST )
83+ self .assertEqual (safe_contract .firebase_devices .count (), 1 )
7584
7685 def test_notifications_devices_delete_view (self ):
7786 safe_contract = SafeContractFactory ()
You can’t perform that action at this time.
0 commit comments