|
8 | 8 | from PIL import Image |
9 | 9 | from ulid import ULID |
10 | 10 |
|
| 11 | +from apps.common.models import 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 ( |
|
25 | 26 | from apps.user.factories import UserFactory |
26 | 27 | from main.config import Config |
27 | 28 | from main.tests import TestCase |
| 29 | +from project_types.street import project as street_project |
28 | 30 | from project_types.tile_map_service.compare import project as compare_project |
29 | 31 | from utils.geo.raster_tile_server.config import RasterTileServerNameEnum |
30 | 32 |
|
@@ -1546,3 +1548,103 @@ class TaskGroupType(typing.TypedDict): |
1546 | 1548 | # project is sync to firebase after publish |
1547 | 1549 | fb_project: typing.Any = project_ref.get() |
1548 | 1550 | assert fb_project is not None |
| 1551 | + |
| 1552 | + @patch("apps.project.serializers.process_project_task.delay") |
| 1553 | + def test_project_street(self, mock_requests): |
| 1554 | + self.force_login(self.user) |
| 1555 | + project_data = { |
| 1556 | + **self.project_data, |
| 1557 | + "clientId": str(ULID()), |
| 1558 | + "projectType": self.genum(ProjectTypeEnum.STREET), |
| 1559 | + } |
| 1560 | + content = self._create_project_mutation(project_data) |
| 1561 | + resp_data = content["data"]["createProject"] |
| 1562 | + assert resp_data["errors"] is None, content |
| 1563 | + |
| 1564 | + project_id = resp_data["result"]["id"] |
| 1565 | + project_client_id = resp_data["result"]["clientId"] |
| 1566 | + |
| 1567 | + # Creating AOI Project Asset |
| 1568 | + project_asset_data = { |
| 1569 | + "project": project_id, |
| 1570 | + "clientId": str(ULID()), |
| 1571 | + } |
| 1572 | + |
| 1573 | + content = self._create_project_aoi_asset(project_asset_data, assert_errors=True) |
| 1574 | + resp_data = content["data"]["createProjectAsset"] |
| 1575 | + assert resp_data["errors"] is None, content |
| 1576 | + aoi_geometry_asset = resp_data["result"] |
| 1577 | + |
| 1578 | + # Creating Project Image Asset |
| 1579 | + project_asset_data = { |
| 1580 | + "project": project_id, |
| 1581 | + "clientId": str(ULID()), |
| 1582 | + } |
| 1583 | + content = self._create_project_image_asset(project_asset_data, assert_errors=True) |
| 1584 | + resp_data = content["data"]["createProjectAsset"] |
| 1585 | + assert resp_data["errors"] is None, content |
| 1586 | + image_asset = resp_data["result"] |
| 1587 | + |
| 1588 | + # Updating Project |
| 1589 | + project_data = { |
| 1590 | + "clientId": project_client_id, |
| 1591 | + "image": image_asset["id"], |
| 1592 | + "verificationNumber": 10, |
| 1593 | + "projectTypeSpecifics": { |
| 1594 | + "street": { |
| 1595 | + "aoiGeometry": aoi_geometry_asset["id"], |
| 1596 | + "customOptions": { |
| 1597 | + "clientId": str(ULID()), |
| 1598 | + "description": "Street project description", |
| 1599 | + "icon": self.genum(IconEnum.ADD_OUTLINE), |
| 1600 | + "iconColor": "#FF0000", |
| 1601 | + "title": "Street Project Title", |
| 1602 | + "value": 1, |
| 1603 | + "subOptions": [ |
| 1604 | + { |
| 1605 | + "clientId": str(ULID()), |
| 1606 | + "value": 1, |
| 1607 | + "description": "Street sub option description", |
| 1608 | + }, |
| 1609 | + ], |
| 1610 | + }, |
| 1611 | + "mapillaryImageFilters": { |
| 1612 | + "isPano": True, |
| 1613 | + "creatorId": None, |
| 1614 | + "organizationId": None, |
| 1615 | + "startTime": None, |
| 1616 | + "endTime": None, |
| 1617 | + "randomizeOrder": False, |
| 1618 | + "samplingThreshold": None, |
| 1619 | + }, |
| 1620 | + }, |
| 1621 | + }, |
| 1622 | + } |
| 1623 | + content = self._update_project_mutation(project_id, project_data) |
| 1624 | + resp_data = content["data"]["updateProject"] |
| 1625 | + assert resp_data["errors"] is None, content |
| 1626 | + |
| 1627 | + latest_project = Project.objects.get(pk=project_id) |
| 1628 | + assert latest_project.created_by_id == self.user.pk |
| 1629 | + assert latest_project.modified_by_id == self.user.pk |
| 1630 | + assert latest_project.image_id == int(image_asset["id"]) |
| 1631 | + assert latest_project.project_type_specifics is not None |
| 1632 | + |
| 1633 | + street_project.StreetProjectProperty.model_validate( |
| 1634 | + latest_project.project_type_specifics, |
| 1635 | + context={"project_id": latest_project.pk}, |
| 1636 | + ) |
| 1637 | + |
| 1638 | + # Updating Project: |
| 1639 | + # Test project processing |
| 1640 | + project_data = { |
| 1641 | + "clientId": project_client_id, |
| 1642 | + "status": self.genum(Project.Status.MARKED_AS_READY), |
| 1643 | + } |
| 1644 | + content = self._update_project_status_mutation(project_id, project_data) |
| 1645 | + resp_data = content["data"]["updateProjectStatus"] |
| 1646 | + assert resp_data["errors"] is None, content |
| 1647 | + assert resp_data["result"]["status"] == self.genum(Project.Status.MARKED_AS_READY) |
| 1648 | + |
| 1649 | + mock_requests.assert_called_once() |
| 1650 | + mock_requests.assert_has_calls([call(int(project_id))]) |
0 commit comments