|
1 | 1 | #!/usr/bin/env python3
|
2 | 2 | """Test for the ee.data module."""
|
3 | 3 |
|
| 4 | +import json |
| 5 | +from typing import Any, Optional |
4 | 6 | from unittest import mock
|
5 | 7 |
|
| 8 | +import googleapiclient |
6 | 9 | import httplib2
|
7 | 10 | import requests
|
8 | 11 |
|
|
14 | 17 | from ee import image
|
15 | 18 |
|
16 | 19 |
|
| 20 | +def NotFoundError() -> googleapiclient.errors.HttpError: |
| 21 | + """Creates a mock HttpError with a 404 status code.""" |
| 22 | + resp = httplib2.Response({'status': '404', 'reason': 'Not Found'}) |
| 23 | + content = json.dumps({'error': {'code': 404, 'message': 'Not Found'}}).encode( |
| 24 | + 'utf-8' |
| 25 | + ) |
| 26 | + return googleapiclient.errors.HttpError(resp, content) |
| 27 | + |
| 28 | + |
| 29 | +def NewFolderAsset( |
| 30 | + name: str, quota: Optional[dict[str, int]] = None |
| 31 | +) -> dict[str, Any]: |
| 32 | + return { |
| 33 | + 'type': 'FOLDER', |
| 34 | + 'name': name, |
| 35 | + 'quota': quota or {}, |
| 36 | + } |
| 37 | + |
| 38 | + |
17 | 39 | class DataTest(unittest.TestCase):
|
18 | 40 |
|
19 | 41 | def setUp(self):
|
@@ -183,6 +205,66 @@ def testCreateFolder(self):
|
183 | 205 | asset = mock_create_asset.call_args.kwargs['body']
|
184 | 206 | self.assertEqual(asset, {'type': 'FOLDER'})
|
185 | 207 |
|
| 208 | + def testCreateAssets(self): |
| 209 | + cloud_api_resource = mock.MagicMock() |
| 210 | + with apitestcase.UsingCloudApi(cloud_api_resource=cloud_api_resource): |
| 211 | + asset_name = 'projects/some-project/assets/some-asset' |
| 212 | + cloud_api_resource.projects().assets().get().execute.side_effect = ( |
| 213 | + NotFoundError() |
| 214 | + ) |
| 215 | + ee.data.create_assets([asset_name], 'FOLDER', False) |
| 216 | + mock_create_asset = cloud_api_resource.projects().assets().create |
| 217 | + mock_create_asset.assert_called_once_with( |
| 218 | + parent='projects/some-project', |
| 219 | + assetId='some-asset', |
| 220 | + body={'type': 'FOLDER'}, |
| 221 | + prettyPrint=False, |
| 222 | + ) |
| 223 | + |
| 224 | + def testCreateAssets_empty(self): |
| 225 | + cloud_api_resource = mock.MagicMock() |
| 226 | + with apitestcase.UsingCloudApi(cloud_api_resource=cloud_api_resource): |
| 227 | + ee.data.create_assets([], 'FOLDER', False) |
| 228 | + mock_create_asset = cloud_api_resource.projects().assets().create |
| 229 | + mock_create_asset.assert_not_called() |
| 230 | + |
| 231 | + def testCreateAssets_noOpIfAssetExists(self): |
| 232 | + cloud_api_resource = mock.MagicMock() |
| 233 | + with apitestcase.UsingCloudApi(cloud_api_resource=cloud_api_resource): |
| 234 | + asset_name = 'projects/some-project/assets/some-asset' |
| 235 | + cloud_api_resource.projects().assets().get.execute.return_value = ( |
| 236 | + NewFolderAsset(asset_name) |
| 237 | + ) |
| 238 | + ee.data.create_assets([asset_name], 'FOLDER', False) |
| 239 | + mock_create_asset = cloud_api_resource.projects().assets().create |
| 240 | + mock_create_asset.assert_not_called() |
| 241 | + |
| 242 | + def testCreateAssets_withParents(self): |
| 243 | + cloud_api_resource = mock.MagicMock() |
| 244 | + with apitestcase.UsingCloudApi(cloud_api_resource=cloud_api_resource): |
| 245 | + asset_name = 'projects/some-project/assets/foo/bar' |
| 246 | + cloud_api_resource.projects().assets().get().execute.side_effect = ( |
| 247 | + NotFoundError() |
| 248 | + ) |
| 249 | + ee.data.create_assets([asset_name], 'FOLDER', True) |
| 250 | + mock_create_asset = cloud_api_resource.projects().assets().create |
| 251 | + mock_create_asset.assert_has_calls([ |
| 252 | + mock.call( |
| 253 | + parent='projects/some-project', |
| 254 | + assetId='foo', |
| 255 | + body={'type': 'FOLDER'}, |
| 256 | + prettyPrint=False, |
| 257 | + ), |
| 258 | + mock.call().execute(num_retries=5), |
| 259 | + mock.call( |
| 260 | + parent='projects/some-project', |
| 261 | + assetId='foo/bar', |
| 262 | + body={'type': 'FOLDER'}, |
| 263 | + prettyPrint=False, |
| 264 | + ), |
| 265 | + mock.call().execute(num_retries=5), |
| 266 | + ]) |
| 267 | + |
186 | 268 | def testStartIngestion(self):
|
187 | 269 | cloud_api_resource = mock.MagicMock()
|
188 | 270 | with apitestcase.UsingCloudApi(cloud_api_resource=cloud_api_resource):
|
|
0 commit comments