diff --git a/pysnow/request.py b/pysnow/request.py index 1054c9b..4cf3aa7 100644 --- a/pysnow/request.py +++ b/pysnow/request.py @@ -135,10 +135,14 @@ def update(self, query, payload): if not isinstance(payload, dict): raise InvalidUsage("Update payload must be of type dict") - record = self.get(query=query).one() - - self._url = self._get_custom_endpoint(record["sys_id"]) - return self._get_response("PUT", data=json.dumps(payload)) + if isinstance(query, str): + sys_id = query + else: + record = self.get(query=query).one() + sys_id = record["sys_id"] + + self._url = self._get_custom_endpoint(sys_id) + return self._get_response("PATCH", data=json.dumps(payload)) def delete(self, query): """Deletes a record diff --git a/tests/test_resource.py b/tests/test_resource.py index 6dad7ae..595633e 100644 --- a/tests/test_resource.py +++ b/tests/test_resource.py @@ -530,6 +530,23 @@ def test_create(self): self.assertEquals(type(response.one()), dict) self.assertEquals(response.one(), self.record_response_create) + @httpretty.activate + def test_update_sysid(self): + """:meth:`update` should return a dictionary of the updated record""" + + sys_id = self.record_response_get_one[0]["sys_id"] + + httpretty.register_uri( + httpretty.PATCH, + self.mock_url_builder_sys_id, + body=get_serialized_result(self.record_response_update), + status=200, + content_type="application/json", + ) + + updated = self.resource.update(sys_id, self.record_response_update) + self.assertEquals(self.record_response_update["attr1"], updated["attr1"]) + @httpretty.activate def test_update(self): """:meth:`update` should return a dictionary of the updated record""" @@ -543,7 +560,7 @@ def test_update(self): ) httpretty.register_uri( - httpretty.PUT, + httpretty.PATCH, self.mock_url_builder_sys_id, body=get_serialized_result(self.record_response_update), status=200, @@ -772,7 +789,7 @@ def test_response_update(self): ) httpretty.register_uri( - httpretty.PUT, + httpretty.PATCH, self.mock_url_builder_sys_id, body=get_serialized_result(self.record_response_update), status=200,