Skip to content

Commit d598ab2

Browse files
committed
cli test
1 parent 87f2172 commit d598ab2

File tree

1 file changed

+148
-53
lines changed

1 file changed

+148
-53
lines changed

tests/integration/test_data_cli.py

Lines changed: 148 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,59 +1072,154 @@ def test_asset_wait(invoke,
10721072
assert "status: active" in result.output
10731073

10741074

1075-
# @respx.mock
1076-
# def test_asset_get(invoke):
1077-
# item_type = 'PSScene'
1078-
# item_id = '20221003_002705_38_2461xx'
1079-
# asset_type_id = 'basic_udm2'
1080-
# dl_url = f'{TEST_URL}/1?token=IAmAToken'
1081-
1082-
# basic_udm2_asset = {
1083-
# "_links": {
1084-
# "_self": "SELFURL",
1085-
# "activate": "ACTIVATEURL",
1086-
# "type": "https://api.planet.com/data/v1/asset-types/basic_udm2"
1087-
# },
1088-
# "_permissions": ["download"],
1089-
# "md5_digest": None,
1090-
# "status": 'active',
1091-
# "location": dl_url,
1092-
# "type": "basic_udm2"
1093-
# }
1094-
1095-
# page_response = {
1096-
# "basic_analytic_4b": {
1097-
# "_links": {
1098-
# "_self":
1099-
# "SELFURL",
1100-
# "activate":
1101-
# "ACTIVATEURL",
1102-
# "type":
1103-
# "https://api.planet.com/data/v1/asset-types/basic_analytic_4b"
1104-
# },
1105-
# "_permissions": ["download"],
1106-
# "md5_digest": None,
1107-
# "status": "inactive",
1108-
# "type": "basic_analytic_4b"
1109-
# },
1110-
# "basic_udm2": basic_udm2_asset
1111-
# }
1112-
1113-
# mock_resp = httpx.Response(HTTPStatus.OK, json=page_response)
1114-
# assets_url = f'{TEST_URL}/item-types/{item_type}/items/{item_id}/assets'
1115-
# respx.get(assets_url).return_value = mock_resp
1116-
1117-
# runner = CliRunner()
1118-
# result = invoke(['asset-get', item_type, item_id, asset_type_id],
1119-
# runner=runner)
1120-
1121-
# assert not result.exception
1122-
# assert json.dumps(basic_udm2_asset) in result.output
1123-
1124-
# TODO: basic test for "planet data search-list".
1125-
# TODO: basic test for "planet data search-run".
1126-
# TODO: basic test for "planet data item-get".
1127-
# TODO: basic test for "planet data stats".
1075+
@respx.mock
1076+
def test_asset_get_success(invoke,
1077+
mock_asset_get_response,
1078+
item_type,
1079+
item_id,
1080+
asset_type):
1081+
"""Test successful asset get command."""
1082+
mock_asset_get_response()
1083+
result = invoke(["asset-get", item_type, item_id, asset_type])
1084+
assert result.exit_code == 0
1085+
response = json.loads(result.output)
1086+
assert response["status"] == "active"
1087+
assert response["type"] == asset_type
1088+
1089+
1090+
@respx.mock
1091+
def test_asset_get_not_found(invoke, item_type, item_id):
1092+
"""Test asset get command with non-existent asset."""
1093+
asset_url = f'{TEST_URL}/item-types/{item_type}/items/{item_id}/assets'
1094+
respx.get(asset_url).return_value = httpx.Response(HTTPStatus.NOT_FOUND,
1095+
json={})
1096+
1097+
result = invoke(["asset-get", item_type, item_id, "non_existent_asset"])
1098+
assert result.exit_code == 1
1099+
1100+
1101+
@respx.mock
1102+
def test_asset_list_success(invoke,
1103+
mock_asset_get_response,
1104+
item_type,
1105+
item_id):
1106+
"""Test successful asset list command."""
1107+
mock_asset_get_response()
1108+
result = invoke(["asset-list", item_type, item_id])
1109+
assert result.exit_code == 0
1110+
assets = json.loads(result.output)
1111+
assert "basic_udm2" in assets
1112+
assert "basic_analytic_4b" in assets
1113+
assert assets["basic_udm2"]["status"] == "active"
1114+
assert assets["basic_analytic_4b"]["status"] == "inactive"
1115+
1116+
1117+
@respx.mock
1118+
def test_asset_list_not_found(invoke, item_type, item_id):
1119+
"""Test asset list command with non-existent item."""
1120+
asset_url = f'{TEST_URL}/item-types/{item_type}/items/{item_id}/assets'
1121+
respx.get(asset_url).return_value = httpx.Response(HTTPStatus.NOT_FOUND,
1122+
json={})
1123+
1124+
result = invoke(["asset-list", item_type, item_id])
1125+
assert result.exit_code == 1
1126+
1127+
1128+
@respx.mock
1129+
def test_item_get_success(invoke, item_type, item_id, search_result):
1130+
"""Test successful item get command."""
1131+
item_url = f'{TEST_URL}/item-types/{item_type}/items/{item_id}'
1132+
mock_resp = httpx.Response(HTTPStatus.OK, json=search_result)
1133+
respx.get(item_url).return_value = mock_resp
1134+
1135+
result = invoke(["item-get", item_type, item_id])
1136+
assert result.exit_code == 0
1137+
assert json.loads(result.output) == search_result
1138+
1139+
1140+
@respx.mock
1141+
def test_item_get_not_found(invoke, item_type, item_id):
1142+
"""Test item get command with non-existent item."""
1143+
item_url = f'{TEST_URL}/item-types/{item_type}/items/{item_id}'
1144+
mock_resp = httpx.Response(HTTPStatus.NOT_FOUND, json={})
1145+
respx.get(item_url).return_value = mock_resp
1146+
1147+
result = invoke(["item-get", item_type, item_id])
1148+
assert result.exit_code == 1
1149+
1150+
1151+
@respx.mock
1152+
def test_item_coverage_success(invoke, item_type, item_id, geom_geojson):
1153+
"""Test successful item coverage command."""
1154+
coverage_url = f'{TEST_URL}/item-types/{item_type}/items/{item_id}/coverage'
1155+
mock_coverage = {"clear_percent": 90.0, "status": "complete"}
1156+
mock_resp = httpx.Response(HTTPStatus.OK, json=mock_coverage)
1157+
respx.post(coverage_url).return_value = mock_resp
1158+
1159+
result = invoke([
1160+
"item-coverage",
1161+
item_type,
1162+
item_id,
1163+
"--geom",
1164+
json.dumps(geom_geojson)
1165+
])
1166+
assert result.exit_code == 0
1167+
coverage = json.loads(result.output)
1168+
assert coverage["clear_percent"] == 90.0
1169+
assert coverage["status"] == "complete"
1170+
1171+
1172+
@respx.mock
1173+
def test_item_coverage_with_mode_and_band(invoke,
1174+
item_type,
1175+
item_id,
1176+
geom_geojson):
1177+
"""Test item coverage command with mode and band options."""
1178+
coverage_url = f'{TEST_URL}/item-types/{item_type}/items/{item_id}/coverage'
1179+
mock_coverage = {"cloud_percent": 90.0, "status": "complete"}
1180+
mock_resp = httpx.Response(HTTPStatus.OK, json=mock_coverage)
1181+
respx.post(coverage_url).return_value = mock_resp
1182+
1183+
result = invoke([
1184+
"item-coverage",
1185+
item_type,
1186+
item_id,
1187+
"--geom",
1188+
json.dumps(geom_geojson),
1189+
"--mode",
1190+
"UDM2",
1191+
"--band",
1192+
"cloud"
1193+
])
1194+
assert result.exit_code == 0
1195+
coverage = json.loads(result.output)
1196+
assert coverage["cloud_percent"] == 90.0
1197+
assert coverage["status"] == "complete"
1198+
1199+
1200+
@respx.mock
1201+
def test_item_coverage_invalid_geometry(invoke, item_type, item_id):
1202+
"""Test item coverage command with invalid geometry."""
1203+
result = invoke(
1204+
["item-coverage", item_type, item_id, "--geom", "invalid geom"])
1205+
assert result.exit_code == 1
1206+
1207+
1208+
@respx.mock
1209+
def test_item_coverage_not_found(invoke, item_type, item_id, geom_geojson):
1210+
"""Test item coverage command with non-existent item."""
1211+
coverage_url = f'{TEST_URL}/item-types/{item_type}/items/{item_id}/coverage'
1212+
mock_resp = httpx.Response(HTTPStatus.NOT_FOUND, json={})
1213+
respx.post(coverage_url).return_value = mock_resp
1214+
1215+
result = invoke([
1216+
"item-coverage",
1217+
item_type,
1218+
item_id,
1219+
"--geom",
1220+
json.dumps(geom_geojson)
1221+
])
1222+
assert result.exit_code == 1
11281223

11291224

11301225
@respx.mock

0 commit comments

Comments
 (0)