Skip to content

Commit 2cec937

Browse files
committed
[ServiceDesk] Empty HTTP error when using create_customer_request() atlassian-api#1136
1 parent 73535c9 commit 2cec937

3 files changed

Lines changed: 39 additions & 8 deletions

File tree

atlassian/service_desk.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -148,14 +148,13 @@ def create_customer_request(
148148
if request_participants:
149149
data["requestParticipants"] = request_participants
150150

151-
param_map = {"headers": self.experimental_headers}
151+
if not isinstance(values_dict, (dict, str)):
152+
raise TypeError("values_dict must be a dictionary or JSON string")
152153

153-
if isinstance(values_dict, dict):
154-
param_map["json"] = data
155-
elif isinstance(values_dict, str):
156-
param_map["data"] = data
157-
158-
return self.post("rest/servicedeskapi/request", **param_map)
154+
# The create-request endpoint is a stable JSON endpoint. Passing the
155+
# complete payload through ``json`` avoids form/data coercion and keeps
156+
# nested request field values intact on both Cloud and Server.
157+
return self.post("rest/servicedeskapi/request", json=data, headers=self.default_headers)
159158

160159
def get_customer_request_status(self, issue_id_or_key):
161160
"""

docs/service_desk.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ The Request actions
6060

6161
.. code-block:: python
6262
63-
# Create customer request
63+
# Create customer request. ``values_dict`` must contain the fields required
64+
# by the request type (for example, summary and description).
6465
sd.create_customer_request(service_desk_id, request_type_id, values_dict, raise_on_behalf_of=None, request_participants=None)
6566
6667
# Get customer request by ID

tests/test_service_desk_request.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from unittest.mock import patch
2+
3+
import pytest
4+
5+
from atlassian import ServiceDesk
6+
7+
8+
def test_create_customer_request_sends_json_with_standard_headers():
9+
service_desk = ServiceDesk("https://example.atlassian.net")
10+
values = {"summary": "A request", "description": "Details", "priority": "low"}
11+
12+
with patch.object(service_desk, "post", return_value={"issueKey": "HELP-1"}) as post:
13+
result = service_desk.create_customer_request("10", "25", values)
14+
15+
assert result == {"issueKey": "HELP-1"}
16+
post.assert_called_once_with(
17+
"rest/servicedeskapi/request",
18+
json={
19+
"serviceDeskId": "10",
20+
"requestTypeId": "25",
21+
"requestFieldValues": values,
22+
},
23+
headers=service_desk.default_headers,
24+
)
25+
26+
27+
def test_create_customer_request_rejects_non_json_field_values():
28+
service_desk = ServiceDesk("https://example.atlassian.net")
29+
30+
with pytest.raises(TypeError, match="values_dict must be"):
31+
service_desk.create_customer_request("10", "25", ["summary"])

0 commit comments

Comments
 (0)