Skip to content

Commit 17f8467

Browse files
committed
SDK-1196: Copy device location values validation from Java
implementation
1 parent 93a75fb commit 17f8467

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed

yoti_python_sdk/dynamic_sharing_service/extension/location_constraint_extension_builder.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ def __init__(self):
2020
self.__extension["content"]["expected_device_location"] = self.__device_location
2121

2222
def with_latitude(self, latitude):
23+
if not isinstance(latitude, float) and not isinstance(latitude, int):
24+
raise ValueError("Latitude must be float or int")
25+
if not -90 <= latitude <= 90:
26+
raise ValueError("Latitude must be between -90 and 90 degrees")
2327
self.__device_location["latitude"] = latitude
2428
return self
2529

@@ -32,14 +36,26 @@ def with_longtitude(self, longtitude):
3236
return self.with_longitude(longtitude)
3337

3438
def with_longitude(self, longitude):
39+
if not isinstance(longitude, float) and not isinstance(longitude, int):
40+
raise ValueError("Lontitude must be float or int")
41+
if not -180 <= longitude <= 180:
42+
raise ValueError("Longitude must be between -180 and 180 degrees")
3543
self.__device_location["longitude"] = longitude
3644
return self
3745

3846
def with_radius(self, radius):
47+
if not isinstance(radius, float) and not isinstance(radius, int):
48+
raise ValueError("Radius must be float or int")
49+
if not 0 <= radius:
50+
raise ValueError("Radius must be >= 0")
3951
self.__device_location["radius"] = radius
4052
return self
4153

4254
def with_uncertainty(self, uncertainty):
55+
if not isinstance(uncertainty, float) and not isinstance(uncertainty, int):
56+
raise ValueError("Uncertainty must be float or int")
57+
if not 0 <= uncertainty:
58+
raise ValueError("Uncertainty must be >= 0")
4359
self.__device_location["max_uncertainty_radius"] = uncertainty
4460
return self
4561

yoti_python_sdk/tests/dynamic_sharing_service/extension/test_location_constraint_extension_builder.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,61 @@
44
from yoti_python_sdk.dynamic_sharing_service.extension.location_constraint_extension_builder import (
55
LocationConstraintExtensionBuilder,
66
)
7+
import pytest
8+
9+
10+
def test_longitude_validation():
11+
extension = LocationConstraintExtensionBuilder()
12+
with pytest.raises(ValueError):
13+
extension.with_longitude(270.00)
14+
with pytest.raises(ValueError):
15+
extension.with_longitude(-181)
16+
with pytest.raises(ValueError):
17+
extension.with_longitude("27.00")
18+
extension.with_longitude(180.0)
19+
extension.with_longitude(-90)
20+
21+
22+
def test_latitude_validation():
23+
extension = LocationConstraintExtensionBuilder()
24+
with pytest.raises(ValueError):
25+
extension.with_latitude(270.00)
26+
with pytest.raises(ValueError):
27+
extension.with_latitude(-181)
28+
with pytest.raises(ValueError):
29+
extension.with_latitude("27.00")
30+
with pytest.raises(ValueError):
31+
extension.with_latitude(91)
32+
with pytest.raises(ValueError):
33+
extension.with_latitude(-180)
34+
extension.with_latitude(18.0)
35+
extension.with_latitude(-90)
36+
37+
38+
def test_uncertainty_validation():
39+
extension = LocationConstraintExtensionBuilder()
40+
with pytest.raises(ValueError):
41+
extension.with_uncertainty(-1)
42+
with pytest.raises(ValueError):
43+
extension.with_uncertainty(-0.01)
44+
with pytest.raises(ValueError):
45+
extension.with_uncertainty("3")
46+
extension.with_uncertainty(0)
47+
extension.with_uncertainty(1)
48+
extension.with_uncertainty(1e3)
49+
50+
51+
def test_radius_validation():
52+
extension = LocationConstraintExtensionBuilder()
53+
with pytest.raises(ValueError):
54+
extension.with_radius(-1)
55+
with pytest.raises(ValueError):
56+
extension.with_radius(-0.01)
57+
with pytest.raises(ValueError):
58+
extension.with_radius("3")
59+
extension.with_radius(0)
60+
extension.with_radius(1)
61+
extension.with_radius(1e3)
762

863

964
def test_builds_with_given_values():

0 commit comments

Comments
 (0)