@@ -1072,59 +1072,154 @@ def test_asset_wait(invoke,
1072
1072
assert "status: active" in result .output
1073
1073
1074
1074
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
1128
1223
1129
1224
1130
1225
@respx .mock
0 commit comments