From 4e164f8e2cf4342cec6c6b08fd8dc01f95d8541b Mon Sep 17 00:00:00 2001 From: NicolasRichel Date: Thu, 7 May 2026 14:39:12 +0200 Subject: [PATCH 1/3] fix(orga): ensure create-cloud return 201_CREATED with cloud_id --- organization/serializers.py | 8 +++--- organization/tests/test_views.py | 42 ++++++++++++++++++++++++++++++++ organization/views.py | 7 ++++-- 3 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 organization/tests/test_views.py 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..8fff750 --- /dev/null +++ b/organization/tests/test_views.py @@ -0,0 +1,42 @@ +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") + + @patch("user.auth.get_jwt_value", return_value=b"jwt-token") + @patch("externals.keycloak.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() + + # def test_register_cloud(self): + # pass # TODO 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( From 9a3558dfe5dc759d1693c1902f5ff3350ef3985d Mon Sep 17 00:00:00 2001 From: RomainMou <58464216+RomainMou@users.noreply.github.com> Date: Thu, 7 May 2026 15:00:01 +0200 Subject: [PATCH 2/3] fix: patch get_jwt_value where it is used --- organization/tests/test_views.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/organization/tests/test_views.py b/organization/tests/test_views.py index 8fff750..18a5e30 100644 --- a/organization/tests/test_views.py +++ b/organization/tests/test_views.py @@ -15,7 +15,8 @@ def setUp(self): ) self.client.force_authenticate(user=self.user, token="don't care for now") - @patch("user.auth.get_jwt_value", return_value=b"jwt-token") + # 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("externals.keycloak.get_access_token", return_value="access-token") @patch( "bimdata_api_client.api.collaboration_api.CollaborationApi.create_cloud", From 14b819bdcb205c5dbf2f016240f2e61a9c786da0 Mon Sep 17 00:00:00 2001 From: NicolasRichel Date: Thu, 7 May 2026 15:25:50 +0200 Subject: [PATCH 3/3] fix(orga): add tests for register_cloud view --- organization/tests/test_views.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/organization/tests/test_views.py b/organization/tests/test_views.py index 18a5e30..152b3c5 100644 --- a/organization/tests/test_views.py +++ b/organization/tests/test_views.py @@ -17,7 +17,7 @@ def setUp(self): # 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("externals.keycloak.get_access_token", return_value="access-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}, @@ -39,5 +39,17 @@ def test_create_cloud( create_cloud.assert_called_once() create_web_hook.assert_called_once() - # def test_register_cloud(self): - # pass # TODO + @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()