Skip to content

Commit 64127cf

Browse files
tests: adding bdd tests for get_request_access in accessrequest_helper.py
1 parent 2725fa6 commit 64127cf

File tree

2 files changed

+337
-0
lines changed

2 files changed

+337
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
Feature: Get Request Access
2+
3+
Scenario: verify generic form key
4+
Given empty configured access_modules are There
5+
And get_request has zero modules
6+
When get_request_access function is called
7+
Then Return value should be empty access list
8+
9+
Scenario: get_access_request returns correct response
10+
Given four configured access_modules are There
11+
And get_request has four modules
12+
When get_request_access function is called
13+
Then Return value should return all four access list with all seven present keynames
14+
15+
Scenario: get_access_request returns correct response with extra fields
16+
Given four configured access_modules are There
17+
And two with extra fields and two without extra fields
18+
When get_request_access function is called
19+
Then Return value should return all four access with extra fields
20+
21+
Scenario: get_access_request returns correct response with notice/alert
22+
Given four configured access_modules are There
23+
And two with extra notice/alert and two without notice/alert
24+
When get_request_access function is called
25+
Then Return value should return all four access with notice/alert
26+
27+
Scenario: verify response with array of access list with two elements
28+
Given four configured access_modules are There
29+
And get_request has two modules
30+
When get_request_access function is called
31+
Then Return value should be access list with two modules
32+
33+
Scenario: verify response with array of access list with empty elements
34+
Given four configured access_modules are There
35+
And get_request has zero modules
36+
When get_request_access function is called
37+
Then Return value should be empty access list
38+
39+
Scenario: verify response with array of access list with all elements
40+
Given four configured access_modules are There
41+
And get_request has four modules
42+
When get_request_access function is called
43+
Then Return value should return all four access list with all seven present keynames
44+
45+
Scenario: get_request_access is called with invalid parameters
46+
Given four configured access_modules are There
47+
And get_request does not have accesses key
48+
When get_request_access function is called
49+
Then Return value should be error json
50+
51+
Scenario: get_request_access is called with invalid request type
52+
Given request is post request
53+
When get_request_access function is called for invalid request type
54+
Then Return value should be error json
55+
Lines changed: 282 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,282 @@
1+
"""Get Request Access feature tests."""
2+
3+
from pytest_bdd import (
4+
given,
5+
scenario,
6+
then,
7+
when,
8+
)
9+
import pytest
10+
from .. import accessrequest_helper
11+
12+
13+
@pytest.fixture
14+
def user(mocker):
15+
user = mocker.MagicMock()
16+
user.email = "[email protected]"
17+
user.user.username = "test-user"
18+
return user
19+
20+
21+
@pytest.fixture
22+
def context(mocker):
23+
context = mocker.MagicMock()
24+
return context
25+
26+
27+
@scenario(
28+
"features/get_request_access.feature", "get_access_request returns correct response"
29+
)
30+
def test_get_access_request_returns_correct_response():
31+
"""get_access_request returns correct response."""
32+
pass
33+
34+
35+
@scenario(
36+
"features/get_request_access.feature",
37+
"get_access_request returns correct response with extra fields",
38+
)
39+
def test_get_access_request_returns_correct_response_with_extra_fields():
40+
"""get_access_request returns correct response with extra fields."""
41+
pass
42+
43+
44+
@scenario(
45+
"features/get_request_access.feature",
46+
"get_access_request returns correct response with notice/alert",
47+
)
48+
def test_get_access_request_returns_correct_response_with_noticealert():
49+
"""get_access_request returns correct response with notice/alert."""
50+
pass
51+
52+
53+
@scenario(
54+
"features/get_request_access.feature",
55+
"get_request_access is called with invalid parameters",
56+
)
57+
def test_get_request_access_is_called_with_invalid_parameters():
58+
"""get_request_access is called with invalid parameters."""
59+
pass
60+
61+
62+
@scenario(
63+
"features/get_request_access.feature",
64+
"get_request_access is called with invalid request type",
65+
)
66+
def test_get_request_access_is_called_with_invalid_request_type():
67+
"""get_request_access is called with invalid request type."""
68+
pass
69+
70+
71+
@scenario("features/get_request_access.feature", "verify generic form key")
72+
def test_verify_generic_form_key():
73+
"""verify generic form key."""
74+
pass
75+
76+
77+
@scenario(
78+
"features/get_request_access.feature",
79+
"verify response with array of access list with all elements",
80+
)
81+
def test_verify_response_with_array_of_access_list_with_all_elements():
82+
"""verify response with array of access list with all elements."""
83+
pass
84+
85+
86+
@scenario(
87+
"features/get_request_access.feature",
88+
"verify response with array of access list with empty elements",
89+
)
90+
def test_verify_response_with_array_of_access_list_with_empty_elements():
91+
"""verify response with array of access list with empty elements."""
92+
pass
93+
94+
95+
@scenario(
96+
"features/get_request_access.feature",
97+
"verify response with array of access list with two elements",
98+
)
99+
def test_verify_response_with_array_of_access_list_with_two_elements():
100+
"""verify response with array of access list with two elements."""
101+
pass
102+
103+
104+
@given("empty configured access_modules are There")
105+
def step_impl(context, mocker):
106+
# Mock the get_available_access_modules function to return an empty dictionary
107+
get_available_access_modules = mocker.MagicMock(return_value={})
108+
context.get_available_access_modules = get_available_access_modules
109+
110+
111+
@given("four configured access_modules are There")
112+
def step_impl(mocker, context):
113+
mocked_modules = {
114+
"access_tag1": mocker.MagicMock(),
115+
"access_tag2": mocker.MagicMock(),
116+
"access_tag3": mocker.MagicMock(),
117+
"access_tag4": mocker.MagicMock(),
118+
}
119+
mocker.patch(
120+
"Access.helpers.get_available_access_modules", return_value=mocked_modules
121+
)
122+
123+
124+
@given("get_request does not have accesses key")
125+
def step_impl(mocker, context):
126+
"""get_request does ot have accesses key."""
127+
context.request = mocker.MagicMock()
128+
context.request.GET.getlist.side_effect = KeyError("accesses")
129+
130+
131+
@given("get_request has four modules")
132+
def step_impl(context, mocker):
133+
context.request = mocker.MagicMock()
134+
context.request.GET.getlist.return_value = [
135+
"access_access_tag1",
136+
"access_access_tag2",
137+
"access_access_tag3",
138+
"access_access_tag4",
139+
]
140+
141+
142+
@given("get_request has two modules")
143+
def step_impl(context, mocker):
144+
context.request = mocker.MagicMock()
145+
context.request.GET.getlist.return_value = [
146+
"access_access_tag1",
147+
"access_access_tag2",
148+
]
149+
150+
151+
@given("get_request has zero modules")
152+
def step_impl(context, mocker):
153+
context.request = mocker.MagicMock()
154+
context.request.GET.getlist.return_value = []
155+
156+
157+
@given("request is post request")
158+
def step_impl(context, mocker):
159+
context.request = mocker.MagicMock()
160+
context.request.method = "POST"
161+
162+
163+
@given("two with extra fields and two without extra fields")
164+
def step_impl(context, mocker):
165+
context.request = mocker.MagicMock()
166+
context.request.GET.getlist.return_value = [
167+
"access_access_tag1",
168+
"access_access_tag2",
169+
"access_access_tag3",
170+
"access_access_tag4",
171+
]
172+
173+
access_tag1 = mocker.MagicMock()
174+
access_tag2 = mocker.MagicMock()
175+
access_tag3 = mocker.MagicMock()
176+
access_tag4 = mocker.MagicMock()
177+
each_module = [access_tag1, access_tag2, access_tag3, access_tag4]
178+
mocker.patch.object(
179+
each_module[0], "get_extra_fields", return_value="mocked_extra_fields1"
180+
)
181+
mocker.patch.object(
182+
each_module[1], "get_extra_fields", return_value="mocked_extra_fields2"
183+
)
184+
185+
186+
@given("two with extra notice/alert and two without notice/alert")
187+
def step_impl(context, mocker):
188+
context.request = mocker.MagicMock()
189+
context.request.GET.getlist.return_value = [
190+
"access_access_tag1",
191+
"access_access_tag2",
192+
"access_access_tag3",
193+
"access_access_tag4",
194+
]
195+
196+
access_tag1 = mocker.MagicMock()
197+
access_tag2 = mocker.MagicMock()
198+
access_tag3 = mocker.MagicMock()
199+
access_tag4 = mocker.MagicMock()
200+
each_module = [access_tag1, access_tag2, access_tag3, access_tag4]
201+
mocker.patch.object(each_module[0], "get_notice", return_value="mocked_notice1")
202+
mocker.patch.object(each_module[1], "get_notice", return_value="mocked_notice2")
203+
204+
205+
@when("get_request_access function is called")
206+
def step_impl(context, mocker):
207+
# Mock the request object to have an empty query string
208+
context.response = accessrequest_helper.get_request_access(context.request)
209+
210+
211+
@when("get_request_access function is called for invalid request type")
212+
def step_impl(context, mocker):
213+
# Mock the request object to have an empty query string
214+
context.request.GET.getlist.side_effect = KeyError("accesses")
215+
context.response = accessrequest_helper.get_request_access(context.request)
216+
217+
218+
@then("Return value should be access list with two modules")
219+
def step_impl(context):
220+
assert context.response["accesses"] is not None
221+
222+
assert len(context.response["accesses"]) == 2
223+
224+
for access in context.response["accesses"]:
225+
assert "formDesc" in access
226+
assert "accessTag" in access
227+
assert "accessTypes" in access
228+
assert "accessRequestData" in access
229+
assert "extraFields" in access
230+
assert "notice" in access
231+
assert "accessRequestPath" in access
232+
233+
234+
@then("Return value should be empty access list")
235+
def step_impl(context):
236+
assert context.response == {}
237+
238+
239+
@then("Return value should be error json")
240+
def step_impl(context):
241+
assert context.response["status"] == {
242+
"title": "Error Occured",
243+
"msg": (
244+
"There was an error in getting the requested access resources. Please"
245+
" contact Admin"
246+
),
247+
}
248+
249+
250+
@then("Return value should return all four access list with all seven present keynames")
251+
def step_impl(context):
252+
assert context.response["accesses"] is not None
253+
assert len(context.response["accesses"]) == 4
254+
255+
for access in context.response["accesses"]:
256+
assert "formDesc" in access
257+
assert "accessTag" in access
258+
assert "accessTypes" in access
259+
assert "accessRequestData" in access
260+
assert "extraFields" in access
261+
assert "notice" in access
262+
assert "accessRequestPath" in access
263+
264+
265+
@then("Return value should return all four access with extra fields")
266+
def step_impl(context):
267+
assert context.response["accesses"] is not None
268+
269+
assert len(context.response["accesses"]) == 4
270+
271+
for access in context.response["accesses"]:
272+
assert "extraFields" in access
273+
274+
275+
@then("Return value should return all four access with notice/alert")
276+
def step_impl(context):
277+
assert context.response["accesses"] is not None
278+
279+
assert len(context.response["accesses"]) == 4
280+
281+
for access in context.response["accesses"]:
282+
assert "notice" in access

0 commit comments

Comments
 (0)