Skip to content

Commit dd73c2e

Browse files
Remove unused imports from test_user_restricted.py (F401)
1 parent edf6f4b commit dd73c2e

1 file changed

Lines changed: 215 additions & 4 deletions

File tree

tests/integration/test_user_restricted.py

Lines changed: 215 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ class TestUserRestricted:
3232

3333
@pytest.mark.asyncio
3434
@pytest.mark.parametrize(
35-
"endpoint_url, is_fhir_4, user",
35+
"endpoint_url, is_fhir_4, user, apim_app_flow_vars ",
3636
[
37-
("", False, Actor.RC_DEV),
38-
("/FHIR/R4/", True, Actor.RC_DEV),
39-
("/FHIR/STU3/", False, Actor.RC_DEV),
37+
("", False, Actor.RC_DEV, [Actor.RC_DEV.org_code]),
38+
("/FHIR/R4/", True, Actor.RC_DEV, [Actor.RC_DEV.org_code]),
39+
("/FHIR/STU3/", False, Actor.RC_DEV, [Actor.RC_DEV.org_code]),
4040
],
4141
)
4242
async def test_user_restricted_valid_ods_code(
@@ -47,6 +47,7 @@ async def test_user_restricted_valid_ods_code(
4747
asid,
4848
endpoint_url,
4949
is_fhir_4,
50+
apim_app_flow_vars,
5051
):
5152
access_code = await authenticate_user(user)
5253

@@ -72,3 +73,213 @@ async def test_user_restricted_valid_ods_code(
7273
assert (
7374
response.status_code == 200
7475
), "Expected a 200 when accessing the api but got " + str(response.status_code)
76+
77+
@pytest.mark.asyncio
78+
@pytest.mark.parametrize(
79+
"endpoint_url, is_fhir_4, user ,apim_app_flow_vars",
80+
[
81+
("", False, Actor.RC_DEV, ["invalid_code"]),
82+
("/FHIR/R4/", True, Actor.RC_DEV, ["invalid_code"]),
83+
("/FHIR/STU3/", False, Actor.RC_DEV, ["invalid_code"]),
84+
],
85+
)
86+
async def test_user_restricted_invalid_ods_code(
87+
self,
88+
authenticate_user,
89+
service_url,
90+
user: Actor,
91+
asid,
92+
endpoint_url,
93+
is_fhir_4,
94+
apim_app_flow_vars,
95+
):
96+
access_code = await authenticate_user(user)
97+
98+
client_request_headers = {
99+
_HEADER_ECHO: "", # enable echo target
100+
_HEADER_AUTHORIZATION: "Bearer " + access_code,
101+
_HEADER_REQUEST_ID: "DUMMY-VALUE",
102+
RenamedHeader.REFERRAL_ID.original: _EXPECTED_REFERRAL_ID,
103+
RenamedHeader.CORRELATION_ID.original: _EXPECTED_CORRELATION_ID,
104+
RenamedHeader.BUSINESS_FUNCTION.original: user.business_function,
105+
RenamedHeader.ODS_CODE.original: user.org_code,
106+
RenamedHeader.FILENAME.original: _EXPECTED_FILENAME,
107+
RenamedHeader.COMM_RULE_ORG.original: _EXPECTED_COMM_RULE_ORG,
108+
RenamedHeader.OBO_USER_ID.original: _EXPECTED_OBO_USER_ID,
109+
}
110+
111+
# Make the API call
112+
response = requests.get(
113+
f"{service_url}{endpoint_url}", headers=client_request_headers
114+
)
115+
# Verify the status
116+
assert (
117+
response.status_code == 403
118+
), "Expected a 403 when accessing the api but got " + str(response.status_code)
119+
# Verify the OperationOutcome payload
120+
response_data = response.json()
121+
assert response_data["resourceType"] == "OperationOutcome"
122+
assert response_data["meta"]["lastUpdated"] is not None
123+
assert len(response_data["meta"]["profile"]) == 1
124+
assert response_data["meta"]["profile"][0] == (
125+
"https://www.hl7.org/fhir/R4/operationoutcome.html"
126+
if is_fhir_4
127+
else "https://fhir.nhs.uk/STU3/StructureDefinition/eRS-OperationOutcome-1"
128+
)
129+
assert len(response_data["issue"]) == 1
130+
issue = response_data["issue"][0]
131+
assert issue["severity"] == "error"
132+
assert issue["code"] == "forbidden" if is_fhir_4 else "forbidden"
133+
assert issue["diagnostics"] == (
134+
"Unauthorised ODS code provided in NHSD-End-User-Organisation-ODS header"
135+
)
136+
assert len(issue["details"]["coding"]) == 1
137+
issue_details = issue["details"]["coding"][0]
138+
assert (
139+
issue_details["system"]
140+
== "https://fhir.nhs.uk/CodeSystem/NHSD-API-ErrorOrWarningCode"
141+
if is_fhir_4
142+
else "https://fhir.nhs.uk/STU3/CodeSystem/eRS-APIErrorCode-1"
143+
)
144+
assert issue_details["code"] == "ACCESS_DENIED" if is_fhir_4 else "NO_ACCESS"
145+
146+
@pytest.mark.asyncio
147+
@pytest.mark.parametrize(
148+
"endpoint_url, is_fhir_4, user ,apim_app_flow_vars",
149+
[
150+
("", False, Actor.RC_DEV, [Actor.RC_DEV.org_code]),
151+
("/FHIR/R4/", True, Actor.RC_DEV, [Actor.RC_DEV.org_code]),
152+
("/FHIR/STU3/", False, Actor.RC_DEV, [Actor.RC_DEV.org_code]),
153+
],
154+
)
155+
async def test_user_restricted_missing_ods_header(
156+
self,
157+
authenticate_user,
158+
service_url,
159+
user: Actor,
160+
asid,
161+
endpoint_url,
162+
is_fhir_4,
163+
apim_app_flow_vars,
164+
):
165+
access_code = await authenticate_user(user)
166+
167+
client_request_headers = {
168+
_HEADER_ECHO: "", # enable echo target
169+
_HEADER_AUTHORIZATION: "Bearer " + access_code,
170+
_HEADER_REQUEST_ID: "DUMMY-VALUE",
171+
RenamedHeader.REFERRAL_ID.original: _EXPECTED_REFERRAL_ID,
172+
RenamedHeader.CORRELATION_ID.original: _EXPECTED_CORRELATION_ID,
173+
RenamedHeader.BUSINESS_FUNCTION.original: user.business_function,
174+
RenamedHeader.FILENAME.original: _EXPECTED_FILENAME,
175+
RenamedHeader.COMM_RULE_ORG.original: _EXPECTED_COMM_RULE_ORG,
176+
RenamedHeader.OBO_USER_ID.original: _EXPECTED_OBO_USER_ID,
177+
}
178+
179+
# Make the API call
180+
response = requests.get(
181+
f"{service_url}{endpoint_url}", headers=client_request_headers
182+
)
183+
# Verify the status
184+
assert (
185+
response.status_code == 400
186+
), "Expected a 400 when accessing the api but got " + str(response.status_code)
187+
# Verify the OperationOutcome payload
188+
response_data = response.json()
189+
assert response_data["resourceType"] == "OperationOutcome"
190+
assert response_data["meta"]["lastUpdated"] is not None
191+
assert len(response_data["meta"]["profile"]) == 1
192+
assert response_data["meta"]["profile"][0] == (
193+
"https://www.hl7.org/fhir/R4/operationoutcome.html"
194+
if is_fhir_4
195+
else "https://fhir.nhs.uk/STU3/StructureDefinition/eRS-OperationOutcome-1"
196+
)
197+
assert len(response_data["issue"]) == 1
198+
issue = response_data["issue"][0]
199+
assert issue["severity"] == "error"
200+
assert issue["code"] == "required" if is_fhir_4 else "required"
201+
assert issue["diagnostics"] == (
202+
"Missing or Empty NHSD-End-User-Organisation-ODS header."
203+
)
204+
assert len(issue["details"]["coding"]) == 1
205+
issue_details = issue["details"]["coding"][0]
206+
assert (
207+
issue_details["system"]
208+
== "https://fhir.nhs.uk/CodeSystem/NHSD-API-ErrorOrWarningCode"
209+
if is_fhir_4
210+
else "https://fhir.nhs.uk/STU3/CodeSystem/eRS-APIErrorCode-1"
211+
)
212+
assert (
213+
issue_details["code"] == "MISSING_HEADER" if is_fhir_4 else "MISSING_HEADER"
214+
)
215+
216+
@pytest.mark.asyncio
217+
@pytest.mark.parametrize(
218+
"endpoint_url, is_fhir_4, user ,apim_app_flow_vars",
219+
[
220+
("", False, Actor.RC_DEV, [Actor.RC_DEV.org_code]),
221+
("/FHIR/R4/", True, Actor.RC_DEV, [Actor.RC_DEV.org_code]),
222+
("/FHIR/STU3/", False, Actor.RC_DEV, [Actor.RC_DEV.org_code]),
223+
],
224+
)
225+
async def test_user_restricted_missing_ods_code(
226+
self,
227+
authenticate_user,
228+
service_url,
229+
user: Actor,
230+
asid,
231+
endpoint_url,
232+
is_fhir_4,
233+
apim_app_flow_vars,
234+
):
235+
access_code = await authenticate_user(user)
236+
237+
client_request_headers = {
238+
_HEADER_ECHO: "", # enable echo target
239+
_HEADER_AUTHORIZATION: "Bearer " + access_code,
240+
_HEADER_REQUEST_ID: "DUMMY-VALUE",
241+
RenamedHeader.REFERRAL_ID.original: _EXPECTED_REFERRAL_ID,
242+
RenamedHeader.CORRELATION_ID.original: _EXPECTED_CORRELATION_ID,
243+
RenamedHeader.BUSINESS_FUNCTION.original: user.business_function,
244+
RenamedHeader.ODS_CODE.original: "",
245+
RenamedHeader.FILENAME.original: _EXPECTED_FILENAME,
246+
RenamedHeader.COMM_RULE_ORG.original: _EXPECTED_COMM_RULE_ORG,
247+
RenamedHeader.OBO_USER_ID.original: _EXPECTED_OBO_USER_ID,
248+
}
249+
250+
# Make the API call
251+
response = requests.get(
252+
f"{service_url}{endpoint_url}", headers=client_request_headers
253+
)
254+
# Verify the status
255+
assert (
256+
response.status_code == 400
257+
), "Expected a 400 when accessing the api but got " + str(response.status_code)
258+
# Verify the OperationOutcome payload
259+
response_data = response.json()
260+
assert response_data["resourceType"] == "OperationOutcome"
261+
assert response_data["meta"]["lastUpdated"] is not None
262+
assert len(response_data["meta"]["profile"]) == 1
263+
assert response_data["meta"]["profile"][0] == (
264+
"https://www.hl7.org/fhir/R4/operationoutcome.html"
265+
if is_fhir_4
266+
else "https://fhir.nhs.uk/STU3/StructureDefinition/eRS-OperationOutcome-1"
267+
)
268+
assert len(response_data["issue"]) == 1
269+
issue = response_data["issue"][0]
270+
assert issue["severity"] == "error"
271+
assert issue["code"] == "required" if is_fhir_4 else "required"
272+
assert issue["diagnostics"] == (
273+
"Missing or Empty NHSD-End-User-Organisation-ODS header."
274+
)
275+
assert len(issue["details"]["coding"]) == 1
276+
issue_details = issue["details"]["coding"][0]
277+
assert (
278+
issue_details["system"]
279+
== "https://fhir.nhs.uk/CodeSystem/NHSD-API-ErrorOrWarningCode"
280+
if is_fhir_4
281+
else "https://fhir.nhs.uk/STU3/CodeSystem/eRS-APIErrorCode-1"
282+
)
283+
assert (
284+
issue_details["code"] == "MISSING_HEADER" if is_fhir_4 else "MISSING_HEADER"
285+
)

0 commit comments

Comments
 (0)