From 9e875a7f527686326193cdf6ed6c74e3ad6a96fa Mon Sep 17 00:00:00 2001 From: Keith Walsh Date: Fri, 18 Oct 2024 15:39:37 -0400 Subject: [PATCH 1/2] Require "parent_id" field on Workspace POST --- rbac/management/workspace/view.py | 2 +- tests/management/workspace/test_view.py | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/rbac/management/workspace/view.py b/rbac/management/workspace/view.py index 091c9e485..717d01019 100644 --- a/rbac/management/workspace/view.py +++ b/rbac/management/workspace/view.py @@ -30,7 +30,7 @@ VALID_PATCH_FIELDS = ["name", "description", "parent_id"] REQUIRED_PUT_FIELDS = ["name", "description", "parent_id"] -REQUIRED_CREATE_FIELDS = ["name"] +REQUIRED_CREATE_FIELDS = ["name", "parent_id"] INCLUDE_ANCESTRY_KEY = "include_ancestry" VALID_BOOLEAN_VALUES = ["true", "false"] diff --git a/tests/management/workspace/test_view.py b/tests/management/workspace/test_view.py index 59a59c0d9..893ce123f 100644 --- a/tests/management/workspace/test_view.py +++ b/tests/management/workspace/test_view.py @@ -89,16 +89,14 @@ def test_create_workspace_without_parent(self): url = reverse("workspace-list") client = APIClient() response = client.post(url, workspace, format="json", **self.headers) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - data = response.data - self.assertEqual(data.get("name"), "New Workspace") - self.assertNotEquals(data.get("uuid"), "") - self.assertIsNotNone(data.get("uuid")) - self.assertNotEquals(data.get("created"), "") - self.assertNotEquals(data.get("modified"), "") - self.assertEquals(data.get("description"), "Workspace") - self.assertEquals(data.get("type"), "standard") - self.assertEqual(response.get("content-type"), "application/json") + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + status_code = response.data.get("status") + detail = response.data.get("detail") + self.assertIsNotNone(detail) + self.assertEqual(detail, "Field 'parent_id' is required.") + + self.assertEqual(status_code, 400) + self.assertEqual(response.get("content-type"), "application/problem+json") def test_create_workspace_empty_body(self): """Test for creating a workspace.""" From 26b008baa073a4fb911fdaf7fc5158c3484b34be Mon Sep 17 00:00:00 2001 From: Keith Walsh Date: Mon, 21 Oct 2024 15:42:11 -0400 Subject: [PATCH 2/2] Update spec for requiring parent_id --- docs/source/specs/typespec/main.tsp | 5 ++++- docs/source/specs/v2/openapi.v2.yaml | 14 +++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/source/specs/typespec/main.tsp b/docs/source/specs/typespec/main.tsp index 2ca8e8815..a544072b5 100644 --- a/docs/source/specs/typespec/main.tsp +++ b/docs/source/specs/typespec/main.tsp @@ -121,7 +121,10 @@ namespace Workspaces { name: string; } - alias CreateWorkspaceRequest = BasicWorkspace; + model CreateWorkspaceRequest extends BasicWorkspace{ + @doc("Parent UUID of Workspace A") + parent_id: UUID = "Parent UUID of Workspace A"; + } model CreateWorkspaceResponse extends Workspace{ @statusCode _: 201; diff --git a/docs/source/specs/v2/openapi.v2.yaml b/docs/source/specs/v2/openapi.v2.yaml index fd51f7782..167b900d4 100644 --- a/docs/source/specs/v2/openapi.v2.yaml +++ b/docs/source/specs/v2/openapi.v2.yaml @@ -158,7 +158,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Workspaces.BasicWorkspace' + $ref: '#/components/schemas/Workspaces.CreateWorkspaceRequest' /workspaces/{uuid}/: get: tags: @@ -643,6 +643,18 @@ components: type: string description: Description of Workspace A default: Description of Workspace A + Workspaces.CreateWorkspaceRequest: + type: object + required: + - parent_id + properties: + parent_id: + allOf: + - $ref: '#/components/schemas/UUID' + description: Parent UUID of Workspace A + default: Parent UUID of Workspace A + allOf: + - $ref: '#/components/schemas/Workspaces.BasicWorkspace' Workspaces.CreateWorkspaceResponse: type: object allOf: