22import uuid
33from datetime import datetime , timedelta
44
5+ import pytest
6+
57from ..conftest import create_collection , create_item
68
79ROUTES = {
3133}
3234
3335
36+ @pytest .mark .asyncio
3437async def test_post_search_content_type (app_client , ctx ):
3538 params = {"limit" : 1 }
3639 resp = await app_client .post ("/search" , json = params )
3740 assert resp .headers ["content-type" ] == "application/geo+json"
3841
3942
43+ @pytest .mark .asyncio
4044async def test_get_search_content_type (app_client , ctx ):
4145 resp = await app_client .get ("/search" )
4246 assert resp .headers ["content-type" ] == "application/geo+json"
4347
4448
49+ @pytest .mark .asyncio
4550async def test_api_headers (app_client ):
4651 resp = await app_client .get ("/api" )
4752 assert (
@@ -50,11 +55,13 @@ async def test_api_headers(app_client):
5055 assert resp .status_code == 200
5156
5257
58+ @pytest .mark .asyncio
5359async def test_router (app ):
5460 api_routes = set ([f"{ list (route .methods )[0 ]} { route .path } " for route in app .routes ])
5561 assert len (api_routes - ROUTES ) == 0
5662
5763
64+ @pytest .mark .asyncio
5865async def test_app_transaction_extension (app_client , ctx ):
5966 item = copy .deepcopy (ctx .item )
6067 item ["id" ] = str (uuid .uuid4 ())
@@ -64,6 +71,7 @@ async def test_app_transaction_extension(app_client, ctx):
6471 await app_client .delete (f"/collections/{ item ['collection' ]} /items/{ item ['id' ]} " )
6572
6673
74+ @pytest .mark .asyncio
6775async def test_app_search_response (app_client , ctx ):
6876 resp = await app_client .get ("/search" , params = {"ids" : ["test-item" ]})
6977 assert resp .status_code == 200
@@ -75,6 +83,7 @@ async def test_app_search_response(app_client, ctx):
7583 assert resp_json .get ("stac_extensions" ) is None
7684
7785
86+ @pytest .mark .asyncio
7887async def test_app_context_extension (app_client , ctx , txn_client ):
7988 test_item = ctx .item
8089 test_item ["id" ] = "test-item-2"
@@ -108,13 +117,15 @@ async def test_app_context_extension(app_client, ctx, txn_client):
108117 assert matched == 1
109118
110119
120+ @pytest .mark .asyncio
111121async def test_app_fields_extension (app_client , ctx , txn_client ):
112122 resp = await app_client .get ("/search" , params = {"collections" : ["test-collection" ]})
113123 assert resp .status_code == 200
114124 resp_json = resp .json ()
115125 assert list (resp_json ["features" ][0 ]["properties" ]) == ["datetime" ]
116126
117127
128+ @pytest .mark .asyncio
118129async def test_app_fields_extension_query (app_client , ctx , txn_client ):
119130 resp = await app_client .post (
120131 "/search" ,
@@ -128,6 +139,7 @@ async def test_app_fields_extension_query(app_client, ctx, txn_client):
128139 assert list (resp_json ["features" ][0 ]["properties" ]) == ["datetime" , "proj:epsg" ]
129140
130141
142+ @pytest .mark .asyncio
131143async def test_app_fields_extension_no_properties_get (app_client , ctx , txn_client ):
132144 resp = await app_client .get (
133145 "/search" , params = {"collections" : ["test-collection" ], "fields" : "-properties" }
@@ -137,6 +149,7 @@ async def test_app_fields_extension_no_properties_get(app_client, ctx, txn_clien
137149 assert "properties" not in resp_json ["features" ][0 ]
138150
139151
152+ @pytest .mark .asyncio
140153async def test_app_fields_extension_no_properties_post (app_client , ctx , txn_client ):
141154 resp = await app_client .post (
142155 "/search" ,
@@ -150,6 +163,7 @@ async def test_app_fields_extension_no_properties_post(app_client, ctx, txn_clie
150163 assert "properties" not in resp_json ["features" ][0 ]
151164
152165
166+ @pytest .mark .asyncio
153167async def test_app_fields_extension_return_all_properties (app_client , ctx , txn_client ):
154168 item = ctx .item
155169 resp = await app_client .get (
@@ -166,6 +180,7 @@ async def test_app_fields_extension_return_all_properties(app_client, ctx, txn_c
166180 assert feature ["properties" ][expected_prop ] == expected_value
167181
168182
183+ @pytest .mark .asyncio
169184async def test_app_query_extension_gt (app_client , ctx ):
170185 params = {"query" : {"proj:epsg" : {"gt" : ctx .item ["properties" ]["proj:epsg" ]}}}
171186 resp = await app_client .post ("/search" , json = params )
@@ -174,6 +189,7 @@ async def test_app_query_extension_gt(app_client, ctx):
174189 assert len (resp_json ["features" ]) == 0
175190
176191
192+ @pytest .mark .asyncio
177193async def test_app_query_extension_gte (app_client , ctx ):
178194 params = {"query" : {"proj:epsg" : {"gte" : ctx .item ["properties" ]["proj:epsg" ]}}}
179195 resp = await app_client .post ("/search" , json = params )
@@ -182,22 +198,26 @@ async def test_app_query_extension_gte(app_client, ctx):
182198 assert len (resp .json ()["features" ]) == 1
183199
184200
201+ @pytest .mark .asyncio
185202async def test_app_query_extension_limit_lt0 (app_client ):
186203 assert (await app_client .post ("/search" , json = {"limit" : - 1 })).status_code == 400
187204
188205
206+ @pytest .mark .asyncio
189207async def test_app_query_extension_limit_gt10000 (app_client ):
190208 resp = await app_client .post ("/search" , json = {"limit" : 10001 })
191209 assert resp .status_code == 200
192210 assert resp .json ()["context" ]["limit" ] == 10000
193211
194212
213+ @pytest .mark .asyncio
195214async def test_app_query_extension_limit_10000 (app_client ):
196215 params = {"limit" : 10000 }
197216 resp = await app_client .post ("/search" , json = params )
198217 assert resp .status_code == 200
199218
200219
220+ @pytest .mark .asyncio
201221async def test_app_sort_extension (app_client , txn_client , ctx ):
202222 first_item = ctx .item
203223 item_date = datetime .strptime (
@@ -223,6 +243,7 @@ async def test_app_sort_extension(app_client, txn_client, ctx):
223243 assert resp_json ["features" ][1 ]["id" ] == second_item ["id" ]
224244
225245
246+ @pytest .mark .asyncio
226247async def test_search_invalid_date (app_client , ctx ):
227248 params = {
228249 "datetime" : "2020-XX-01/2020-10-30" ,
@@ -233,6 +254,7 @@ async def test_search_invalid_date(app_client, ctx):
233254 assert resp .status_code == 400
234255
235256
257+ @pytest .mark .asyncio
236258async def test_search_point_intersects (app_client , ctx ):
237259 point = [150.04 , - 33.14 ]
238260 intersects = {"type" : "Point" , "coordinates" : point }
@@ -248,6 +270,7 @@ async def test_search_point_intersects(app_client, ctx):
248270 assert len (resp_json ["features" ]) == 1
249271
250272
273+ @pytest .mark .asyncio
251274async def test_search_point_does_not_intersect (app_client , ctx ):
252275 point = [15.04 , - 3.14 ]
253276 intersects = {"type" : "Point" , "coordinates" : point }
@@ -263,6 +286,7 @@ async def test_search_point_does_not_intersect(app_client, ctx):
263286 assert len (resp_json ["features" ]) == 0
264287
265288
289+ @pytest .mark .asyncio
266290async def test_datetime_non_interval (app_client , ctx ):
267291 dt_formats = [
268292 "2020-02-12T12:30:22+00:00" ,
@@ -284,6 +308,7 @@ async def test_datetime_non_interval(app_client, ctx):
284308 assert resp_json ["features" ][0 ]["properties" ]["datetime" ][0 :19 ] == dt [0 :19 ]
285309
286310
311+ @pytest .mark .asyncio
287312async def test_bbox_3d (app_client , ctx ):
288313 australia_bbox = [106.343365 , - 47.199523 , 0.1 , 168.218365 , - 19.437288 , 0.1 ]
289314 params = {
@@ -296,6 +321,7 @@ async def test_bbox_3d(app_client, ctx):
296321 assert len (resp_json ["features" ]) == 1
297322
298323
324+ @pytest .mark .asyncio
299325async def test_search_line_string_intersects (app_client , ctx ):
300326 line = [[150.04 , - 33.14 ], [150.22 , - 33.89 ]]
301327 intersects = {"type" : "LineString" , "coordinates" : line }
0 commit comments