Skip to content

Commit dd661f5

Browse files
committed
Increase test coverage
1 parent 90aef2f commit dd661f5

File tree

2 files changed

+87
-4
lines changed

2 files changed

+87
-4
lines changed

pystac/extensions/classification.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -574,8 +574,6 @@ def __init__(self, asset: pystac.Asset):
574574
self.asset = asset
575575
self.asset_href = asset.href
576576
self.properties = asset.extra_fields
577-
if asset.owner is not None and RasterExtension.has_extension(asset.owner):
578-
RasterExtension.ext(self.asset).bands
579577
if asset.owner and isinstance(asset.owner, pystac.Item):
580578
self.additional_read_properties = [asset.owner.properties]
581579

tests/extensions/test_classification.py

Lines changed: 87 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,48 @@ def test_stac_extensions(landsat_item: Item) -> None:
5555
assert ClassificationExtension.has_extension(landsat_item)
5656

5757

58+
def test_fails_on_incompatible_object() -> None:
59+
with pytest.raises(pystac.ExtensionTypeError):
60+
ClassificationExtension.ext("dummy")
61+
62+
63+
def test_classification_object() -> None:
64+
c = Classification.create(
65+
name="dummy",
66+
description="empty class",
67+
value=0,
68+
color_hint="FF00AB"
69+
)
70+
assert c.name == "dummy"
71+
assert c.description == "empty class"
72+
assert c.color_hint == "FF00AB"
73+
assert c.value == 0
74+
75+
assert Classification(c.to_dict()) == c
76+
with pytest.raises(NotImplementedError):
77+
c == "blah"
78+
79+
80+
def test_bitfield_object() -> None:
81+
b = Bitfield.create(
82+
offset=0,
83+
length=1,
84+
classes=[
85+
Classification.create(description="no", value=0),
86+
Classification.create(description="yes", value=1),
87+
],
88+
roles = ["data"],
89+
description = "dummy description",
90+
name = "dummy"
91+
)
92+
assert b.offset == 0
93+
assert b.length == 1
94+
assert len(b.classes) == 2
95+
assert b.roles == ["data"]
96+
assert b.description == "dummy description"
97+
assert b.name == "dummy"
98+
99+
58100
def test_get_schema_uri(landsat_item: Item) -> None:
59101
assert any(
60102
[
@@ -69,7 +111,7 @@ def test_ext_raises_if_item_does_not_conform(plain_item: Item) -> None:
69111
ClassificationExtension.ext(plain_item)
70112

71113

72-
def test_apply(plain_item: Item) -> None:
114+
def test_apply_bitfields(plain_item: Item) -> None:
73115
ClassificationExtension.add_to(plain_item)
74116
ClassificationExtension.ext(plain_item).apply(
75117
bitfields=[
@@ -113,6 +155,37 @@ def test_apply(plain_item: Item) -> None:
113155
)
114156

115157

158+
def test_create_classes(plain_item: Item) -> None:
159+
ClassificationExtension.add_to(plain_item)
160+
ext = ClassificationExtension.ext(plain_item)
161+
ext.apply(
162+
bitfields=[
163+
Bitfield.create(
164+
offset=0,
165+
length=1,
166+
classes=[
167+
Classification.create(description="no", value=0),
168+
Classification.create(description="yes", value=1),
169+
],
170+
)
171+
]
172+
)
173+
ext.classes = [
174+
Classification.create(description="no", value=0),
175+
Classification.create(description="yes", value=1),
176+
]
177+
assert ext.bitfields is None
178+
ext.bitfields = [Bitfield.create(
179+
offset=0,
180+
length=1,
181+
classes=[
182+
Classification.create(description="no", value=0),
183+
Classification.create(description="yes", value=1),
184+
],
185+
)]
186+
assert ext.classes is None
187+
188+
116189
def test_create() -> None:
117190
field = Bitfield.create(
118191
name="cloud_confidence",
@@ -200,6 +273,7 @@ def test_validate_classification(landsat_item: Item) -> None:
200273

201274
def test_add_item_classes(plain_item: Item) -> None:
202275
item_ext = ClassificationExtension.ext(plain_item, add_if_missing=True)
276+
item_ext.__repr__()
203277
assert item_ext.classes is None
204278
item_ext.classes = [Classification.create(description="dummy", value=0)]
205279
assert item_ext.properties[CLASSES_PROP] == [{"value": 0, "description": "dummy"}]
@@ -210,6 +284,7 @@ def test_add_asset_classes(plain_item: Item) -> None:
210284
asset = plain_item.assets["analytic"]
211285
assert CLASSES_PROP not in asset.extra_fields.keys()
212286
asset_ext = ClassificationExtension.ext(asset)
287+
asset_ext.__repr__()
213288
asset_ext.classes = [Classification.create(value=0, description="dummy")]
214289
assert CLASSES_PROP in asset.extra_fields.keys()
215290
assert asset.extra_fields[CLASSES_PROP] == [{"value": 0, "description": "dummy"}]
@@ -220,4 +295,14 @@ def test_item_asset_raster_classes(collection: Collection) -> None:
220295
"cloud-mask-raster"
221296
]
222297
raster_bands = cast(List[RasterBand], RasterExtension.ext(item_asset).bands)
223-
assert ClassificationExtension.ext(raster_bands[0]).classes is not None
298+
raster_bands_ext = ClassificationExtension.ext(raster_bands[0])
299+
raster_bands_ext.__repr__()
300+
assert raster_bands_ext.classes is not None
301+
302+
303+
def test_item_assets_extension(collection: Collection) -> None:
304+
item_asset = ItemAssetsExtension.ext(collection, add_if_missing=True).item_assets[
305+
"cloud-mask-raster"
306+
]
307+
ext = ClassificationExtension.ext(item_asset)
308+
ext.__repr__()

0 commit comments

Comments
 (0)