Skip to content

Commit c3be1c8

Browse files
committed
FWF-4504: [Feature] Add test case
1 parent d5c713d commit c3be1c8

File tree

3 files changed

+138
-1
lines changed

3 files changed

+138
-1
lines changed

forms-flow-api/src/formsflow_api/models/tasks.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def get_task_outcome_configuration_by_task_id(
3535
) -> TaskOutcomeConfiguration | None:
3636
"""Get task outcome configuration by task ID."""
3737
query = cls.query.filter_by(task_id=task_id)
38-
if tenant:
38+
if tenant is not None:
3939
query = query.filter_by(tenant=tenant)
4040
task_outcome = query.first()
4141
return task_outcome if task_outcome else None
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
"""Test suite for Task API endpoint."""
2+
3+
import json
4+
5+
from formsflow_api_utils.utils import get_token
6+
7+
from tests.utilities.base_test import task_outcome_config_payload
8+
9+
10+
class TestOutcomeResource:
11+
"""Test suite for the task outcome configuration endpoint."""
12+
13+
def test_create_task_outcome_configuration(self, app, client, session, jwt):
14+
"""Assert that create task outcome returns correct response."""
15+
token = get_token(jwt)
16+
headers = {
17+
"Authorization": f"Bearer {token}",
18+
"content-type": "application/json",
19+
}
20+
response = client.post(
21+
"tasks/task-outcome-configuration", headers=headers, json=task_outcome_config_payload()
22+
)
23+
assert response.status_code == 201
24+
assert response.json["taskId"] == "19c06cb9-fb49-11ef-af3f-66318ba5bc56"
25+
assert response.json["taskTransitionMap"] == task_outcome_config_payload()["taskTransitionMap"]
26+
assert response.json["taskName"] == "Test Task"
27+
assert response.json["transitionMapType"] == "select"
28+
assert response.json["id"] == 1
29+
assert response.json["createdBy"] is not None
30+
assert response.json["tenant"] is None
31+
assert response.json["created"] is not None
32+
33+
def test_create_task_outcome_configuration_invalid(self, app, client, session, jwt):
34+
"""Assert that create task outcome returns 400 for invalid request."""
35+
token = get_token(jwt)
36+
headers = {
37+
"Authorization": f"Bearer {token}",
38+
"content-type": "application/json",
39+
}
40+
# Assert when taskTransitionMap is None
41+
task_outcome_config_payload = {
42+
"taskId": "19c06cb9-fb49-11ef-af3f-66318ba5bc56",
43+
"taskName": "Test Task",
44+
"taskTransitionMap": None,
45+
"transitionMapType": "select",
46+
}
47+
response = client.post(
48+
"tasks/task-outcome-configuration", headers=headers, data=json.dumps(task_outcome_config_payload)
49+
)
50+
assert response.status_code == 400
51+
assert response.json["message"] == "Validation failed"
52+
assert response.json["details"] == [
53+
{
54+
"code": "taskTransitionMap",
55+
"message": "Field may not be null."
56+
}
57+
]
58+
# Assert when transitionMapType is None
59+
task_outcome_config_payload = {
60+
"taskId": "19c06cb9-fb49-11ef-af3f-66318ba5bc56",
61+
"taskName": "Test Task",
62+
"taskTransitionMap": [
63+
{"key": "approve", "label": "Approve"},
64+
{"key": "reject", "label": "Reject"},
65+
],
66+
"transitionMapType": None,
67+
}
68+
response = client.post(
69+
"tasks/task-outcome-configuration", headers=headers, data=json.dumps(task_outcome_config_payload)
70+
)
71+
assert response.status_code == 400
72+
assert response.json["message"] == "Validation failed"
73+
assert response.json["details"] == [
74+
{
75+
"code": "transitionMapType",
76+
"message": "Field may not be null."
77+
}
78+
]
79+
# Assert when required field is missing
80+
task_outcome_config_payload = {
81+
"taskName": "Test Task",
82+
"taskTransitionMap": [
83+
{"key": "approve", "label": "Approve"},
84+
{"key": "reject", "label": "Reject"},
85+
],
86+
"transitionMapType": "select",
87+
}
88+
response = client.post(
89+
"tasks/task-outcome-configuration", headers=headers, data=json.dumps(task_outcome_config_payload)
90+
)
91+
assert response.status_code == 400
92+
assert response.json["message"] == "Validation failed"
93+
assert response.json["details"] == [
94+
{
95+
"code": "taskId",
96+
"message": "Missing data for required field."
97+
}
98+
]
99+
100+
def test_get_task_outcome_configuration_by_task_id(self, app, client, session, jwt):
101+
"""Assert that get task outcome returns correct response."""
102+
token = get_token(jwt)
103+
headers = {
104+
"Authorization": f"Bearer {token}",
105+
"content-type": "application/json",
106+
}
107+
response = client.post(
108+
"tasks/task-outcome-configuration", headers=headers, json=task_outcome_config_payload()
109+
)
110+
assert response.status_code == 201
111+
response = client.get("tasks/task-outcome-configuration/19c06cb9-fb49-11ef-af3f-66318ba5bc56", headers=headers)
112+
assert response.status_code == 200
113+
114+
def test_get_task_outcome_configuration_by_task_id_not_found(
115+
self, app, client, session, jwt
116+
):
117+
"""Assert that get task outcome returns 404 for not found."""
118+
token = get_token(jwt)
119+
headers = {
120+
"Authorization": f"Bearer {token}",
121+
"content-type": "application/json",
122+
}
123+
response = client.get("tasks/task-outcome-configuration/1", headers=headers)
124+
assert response.status_code == 400
125+
assert response.json["message"] == "Task outcome configuration not found for the given task Id"

forms-flow-api/tests/utilities/base_test.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -617,3 +617,15 @@ def get_process_request_payload_low_code(name="Lowcode workflow", status="Draft"
617617
},
618618
],
619619
}
620+
621+
622+
def task_outcome_config_payload():
623+
"""Return task outcome configuration payload."""
624+
return {
625+
"taskId": "19c06cb9-fb49-11ef-af3f-66318ba5bc56",
626+
"taskName": "Test Task",
627+
"taskTransitionMap": [
628+
{"key": "approve", "label": "Approve"},
629+
{"key": "reject", "label": "Reject"},],
630+
"transitionMapType": "select",
631+
}

0 commit comments

Comments
 (0)