diff --git a/organization/serializers.py b/organization/serializers.py index 33528d5..5bf7575 100644 --- a/organization/serializers.py +++ b/organization/serializers.py @@ -9,7 +9,9 @@ class CloudSerializer(serializers.Serializer): name = serializers.CharField(max_length=255) +class CloudIdSerializer(serializers.Serializer): + cloud_id = serializers.IntegerField(required=True) + + class RegisterCloudSerializer(serializers.Serializer): - id = serializers.IntegerField( - required=True, - ) + id = serializers.IntegerField(required=True) diff --git a/organization/tests/test_views.py b/organization/tests/test_views.py new file mode 100644 index 0000000..152b3c5 --- /dev/null +++ b/organization/tests/test_views.py @@ -0,0 +1,55 @@ +from unittest.mock import patch + +from django.urls import reverse +from rest_framework import status +from rest_framework.test import APITestCase + +from user.models import User + + +class TestCreateCloud(APITestCase): + def setUp(self): + super().setUp() + self.user = User.objects.create( + username="John Doe", first_name="John", last_name="Doe" + ) + self.client.force_authenticate(user=self.user, token="don't care for now") + + # Need to patch where the function is used because it can be loaded before the mock + @patch("organization.views.get_jwt_value", return_value=b"jwt-token") + @patch("organization.views.get_access_token", return_value="access-token") + @patch( + "bimdata_api_client.api.collaboration_api.CollaborationApi.create_cloud", + return_value={"id": 456}, + ) + @patch( + "bimdata_api_client.api.webhook_api.WebhookApi.create_web_hook", + return_value={"id": 789}, + ) + def test_create_cloud( + self, create_web_hook, create_cloud, get_access_token, get_jwt_value + ): + url = reverse("v1:create_cloud") + body = {"organization_id": 123, "name": "Test"} + + response = self.client.post(url, data=body) + + assert response.status_code == status.HTTP_201_CREATED + assert response.data["cloud_id"] == 456 + create_cloud.assert_called_once() + create_web_hook.assert_called_once() + + @patch("organization.views.IsSelfClient.has_permission", return_value=True) + @patch("organization.views.get_access_token", return_value="access-token") + @patch( + "bimdata_api_client.api.webhook_api.WebhookApi.create_web_hook", + return_value={"id": 789}, + ) + def test_register_cloud(self, create_web_hook, get_access_token, has_permission): + url = reverse("v1:register_cloud") + body = {"id": 456} + + response = self.client.post(url, data=body) + + assert response.status_code == status.HTTP_204_NO_CONTENT + create_web_hook.assert_called_once() diff --git a/organization/views.py b/organization/views.py index b8f3d41..2382b0a 100644 --- a/organization/views.py +++ b/organization/views.py @@ -9,6 +9,7 @@ from externals.bimdata_api import ApiClient from externals.keycloak import get_access_token from organization.permissions import IsSelfClient +from organization.serializers import CloudIdSerializer from organization.serializers import CloudSerializer from organization.serializers import RegisterCloudSerializer from user.auth import get_jwt_value @@ -19,7 +20,7 @@ tags=["platform"], operation_id="createCloud", request=CloudSerializer, - responses={status.HTTP_204_NO_CONTENT: None}, + responses={status.HTTP_201_CREATED: CloudIdSerializer}, ) @api_view(["POST"]) @permission_classes([permissions.IsAuthenticated]) @@ -40,7 +41,9 @@ def create_cloud(request): ], access_token=get_access_token(), ) - return Response(status=status.HTTP_204_NO_CONTENT) + serializer = CloudIdSerializer(data={"cloud_id": cloud["id"]}) + serializer.is_valid() + return Response(status=status.HTTP_201_CREATED, data=serializer.data) @extend_schema(