You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.9 KiB
64 lines
1.9 KiB
import pytest
|
|
import requests
|
|
from typing import Generator
|
|
from bson.objectid import ObjectId
|
|
|
|
from utils import Collection
|
|
|
|
|
|
geolocation_host = "http://localhost:83"
|
|
new_york = {"name": "NewYork", "lat": 40.730610, "lng": -73.935242}
|
|
jersey_city = {"name": "JerseyCity", "lat": 40.719074, "lng": -74.050552}
|
|
|
|
|
|
@pytest.fixture
|
|
def places(demo_db, request) -> Generator[Collection, None, None]:
|
|
collection = Collection(demo_db, "places")
|
|
param = getattr(request, "param", None)
|
|
yield collection
|
|
if param:
|
|
for key in param:
|
|
collection.delete_many("name", param["name"])
|
|
|
|
|
|
@pytest.mark.parametrize("places", [new_york], indirect=True)
|
|
def test_new_location(places):
|
|
requests.post("{0}/location".format(geolocation_host), data=new_york)
|
|
response = places.get({})
|
|
assert response[0]["name"] == new_york["name"]
|
|
|
|
coordinates = response[0]["location"]["coordinates"]
|
|
assert coordinates == [new_york["lng"], new_york["lat"]]
|
|
|
|
|
|
@pytest.mark.parametrize("places", [new_york, jersey_city], indirect=True)
|
|
def test_get_near(places):
|
|
places.upsert(
|
|
ObjectId(b"foo-bar-baaz"),
|
|
{
|
|
"name": new_york["name"],
|
|
"location": {
|
|
"type": "Point",
|
|
"coordinates": [new_york["lng"], new_york["lat"]],
|
|
},
|
|
},
|
|
)
|
|
places.upsert(
|
|
ObjectId(b"foo-bar-quux"),
|
|
{
|
|
"name": jersey_city["name"],
|
|
"location": {
|
|
"type": "Point",
|
|
"coordinates": [jersey_city["lng"], jersey_city["lat"]],
|
|
},
|
|
},
|
|
)
|
|
response = requests.get(
|
|
url="{0}/location/{1}/{2}".format(
|
|
geolocation_host, new_york["lat"], new_york["lng"]
|
|
),
|
|
data={"max_distance": 50000},
|
|
).json()
|
|
|
|
assert response[0]["name"] == new_york["name"]
|
|
assert response[1]["name"] == jersey_city["name"]
|
|
|