Skip to content

Commit

Permalink
added patch command w/ burnettk
Browse files Browse the repository at this point in the history
  • Loading branch information
jasquat committed Feb 9, 2024
1 parent 026de90 commit 5e6a675
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 2 deletions.
26 changes: 26 additions & 0 deletions src/connector_http/commands/patch_request.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from typing import Any

import requests # type: ignore
from spiffworkflow_connector_command.command_interface import ConnectorCommand
from spiffworkflow_connector_command.command_interface import ConnectorProxyResponseDict

from connector_http.http_request_base import HttpRequestBase


class PatchRequest(ConnectorCommand, HttpRequestBase):
def __init__(
self,
url: str,
headers: dict[str, str] | None = None,
data: dict[str, str] | None = None,
basic_auth_username: str | None = None,
basic_auth_password: str | None = None,
):
HttpRequestBase.__init__(
self, url=url, headers=headers, basic_auth_username=basic_auth_username, basic_auth_password=basic_auth_password
)

self.data = data or {}

def execute(self, _config: Any, _task_data: dict) -> ConnectorProxyResponseDict:
return self.run_request(requests.patch)
5 changes: 3 additions & 2 deletions src/connector_http/http_request_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@


class HttpRequestBase:
def __init__(self,
def __init__(
self,
url: str,
headers: dict[str, str] | None = None,
basic_auth_username: str | None = None,
Expand Down Expand Up @@ -103,7 +104,7 @@ def log(msg: str) -> None:
if http_response is not None:
command_response = {"raw_response": http_response.text}
# this string can include modifiers like UTF-8, which is why it's not using ==
if 'application/json' in http_response.headers.get('Content-Type', ''):
if "application/json" in http_response.headers.get("Content-Type", ""):
try:
command_response = json.loads(http_response.text)
except Exception as e:
Expand Down
61 changes: 61 additions & 0 deletions tests/connector_http/unit/test_patch_request.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import json
from typing import Any
from unittest.mock import patch

from connector_http.commands.patch_request import PatchRequest


class TestPatchRequest:
def test_patch_html_from_url(self) -> None:
request = PatchRequest(url="http://example.com")
return_html = "<html>Hey</html>"
with patch("requests.patch") as mock_request:
mock_request.return_value.status_code = 200
mock_request.return_value.ok = True
mock_request.return_value.text = return_html
response = request.execute(None, {})
assert mock_request.call_count == 1

assert response["command_response"]["body"] == json.dumps({"raw_response": return_html})
assert response["command_response"]["http_status"] == 200
assert response["command_response"]["mimetype"] == "application/json"
assert response["error"] is None
assert response["spiff__logs"] is not None
assert len(response["spiff__logs"]) > 0

def test_patch_json_from_url(self) -> None:
request = PatchRequest(url="http://example.com")
return_json = {"hey": "we_return"}
with patch("requests.patch") as mock_request:
mock_request.return_value.status_code = 200
mock_request.return_value.ok = True
mock_request.return_value.headers = {"Content-Type": "application/json"}
mock_request.return_value.text = json.dumps(return_json)
response = request.execute(None, {})
assert mock_request.call_count == 1

assert response is not None
assert response["command_response"]["body"] == json.dumps(return_json)
assert response["command_response"]["http_status"] == 200
assert response["command_response"]["mimetype"] == "application/json"
assert response["error"] is None
assert response["spiff__logs"] is not None
assert len(response["spiff__logs"]) > 0

def test_patch_can_handle_500(self, sleepless: Any) -> None:
request = PatchRequest(url="http://example.com")
return_json = {"error": "we_did_error"}
with patch("requests.patch") as mock_request:
mock_request.return_value.status_code = 500
mock_request.return_value.headers = {"Content-Type": "application/json"}
mock_request.return_value.text = json.dumps(return_json)
response = request.execute(None, {})
assert mock_request.call_count == 1

assert response is not None
assert response["command_response"]["body"] == json.dumps(return_json)
assert response["command_response"]["http_status"] == 500
assert response["command_response"]["mimetype"] == "application/json"
assert response["error"] is not None
assert response["spiff__logs"] is not None
assert len(response["spiff__logs"]) > 0

0 comments on commit 5e6a675

Please sign in to comment.