diff --git a/cloudfoundry_client/v3/organizations.py b/cloudfoundry_client/v3/organizations.py index 2086d31..47064ff 100644 --- a/cloudfoundry_client/v3/organizations.py +++ b/cloudfoundry_client/v3/organizations.py @@ -20,11 +20,20 @@ def update( self, guid: str, name: str, - suspended: Optional[bool], + suspended: Optional[bool] = None, meta_labels: Optional[dict] = None, meta_annotations: Optional[dict] = None, ) -> Entity: - data = {"name": name, "suspended": suspended, "metadata": {"labels": meta_labels, "annotations": meta_annotations}} + data = {"name": name} + if suspended is not None: + data["suspended"] = suspended + metadata = {} + if meta_labels is not None: + metadata["labels"] = meta_labels + if meta_annotations is not None: + metadata["annotations"] = meta_annotations + if len(metadata) > 0: + data["metadata"] = metadata return super(OrganizationManager, self)._update(guid, data) def remove(self, guid: str, asynchronous: bool = True) -> Optional[str]: diff --git a/tests/v3/test_organizations.py b/tests/v3/test_organizations.py index 3156850..edc08b4 100644 --- a/tests/v3/test_organizations.py +++ b/tests/v3/test_organizations.py @@ -35,14 +35,38 @@ def test_get(self): self.assertEqual("my-organization", organization["name"]) self.assertIsInstance(organization, Entity) - def test_update(self): + def test_update_without_optional_parameters(self): self.client.patch.return_value = self.mock_response( "/v3/organizations/organization_id", HTTPStatus.OK, None, "v3", "organizations", "PATCH_{id}_response.json" ) - result = self.client.v3.organizations.update("organization_id", "my-organization", suspended=True) + result = self.client.v3.organizations.update("organization_id", "my-organization") self.client.patch.assert_called_with( self.client.patch.return_value.url, - json={"suspended": True, "name": "my-organization", "metadata": {"labels": None, "annotations": None}}, + json={"name": "my-organization"}, + ) + self.assertIsNotNone(result) + + def test_update_with_optional_parameters(self): + self.client.patch.return_value = self.mock_response( + "/v3/organizations/organization_id", HTTPStatus.OK, None, "v3", "organizations", "PATCH_{id}_response.json" + ) + result = self.client.v3.organizations.update( + "organization_id", + "my-organization", + suspended=True, + meta_labels={"label_name": "label_value"}, + meta_annotations={"annotation_name": "annotation_value"} + ) + self.client.patch.assert_called_with( + self.client.patch.return_value.url, + json={ + "suspended": True, + "name": "my-organization", + "metadata": { + "labels": {"label_name": "label_value"}, + "annotations": {"annotation_name": "annotation_value"} + } + }, ) self.assertIsNotNone(result)