11import json
22import random
3+ from copy import deepcopy
34from string import ascii_letters
45
56import pytest
@@ -29,6 +30,28 @@ def naip_collection() -> Collection:
2930 return Collection .from_file (NAIP_COLLECTION_URI )
3031
3132
33+ @pytest .fixture
34+ def sample_scheme () -> StorageScheme :
35+ return StorageScheme .create (
36+ type = StorageSchemeType .AWS_S3 ,
37+ platform = "https://{bucket}.s3.{region}.amazonaws.com" ,
38+ region = "us-west-2" ,
39+ requester_pays = True ,
40+ )
41+
42+
43+ @pytest .fixture
44+ def naip_asset (naip_item : Item ) -> pystac .Asset :
45+ # Grab a random asset with the platform property
46+ return random .choice (
47+ [
48+ _asset
49+ for _asset in naip_item .assets .values ()
50+ if "storage:refs" in _asset .to_dict ()
51+ ]
52+ )
53+
54+
3255def test_to_from_dict () -> None :
3356 with open (NAIP_EXAMPLE_URI ) as f :
3457 item_dict = json .load (f )
@@ -101,6 +124,16 @@ def test_item_ext_add_to(sample_item: Item) -> None:
101124 assert StorageSchemesExtension .get_schema_uri () in sample_item .stac_extensions
102125
103126
127+ def test_catalog_ext_add_to () -> None :
128+ catalog = pystac .Catalog ("stac" , "a catalog" )
129+
130+ assert StorageSchemesExtension .get_schema_uri () not in catalog .stac_extensions
131+
132+ _ = StorageSchemesExtension .ext (catalog , add_if_missing = True )
133+
134+ assert StorageSchemesExtension .get_schema_uri () in catalog .stac_extensions
135+
136+
104137def test_asset_ext_add_to (sample_item : Item ) -> None :
105138 assert StorageSchemesExtension .get_schema_uri () not in sample_item .stac_extensions
106139 asset = sample_item .assets ["thumbnail" ]
@@ -207,28 +240,21 @@ def test_schemes_apply(naip_item: Item) -> None:
207240
208241
209242@pytest .mark .vcr ()
210- def test_refs_apply (naip_item : Item ) -> None :
211- # Grab a random asset with the platform property
212- asset = random .choice (
213- [
214- _asset
215- for _asset in naip_item .assets .values ()
216- if "storage:refs" in _asset .to_dict ()
217- ]
218- )
243+ def test_refs_apply (naip_asset : pystac .Asset ) -> None :
244+ test_refs = ["a_ref" , "b_ref" ]
245+
246+ storage_ext = StorageRefsExtension .ext (naip_asset )
219247
220- storage_ext = StorageRefsExtension . ext ( asset )
248+ storage_ext . apply ( test_refs )
221249
222250 # Get
223- assert storage_ext .refs == asset . extra_fields . get ( "storage:refs" )
251+ assert storage_ext .refs == test_refs
224252
225253 # Set
226254 new_refs = [random .choice (ascii_letters )]
227255 storage_ext .refs = new_refs
228256 assert storage_ext .refs == new_refs
229257
230- naip_item .validate ()
231-
232258
233259def test_add_storage_scheme (naip_item : Item ) -> None :
234260 storage_ext = naip_item .ext .storage
@@ -255,25 +281,30 @@ def test_add_refs(naip_item: Item) -> None:
255281 assert scheme_name_2 in storage_ext .refs
256282
257283
258- def test_storage_scheme_create () -> None :
259- scheme = StorageScheme .create (
260- type = StorageSchemeType .AWS_S3 ,
261- platform = "https://{bucket}.s3.{region}.amazonaws.com" ,
262- region = "us-west-2" ,
263- requester_pays = True ,
264- )
284+ def test_storage_scheme_create (sample_scheme : StorageScheme ) -> None :
285+ assert sample_scheme .type == StorageSchemeType .AWS_S3
286+ assert sample_scheme .platform == "https://{bucket}.s3.{region}.amazonaws.com"
287+ assert sample_scheme .region == "us-west-2"
288+ assert sample_scheme .requester_pays is True
289+
290+ sample_scheme .type = StorageSchemeType .AZURE
291+ sample_scheme .platform = "https://{account}.blob.core.windows.net"
292+ sample_scheme .region = "eastus"
293+ sample_scheme .account = "account"
294+ sample_scheme .requester_pays = False
295+
296+ assert sample_scheme .type == StorageSchemeType .AZURE
297+ assert sample_scheme .platform == "https://{account}.blob.core.windows.net"
298+ assert sample_scheme .region == "eastus"
299+ assert sample_scheme .account == "account"
300+ assert sample_scheme .requester_pays is False
301+
265302
266- assert scheme .type == StorageSchemeType .AWS_S3
267- assert scheme .platform == "https://{bucket}.s3.{region}.amazonaws.com"
268- assert scheme .region == "us-west-2"
269- assert scheme .requester_pays is True
303+ def test_storage_scheme_equality (sample_scheme : StorageScheme ) -> None :
304+ other = deepcopy (sample_scheme )
305+ assert sample_scheme == other
270306
271- scheme .type = StorageSchemeType .AZURE
272- scheme .platform = "https://{account}.blob.core.windows.net"
273- scheme .region = "eastus"
274- scheme .requester_pays = False
307+ other .requester_pays = False
308+ assert sample_scheme != other
275309
276- assert scheme .type == StorageSchemeType .AZURE
277- assert scheme .platform == "https://{account}.blob.core.windows.net"
278- assert scheme .region == "eastus"
279- assert scheme .requester_pays is False
310+ assert sample_scheme != object ()
0 commit comments