|
@@ -1,35 +1,139 @@
|
|
import pytest
|
|
import pytest
|
|
from copy import deepcopy
|
|
from copy import deepcopy
|
|
|
|
+from plib import Station, StationError, StationMap
|
|
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
@pytest.fixture
|
|
-def station_data():
|
|
|
|
|
|
+def js1():
|
|
js = {
|
|
js = {
|
|
- "code": "abdl",
|
|
|
|
- "height": 162.27803882118315,
|
|
|
|
|
|
+ "code": "abkn",
|
|
|
|
+ "height": 219.23325751908123,
|
|
"status": "new",
|
|
"status": "new",
|
|
"location": {
|
|
"location": {
|
|
- "lat": 53.68908284179442,
|
|
|
|
- "lon": 53.64383132493483
|
|
|
|
|
|
+ "lat": 0.0,
|
|
|
|
+ "lon": 15.5
|
|
},
|
|
},
|
|
"xyz": [
|
|
"xyz": [
|
|
- 2243908.9008,
|
|
|
|
- 3048443.7188,
|
|
|
|
- 5116457.9962
|
|
|
|
|
|
+ -90768.799,
|
|
|
|
+ 3777267.336,
|
|
|
|
+ 5121588.168
|
|
]
|
|
]
|
|
}
|
|
}
|
|
|
|
+
|
|
return js
|
|
return js
|
|
|
|
|
|
|
|
|
|
|
|
+@pytest.fixture
|
|
|
|
+def js2():
|
|
|
|
+ js = {
|
|
|
|
+ "code": "abkn",
|
|
|
|
+ "height": 219.23325751908123,
|
|
|
|
+ "status": "new",
|
|
|
|
+ "location": {
|
|
|
|
+ "lat": 0.0,
|
|
|
|
+ "lon": 0.0
|
|
|
|
+ },
|
|
|
|
+ "xyz": [
|
|
|
|
+ -90768.799,
|
|
|
|
+ 3777267.336,
|
|
|
|
+ 5121588.168
|
|
|
|
+ ]
|
|
|
|
+ }
|
|
|
|
+ return js
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+@pytest.fixture
|
|
|
|
+def json_data():
|
|
|
|
+ text = [
|
|
|
|
+ {
|
|
|
|
+ "code": "akya",
|
|
|
|
+ "height": 330.27589765004814,
|
|
|
|
+ "status": "new",
|
|
|
|
+ "location": {
|
|
|
|
+ "lat": 0.0,
|
|
|
|
+ "lon": 0.0
|
|
|
|
+ },
|
|
|
|
+ "xyz": [
|
|
|
|
+ 2078592.977,
|
|
|
|
+ 3354438.194,
|
|
|
|
+ 4994390.812
|
|
|
|
+ ]
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "code": "alek",
|
|
|
|
+ "height": 174.47401913441718,
|
|
|
|
+ "location": {
|
|
|
|
+ "lat": 10.0,
|
|
|
|
+ "lon": 0.0
|
|
|
|
+ },
|
|
|
|
+ "status": "new",
|
|
|
|
+ "xyz": [
|
|
|
|
+ 2959560.1322,
|
|
|
|
+ 2236904.702,
|
|
|
|
+ 5171064.6737
|
|
|
|
+ ]
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "code": "abdl",
|
|
|
|
+ "height": 86.10842919163406,
|
|
|
|
+ "status": "new",
|
|
|
|
+ "location": {
|
|
|
|
+ "lat": 15.5,
|
|
|
|
+ "lon": 15.5
|
|
|
|
+ },
|
|
|
|
+ "xyz": [
|
|
|
|
+ 3025653.429,
|
|
|
|
+ 2742460.808,
|
|
|
|
+ 4883170.747
|
|
|
|
+ ]
|
|
|
|
+ }
|
|
|
|
+ ]
|
|
|
|
+ return text
|
|
|
|
+
|
|
|
|
+
|
|
class TestStation:
|
|
class TestStation:
|
|
- def test_creation(self):
|
|
|
|
|
|
+ def test_creation(self, js1):
|
|
try:
|
|
try:
|
|
- Station(**js)
|
|
|
|
|
|
+ Station(**js1)
|
|
except Exception as e:
|
|
except Exception as e:
|
|
pytest.fail(f"Failed with exception '{type(e)} - {e}'")
|
|
pytest.fail(f"Failed with exception '{type(e)} - {e}'")
|
|
|
|
|
|
for field in ["code", "height", "status", "location"]:
|
|
for field in ["code", "height", "status", "location"]:
|
|
- js_copy = deepcopy(js)
|
|
|
|
- del js["location"]
|
|
|
|
|
|
+ js_copy = deepcopy(js1)
|
|
|
|
+ del js1["location"]
|
|
with pytest.raises(StationError):
|
|
with pytest.raises(StationError):
|
|
- Station(**js)
|
|
|
|
|
|
+ Station(**js1)
|
|
|
|
+
|
|
|
|
+ def test_manual_creator(self):
|
|
|
|
+ st = Station()
|
|
|
|
+
|
|
|
|
+ def test_distance_to(self, js1, js2):
|
|
|
|
+ s1 = Station(**js1)
|
|
|
|
+ s2 = Station(**js2)
|
|
|
|
+ assert s1.distance_to(s2) == 15.5
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class TestStationMap:
|
|
|
|
+ def test_creation(self, js1, js2):
|
|
|
|
+ st1 = Station(**js1)
|
|
|
|
+ st2 = Station(**js2)
|
|
|
|
+ stations = StationMap([st1, st2])
|
|
|
|
+ assert stations["abdl"] == st1
|
|
|
|
+
|
|
|
|
+ def test_load_from_json(self, json_data):
|
|
|
|
+ stations = StationMap.from_json(json_data)
|
|
|
|
+ assert len(stations) == 3
|
|
|
|
+ names = list(stations)
|
|
|
|
+
|
|
|
|
+ import json
|
|
|
|
+ js = json.loads(json_data)
|
|
|
|
+ names_js = [item["code"] for item in js]
|
|
|
|
+ assert names == names_js
|
|
|
|
+
|
|
|
|
+ def test_save_to_json(self, json_data):
|
|
|
|
+ text = StationMap.from_json(json_data).to_json()
|
|
|
|
+ assert text == json_data
|
|
|
|
+
|
|
|
|
+ def test_nearest_station(self, json_data):
|
|
|
|
+ stations = StationMap.from_json(json_data)
|
|
|
|
+ assert stations.nearest("abdl").code == "alek"
|