@@ -1576,3 +1576,84 @@ def test_validate_checksum_sync(hashes_match, md5_entry, expectation, tmpdir):
1576
1576
1577
1577
with expectation :
1578
1578
DataAPI .validate_checksum (basic_udm2_asset , testfile )
1579
+
1580
+
1581
+ @respx .mock
1582
+ @pytest .mark .anyio
1583
+ async def test_get_item_success (item_descriptions , session ):
1584
+ """Test getting an item successfully."""
1585
+ item = item_descriptions [0 ]
1586
+ item_id = item ['id' ]
1587
+ item_type = item ['properties' ]['item_type' ]
1588
+ item_url = f'{ TEST_URL } /item-types/{ item_type } /items/{ item_id } '
1589
+
1590
+ respx .get (item_url ).return_value = httpx .Response (HTTPStatus .OK , json = item )
1591
+
1592
+ cl = DataClient (session , base_url = TEST_URL )
1593
+ result = await cl .get_item (item_type , item_id )
1594
+
1595
+ assert result == item
1596
+ assert respx .calls .last .request .url == item_url
1597
+ assert respx .calls .last .response .status_code == HTTPStatus .OK
1598
+
1599
+
1600
+ @respx .mock
1601
+ @pytest .mark .anyio
1602
+ async def test_get_item_not_found (item_descriptions , session ):
1603
+ """Test getting a non-existent item."""
1604
+ item_type = item_descriptions [0 ]['properties' ]['item_type' ]
1605
+ item_id = 'non-existent-id'
1606
+ item_url = f'{ TEST_URL } /item-types/{ item_type } /items/{ item_id } '
1607
+
1608
+ respx .get (item_url ).return_value = httpx .Response (404 , json = {})
1609
+
1610
+ cl = DataClient (session , base_url = TEST_URL )
1611
+ with pytest .raises (exceptions .MissingResource ):
1612
+ await cl .get_item (item_type , item_id )
1613
+
1614
+
1615
+ @respx .mock
1616
+ @pytest .mark .anyio
1617
+ async def test_get_item_coverage_success (item_descriptions , session ):
1618
+ """Test get item coverage successfully."""
1619
+
1620
+ item = item_descriptions [0 ]
1621
+ item_id = item ['id' ]
1622
+ item_type = item ['properties' ]['item_type' ]
1623
+
1624
+ mock_response = {'clear_percent' : 28 , 'status' : 'complete' }
1625
+
1626
+ coverage_url = f'{ TEST_URL } /item-types/{ item_type } /items/{ item_id } /coverage'
1627
+ respx .post (coverage_url ).return_value = httpx .Response (HTTPStatus .OK ,
1628
+ json = mock_response )
1629
+
1630
+ cl = DataClient (session , base_url = TEST_URL )
1631
+ result = await cl .get_item_coverage (item_type_id = item_type ,
1632
+ item_id = item_id ,
1633
+ geometry = item ['geometry' ],
1634
+ mode = 'UDM2' ,
1635
+ band = 'cloud' )
1636
+
1637
+ assert str (respx .calls .last .request .url ).split ('?' )[0 ] == coverage_url
1638
+
1639
+ assert respx .calls .last .request .url .params ['mode' ] == 'UDM2'
1640
+ assert respx .calls .last .request .url .params ['band' ] == 'cloud'
1641
+
1642
+ assert result == mock_response
1643
+
1644
+
1645
+ @respx .mock
1646
+ @pytest .mark .anyio
1647
+ async def test_get_item_coverage_invalid_geometry (item_descriptions , session ):
1648
+ item = item_descriptions [0 ]
1649
+ item_id = item ['id' ]
1650
+ item_type = item ['properties' ]['item_type' ]
1651
+
1652
+ invalid_geom = copy .deepcopy (item ['geometry' ])
1653
+ invalid_geom ['type' ] = 'invalid_type'
1654
+
1655
+ cl = DataClient (session , base_url = TEST_URL )
1656
+ with pytest .raises (exceptions .GeoJSONError ):
1657
+ await cl .get_item_coverage (item_type_id = item_type ,
1658
+ item_id = item_id ,
1659
+ geometry = invalid_geom )
0 commit comments