|
8 | 8 | from PIL import Image |
9 | 9 | from ulid import ULID |
10 | 10 |
|
| 11 | +from apps.common.models import AssetMimetypeEnum, IconEnum |
11 | 12 | from apps.contributor.factories import ContributorTeamFactory |
12 | 13 | from apps.project.factories import OrganizationFactory, ProjectFactory |
13 | 14 | from apps.project.models import ( |
|
23 | 24 | from apps.tutorial.models import Tutorial |
24 | 25 | from apps.user.factories import UserFactory |
25 | 26 | from main.tests import TestCase |
| 27 | +from project_types.street import project as street_project |
26 | 28 | from project_types.tile_map_service.compare import project as compare_project |
27 | 29 | from utils.geo.raster_tile_server.config import RasterTileServerNameEnum |
28 | 30 |
|
@@ -1319,3 +1321,103 @@ class TaskGroupType(typing.TypedDict): |
1319 | 1321 | assert resp_data["errors"] is None, content |
1320 | 1322 | assert resp_data["result"]["status"] == self.genum(Project.Status.PUBLISHED) |
1321 | 1323 | assert resp_data["result"]["processingStatus"] == self.genum(Project.ProcessingStatus.COMPLETED) |
| 1324 | + |
| 1325 | + @patch("apps.project.serializers.process_project_task.delay") |
| 1326 | + def test_project_street(self, mock_requests): |
| 1327 | + self.force_login(self.user) |
| 1328 | + project_data = { |
| 1329 | + **self.project_data, |
| 1330 | + "clientId": str(ULID()), |
| 1331 | + "projectType": self.genum(ProjectTypeEnum.STREET), |
| 1332 | + } |
| 1333 | + content = self._create_project_mutation(project_data) |
| 1334 | + resp_data = content["data"]["createProject"] |
| 1335 | + assert resp_data["errors"] is None, content |
| 1336 | + |
| 1337 | + project_id = resp_data["result"]["id"] |
| 1338 | + project_client_id = resp_data["result"]["clientId"] |
| 1339 | + |
| 1340 | + # Creating AOI Project Asset |
| 1341 | + project_asset_data = { |
| 1342 | + "project": project_id, |
| 1343 | + "mimetype": self.genum(AssetMimetypeEnum.GEOJSON), |
| 1344 | + "clientId": str(ULID()), |
| 1345 | + } |
| 1346 | + |
| 1347 | + content = self._create_project_aoi_asset(project_asset_data, assert_errors=True) |
| 1348 | + resp_data = content["data"]["createProjectAsset"] |
| 1349 | + assert resp_data["errors"] is None, content |
| 1350 | + aoi_geometry_asset = resp_data["result"] |
| 1351 | + |
| 1352 | + # Creating Project Image Asset |
| 1353 | + project_asset_data = { |
| 1354 | + "project": project_id, |
| 1355 | + "mimetype": self.genum(AssetMimetypeEnum.IMAGE_JPEG), |
| 1356 | + "clientId": str(ULID()), |
| 1357 | + } |
| 1358 | + content = self._create_project_image_asset(project_asset_data, assert_errors=True) |
| 1359 | + resp_data = content["data"]["createProjectAsset"] |
| 1360 | + assert resp_data["errors"] is None, content |
| 1361 | + image_asset = resp_data["result"] |
| 1362 | + |
| 1363 | + # Updating Project |
| 1364 | + project_data = { |
| 1365 | + "clientId": project_client_id, |
| 1366 | + "image": image_asset["id"], |
| 1367 | + "verificationNumber": 10, |
| 1368 | + "projectTypeSpecifics": { |
| 1369 | + "street": { |
| 1370 | + "aoiGeometry": aoi_geometry_asset["id"], |
| 1371 | + "customOptions": { |
| 1372 | + "clientId": str(ULID()), |
| 1373 | + "description": "Street project description", |
| 1374 | + "icon": self.genum(IconEnum.ADD_OUTLINE), |
| 1375 | + "iconColor": "#FF0000", |
| 1376 | + "title": "Street Project Title", |
| 1377 | + "value": 1, |
| 1378 | + }, |
| 1379 | + "mapillaryImageFilters": { |
| 1380 | + "isPano": True, |
| 1381 | + "creatorId": None, |
| 1382 | + "organizationId": None, |
| 1383 | + "startTime": None, |
| 1384 | + "endTime": None, |
| 1385 | + "randomizeOrder": False, |
| 1386 | + "samplingThreshold": None, |
| 1387 | + }, |
| 1388 | + }, |
| 1389 | + }, |
| 1390 | + } |
| 1391 | + content = self._update_project_mutation(project_id, project_data) |
| 1392 | + resp_data = content["data"]["updateProject"] |
| 1393 | + assert resp_data["errors"] is None, content |
| 1394 | + |
| 1395 | + latest_project = Project.objects.get(pk=project_id) |
| 1396 | + assert latest_project.created_by_id == self.user.pk |
| 1397 | + assert latest_project.modified_by_id == self.user.pk |
| 1398 | + assert latest_project.image_id == int(image_asset["id"]) |
| 1399 | + assert latest_project.project_type_specifics == { |
| 1400 | + "aoi_geometry": aoi_geometry_asset["id"], |
| 1401 | + } |
| 1402 | + |
| 1403 | + street_project.StreetProjectProperty.model_validate( |
| 1404 | + latest_project.project_type_specifics, |
| 1405 | + context={"project_id": latest_project.pk}, |
| 1406 | + ) |
| 1407 | + |
| 1408 | + # Updating Project: |
| 1409 | + # Test project processing |
| 1410 | + project_data = { |
| 1411 | + "clientId": project_client_id, |
| 1412 | + "status": self.genum(Project.Status.MARKED_AS_READY), |
| 1413 | + } |
| 1414 | + content = self._update_project_mutation(project_id, project_data) |
| 1415 | + resp_data = content["data"]["updateProject"] |
| 1416 | + assert resp_data["errors"] is None, content |
| 1417 | + assert resp_data["result"]["status"] == self.genum(Project.Status.MARKED_AS_READY) |
| 1418 | + assert resp_data["result"]["processingStatus"] is None |
| 1419 | + |
| 1420 | + mock_requests.assert_called_once() |
| 1421 | + mock_requests.assert_has_calls([call(int(project_id))]) |
| 1422 | + |
| 1423 | + process_project_task(int(project_id)) |
0 commit comments