| 
13 | 13 | 
 
  | 
14 | 14 | EXAMPLE_URI = TestCases.get_path("data-files/view/example-landsat8.json")  | 
15 | 15 | 
 
  | 
16 |  | - | 
17 | 16 | @pytest.fixture  | 
18 | 17 | def item() -> Item:  | 
19 | 18 |     return pystac.Item.from_file(EXAMPLE_URI)  | 
20 | 19 | 
 
  | 
21 | 20 | 
 
  | 
 | 21 | +@pytest.fixture  | 
 | 22 | +def collection() -> Collection:  | 
 | 23 | +    return Collection.from_file( TestCases.get_path(  | 
 | 24 | +        "data-files/view/collection-with-summaries.json"  | 
 | 25 | +    ))  | 
 | 26 | + | 
 | 27 | + | 
22 | 28 | def test_to_from_dict() -> None:  | 
23 | 29 |     with open(EXAMPLE_URI) as f:  | 
24 | 30 |         d = json.load(f)  | 
@@ -223,97 +229,90 @@ def test_should_raise_exception_when_passing_invalid_extension_object() -> None:  | 
223 | 229 |         ViewExtension.ext(object())  # type: ignore  | 
224 | 230 | 
 
  | 
225 | 231 | 
 
  | 
226 |  | -class ViewSummariesTest(unittest.TestCase):  | 
227 |  | -    def setUp(self) -> None:  | 
228 |  | -        example_uri = TestCases.get_path(  | 
229 |  | -            "data-files/view/collection-with-summaries.json"  | 
230 |  | -        )  | 
231 |  | -        self.collection = Collection.from_file(example_uri)  | 
 | 232 | +def test_get_off_nadir_summaries(self) -> None:  | 
 | 233 | +    off_nadirs = ViewExtension.summaries(self.collection, True).off_nadir  | 
232 | 234 | 
 
  | 
233 |  | -    def test_get_off_nadir_summaries(self) -> None:  | 
234 |  | -        off_nadirs = ViewExtension.summaries(self.collection, True).off_nadir  | 
 | 235 | +    assert off_nadirs is not None  | 
235 | 236 | 
 
  | 
236 |  | -        assert off_nadirs is not None  | 
 | 237 | +    assert {"minimum": 0.5, "maximum": 7.3} == off_nadirs.to_dict()  | 
237 | 238 | 
 
  | 
238 |  | -        assert {"minimum": 0.5, "maximum": 7.3} == off_nadirs.to_dict()  | 
 | 239 | +def test_get_incidence_angle_summaries(self) -> None:  | 
 | 240 | +    incidence_angles = ViewExtension.summaries(  | 
 | 241 | +        self.collection, True  | 
 | 242 | +    ).incidence_angle  | 
239 | 243 | 
 
  | 
240 |  | -    def test_get_incidence_angle_summaries(self) -> None:  | 
241 |  | -        incidence_angles = ViewExtension.summaries(  | 
242 |  | -            self.collection, True  | 
243 |  | -        ).incidence_angle  | 
 | 244 | +    assert incidence_angles is not None  | 
244 | 245 | 
 
  | 
245 |  | -        assert incidence_angles is not None  | 
 | 246 | +    assert {"minimum": 23, "maximum": 35} == incidence_angles.to_dict()  | 
246 | 247 | 
 
  | 
247 |  | -        assert {"minimum": 23, "maximum": 35} == incidence_angles.to_dict()  | 
 | 248 | +def test_get_azimuth_summaries(self) -> None:  | 
 | 249 | +    azimuths = ViewExtension.summaries(self.collection, True).azimuth  | 
248 | 250 | 
 
  | 
249 |  | -    def test_get_azimuth_summaries(self) -> None:  | 
250 |  | -        azimuths = ViewExtension.summaries(self.collection, True).azimuth  | 
 | 251 | +    assert azimuths is not None  | 
251 | 252 | 
 
  | 
252 |  | -        assert azimuths is not None  | 
 | 253 | +    assert {"minimum": 20, "maximum": 186} == azimuths.to_dict()  | 
253 | 254 | 
 
  | 
254 |  | -        assert {"minimum": 20, "maximum": 186} == azimuths.to_dict()  | 
 | 255 | +def test_get_sun_azimuth_summaries(self) -> None:  | 
 | 256 | +    sun_azimuths = ViewExtension.summaries(self.collection, True).sun_azimuth  | 
255 | 257 | 
 
  | 
256 |  | -    def test_get_sun_azimuth_summaries(self) -> None:  | 
257 |  | -        sun_azimuths = ViewExtension.summaries(self.collection, True).sun_azimuth  | 
 | 258 | +    assert sun_azimuths is not None  | 
258 | 259 | 
 
  | 
259 |  | -        assert sun_azimuths is not None  | 
 | 260 | +    assert {"minimum": 48, "maximum": 78} == sun_azimuths.to_dict()  | 
260 | 261 | 
 
  | 
261 |  | -        assert {"minimum": 48, "maximum": 78} == sun_azimuths.to_dict()  | 
 | 262 | +def test_get_sun_elevation_summaries(self) -> None:  | 
 | 263 | +    sun_elevations = ViewExtension.summaries(self.collection, True).sun_elevation  | 
262 | 264 | 
 
  | 
263 |  | -    def test_get_sun_elevation_summaries(self) -> None:  | 
264 |  | -        sun_elevations = ViewExtension.summaries(self.collection, True).sun_elevation  | 
 | 265 | +    assert sun_elevations is not None  | 
265 | 266 | 
 
  | 
266 |  | -        assert sun_elevations is not None  | 
 | 267 | +    assert {"minimum": 10, "maximum": 45} == sun_elevations.to_dict()  | 
267 | 268 | 
 
  | 
268 |  | -        assert {"minimum": 10, "maximum": 45} == sun_elevations.to_dict()  | 
 | 269 | +def test_set_off_nadir_summaries(self) -> None:  | 
 | 270 | +    collection = self.collection.clone()  | 
 | 271 | +    view_summaries = ViewExtension.summaries(collection, True)  | 
269 | 272 | 
 
  | 
270 |  | -    def test_set_off_nadir_summaries(self) -> None:  | 
271 |  | -        collection = self.collection.clone()  | 
272 |  | -        view_summaries = ViewExtension.summaries(collection, True)  | 
 | 273 | +    view_summaries.off_nadir = RangeSummary(0, 10)  | 
 | 274 | +    assert  {"minimum": 0, "maximum": 10} == view_summaries.off_nadir.to_dict()  | 
273 | 275 | 
 
  | 
274 |  | -        view_summaries.off_nadir = RangeSummary(0, 10)  | 
275 |  | -        assert  {"minimum": 0, "maximum": 10} == view_summaries.off_nadir.to_dict()  | 
 | 276 | +def test_set_incidence_angle_summaries(self) -> None:  | 
 | 277 | +    collection = self.collection.clone()  | 
 | 278 | +    view_summaries = ViewExtension.summaries(collection, True)  | 
276 | 279 | 
 
  | 
277 |  | -    def test_set_incidence_angle_summaries(self) -> None:  | 
278 |  | -        collection = self.collection.clone()  | 
279 |  | -        view_summaries = ViewExtension.summaries(collection, True)  | 
 | 280 | +    view_summaries.incidence_angle = RangeSummary(5, 15)  | 
 | 281 | +    assert  {"minimum": 5, "maximum": 15} == view_summaries.incidence_angle.to_dict()  | 
280 | 282 | 
 
  | 
281 |  | -        view_summaries.incidence_angle = RangeSummary(5, 15)  | 
282 |  | -        assert  {"minimum": 5, "maximum": 15} == view_summaries.incidence_angle.to_dict()  | 
 | 283 | +def test_set_azimuth_summaries(self) -> None:  | 
 | 284 | +    collection = self.collection.clone()  | 
 | 285 | +    view_summaries = ViewExtension.summaries(collection, True)  | 
283 | 286 | 
 
  | 
284 |  | -    def test_set_azimuth_summaries(self) -> None:  | 
285 |  | -        collection = self.collection.clone()  | 
286 |  | -        view_summaries = ViewExtension.summaries(collection, True)  | 
 | 287 | +    view_summaries.azimuth = None  | 
 | 288 | +    assert view_summaries.azimuth is None  | 
287 | 289 | 
 
  | 
288 |  | -        view_summaries.azimuth = None  | 
289 |  | -        assert view_summaries.azimuth is None  | 
 | 290 | +def test_set_sun_azimuth_summaries(self) -> None:  | 
 | 291 | +    collection = self.collection.clone()  | 
 | 292 | +    view_summaries = ViewExtension.summaries(collection, True)  | 
290 | 293 | 
 
  | 
291 |  | -    def test_set_sun_azimuth_summaries(self) -> None:  | 
292 |  | -        collection = self.collection.clone()  | 
293 |  | -        view_summaries = ViewExtension.summaries(collection, True)  | 
 | 294 | +    view_summaries.sun_azimuth = RangeSummary(210, 275)  | 
 | 295 | +    assert  {"minimum": 210, "maximum": 275} == view_summaries.sun_azimuth.to_dict()  | 
294 | 296 | 
 
  | 
295 |  | -        view_summaries.sun_azimuth = RangeSummary(210, 275)  | 
296 |  | -        assert  {"minimum": 210, "maximum": 275} == view_summaries.sun_azimuth.to_dict()  | 
 | 297 | +def test_set_sun_elevation_summaries(self) -> None:  | 
 | 298 | +    collection = self.collection.clone()  | 
 | 299 | +    view_summaries = ViewExtension.summaries(collection, True)  | 
297 | 300 | 
 
  | 
298 |  | -    def test_set_sun_elevation_summaries(self) -> None:  | 
299 |  | -        collection = self.collection.clone()  | 
300 |  | -        view_summaries = ViewExtension.summaries(collection, True)  | 
 | 301 | +    view_summaries.sun_elevation = RangeSummary(-10, 38)  | 
 | 302 | +    assert  {"minimum": -10, "maximum": 38} == view_summaries.sun_elevation.to_dict()  | 
301 | 303 | 
 
  | 
302 |  | -        view_summaries.sun_elevation = RangeSummary(-10, 38)  | 
303 |  | -        assert  {"minimum": -10, "maximum": 38} == view_summaries.sun_elevation.to_dict()  | 
304 |  | - | 
305 |  | -    def test_summaries_adds_uri(self) -> None:  | 
306 |  | -        collection = self.collection.clone()  | 
307 |  | -        collection.stac_extensions = []  | 
308 |  | -        with pytest.raises(  | 
309 |  | -            pystac.ExtensionNotImplemented,  | 
310 |  | -            match="Extension 'view' is not implemented",  | 
311 |  | -        ):  | 
312 |  | -            ViewExtension.summaries(collection, add_if_missing=False)  | 
 | 304 | +def test_summaries_adds_uri(self) -> None:  | 
 | 305 | +    collection = self.collection.clone()  | 
 | 306 | +    collection.stac_extensions = []  | 
 | 307 | +    with pytest.raises(  | 
 | 308 | +        pystac.ExtensionNotImplemented,  | 
 | 309 | +        match="Extension 'view' is not implemented",  | 
 | 310 | +    ):  | 
 | 311 | +        ViewExtension.summaries(collection, add_if_missing=False)  | 
313 | 312 | 
 
  | 
314 |  | -        _ = ViewExtension.summaries(collection, True)  | 
 | 313 | +    _ = ViewExtension.summaries(collection, True)  | 
315 | 314 | 
 
  | 
316 |  | -        assert ViewExtension.get_schema_uri() in collection.stac_extensions  | 
 | 315 | +    assert ViewExtension.get_schema_uri() in collection.stac_extensions  | 
317 | 316 | 
 
  | 
318 |  | -        ViewExtension.remove_from(collection)  | 
319 |  | -        assert ViewExtension.get_schema_uri() not in collection.stac_extensions  | 
 | 317 | +    ViewExtension.remove_from(collection)  | 
 | 318 | +    assert ViewExtension.get_schema_uri() not in collection.stac_extensions  | 
0 commit comments