From cfd3fb934175cd00a3c91c9aa3a3fa2c208ccd35 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Tue, 5 Sep 2023 18:31:00 +0530 Subject: [PATCH] refactor: PUT == PATCH Correct conventions for partial updates --- frappe/api/v2.py | 2 +- frappe/tests/test_api.py | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/frappe/api/v2.py b/frappe/api/v2.py index dafb0923f5..991a348578 100644 --- a/frappe/api/v2.py +++ b/frappe/api/v2.py @@ -169,7 +169,7 @@ url_rules = [ Rule("/document/", methods=["GET"], endpoint=document_list), Rule("/document/", methods=["POST"], endpoint=create_doc), Rule("/document///", methods=["GET"], endpoint=read_doc), - Rule("/document///", methods=["PUT"], endpoint=update_doc), + Rule("/document///", methods=["PATCH", "PUT"], endpoint=update_doc), Rule("/document///", methods=["DELETE"], endpoint=delete_doc), Rule( "/document///method//", diff --git a/frappe/tests/test_api.py b/frappe/tests/test_api.py index e6bc617192..54800ebd8c 100644 --- a/frappe/tests/test_api.py +++ b/frappe/tests/test_api.py @@ -135,6 +135,9 @@ class FrappeAPITestCase(FrappeTestCase): def put(self, path, data, **kwargs) -> TestResponse: return make_request(target=self.TEST_CLIENT.put, args=(path,), kwargs={"json": data, **kwargs}) + def patch(self, path, data, **kwargs) -> TestResponse: + return make_request(target=self.TEST_CLIENT.patch, args=(path,), kwargs={"json": data, **kwargs}) + def delete(self, path, **kwargs) -> TestResponse: return make_request(target=self.TEST_CLIENT.delete, args=(path,), kwargs=kwargs) @@ -222,7 +225,7 @@ class TestResourceAPI(FrappeAPITestCase): self.assertIsInstance(docname, str) self.GENERATED_DOCUMENTS.append(docname) - @parameterize("", "v1", "v2") + @parameterize("", "v1") def test_update_document(self): generated_desc = frappe.mock("paragraph") data = {"description": generated_desc, "sid": self.sid} @@ -313,7 +316,7 @@ class TestMethodAPIV1(FrappeAPITestCase): self.assertEqual(response.status_code, 404) -class TestResourceAPIV2(FrappeAPITestCase): +class TestResourceAPIV2(TestResourceAPI): version = "v2" def setUp(self) -> None: @@ -324,6 +327,18 @@ class TestResourceAPIV2(FrappeAPITestCase): response = self.get(self.resource_path("Website Theme", "Standard", "method", "get_apps")) self.assertEqual(response.json["data"][0]["name"], "frappe") + def test_update_document(self): + generated_desc = frappe.mock("paragraph") + data = {"description": generated_desc, "sid": self.sid} + random_doc = choice(self.GENERATED_DOCUMENTS) + + response = self.patch(self.resource_path(self.DOCTYPE, random_doc), data=data) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json["data"]["description"], generated_desc) + + response = self.get(self.resource_path(self.DOCTYPE, random_doc)) + self.assertEqual(response.json["data"]["description"], generated_desc) + class TestMethodAPIV2(FrappeAPITestCase): version = "v2"