Skip to content

Commit b168615

Browse files
author
Gurdeep Jugpal
committed
added tests for extended attributes flow
1 parent 6870174 commit b168615

File tree

2 files changed

+137
-0
lines changed

2 files changed

+137
-0
lines changed

proxies/live/apiproxy/proxies/default.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@
110110
<RouteRule name="NoRouteUserServiceRole">
111111
<Condition>(proxy.pathsuffix MatchesPath "/user-role-service") and ((request.verb = "GET") or (request.verb = "HEAD"))</Condition>
112112
</RouteRule>
113+
<RouteRule name="NoRouteExtendedAttributes">
114+
<Condition>(proxy.pathsuffix MatchesPath "/extended-attributes") and ((request.verb = "GET") or (request.verb = "HEAD"))</Condition>
115+
</RouteRule>
113116
<RouteRule name="shared-flow-testing-target">
114117
<TargetEndpoint>shared-flow-testing-target</TargetEndpoint>
115118
</RouteRule>

tests/test_extended_attributes.py

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
import uuid
2+
3+
import pytest
4+
import requests
5+
from api_test_utils.apigee_api_trace import ApigeeApiTraceDebug
6+
from api_test_utils.oauth_helper import OauthHelper
7+
from assertpy import assert_that
8+
9+
from .configuration import config
10+
11+
12+
class TestExtendedAttributes:
13+
14+
@pytest.mark.asyncio
15+
async def test_single_attribute(self, test_app_and_product, debug):
16+
# Given
17+
test_product, test_app = test_app_and_product
18+
await test_app.set_custom_attributes(
19+
{
20+
'jwks-resource-url': 'https://raw.githubusercontent.com/NHSDigital/'
21+
'identity-service-jwks/main/jwks/internal-dev/'
22+
'9baed6f4-1361-4a8e-8531-1f8426e3aba8.json',
23+
'apim-app-flow-vars': '{"proxy":{"allowed":{"update":true}}}'
24+
}
25+
)
26+
27+
token = await self._get_auth_token(test_app)
28+
29+
# When
30+
response = await self._send_request(token, debug)
31+
extended_attributes = await debug.get_apigee_variable_from_trace('app.apim-app-flow-vars')
32+
flow_variable = await debug.get_apigee_variable_from_trace('apim-app-flow-vars.proxy.allowed.update')
33+
34+
# Then
35+
assert_that(200).is_equal_to(response.status_code)
36+
assert_that(extended_attributes).is_not_none()
37+
assert_that(extended_attributes).is_equal_to('{"proxy":{"allowed":{"update":true}}}')
38+
assert_that(extended_attributes).is_not_none()
39+
assert_that(flow_variable).is_equal_to('true')
40+
41+
@pytest.mark.asyncio
42+
async def test_multiple_attributes(self, test_app_and_product, debug):
43+
# Given
44+
test_product, test_app = test_app_and_product
45+
await test_app.set_custom_attributes(
46+
{
47+
'jwks-resource-url': 'https://raw.githubusercontent.com/NHSDigital/'
48+
'identity-service-jwks/main/jwks/internal-dev/'
49+
'9baed6f4-1361-4a8e-8531-1f8426e3aba8.json',
50+
'apim-app-flow-vars': '{"attr_a": "value_a", "attr_b": "value_b"}'
51+
}
52+
)
53+
54+
token = await self._get_auth_token(test_app)
55+
56+
# When
57+
response = await self._send_request(token, debug)
58+
59+
extended_attributes = await debug.get_apigee_variable_from_trace('app.apim-app-flow-vars')
60+
flow_variable_attr_a = await debug.get_apigee_variable_from_trace('apim-app-flow-vars.attr_a')
61+
flow_variable_attr_b = await debug.get_apigee_variable_from_trace('apim-app-flow-vars.attr_b')
62+
63+
# Then
64+
assert_that(200).is_equal_to(response.status_code)
65+
assert_that(extended_attributes).is_not_none()
66+
assert_that(extended_attributes).is_equal_to('{"attr_a": "value_a", "attr_b": "value_b"}')
67+
assert_that(flow_variable_attr_a).is_not_none()
68+
assert_that(flow_variable_attr_a).is_equal_to('value_a')
69+
assert_that(flow_variable_attr_b).is_not_none()
70+
assert_that(flow_variable_attr_b).is_equal_to('value_b')
71+
72+
@pytest.mark.asyncio
73+
async def test_no_attribute(self, test_app_and_product, debug):
74+
# Given
75+
test_product, test_app = test_app_and_product
76+
token = await self._get_auth_token(test_app)
77+
78+
# When
79+
response = await self._send_request(token, debug)
80+
extended_attributes = await debug.get_apigee_variable_from_trace('app.apim-app-flow-vars')
81+
82+
# Then
83+
assert_that(200).is_equal_to(response.status_code)
84+
assert_that(extended_attributes).is_empty()
85+
86+
@pytest.mark.asyncio
87+
async def test_invalid_json(self, test_app_and_product, debug):
88+
# Given
89+
test_product, test_app = test_app_and_product
90+
await test_app.set_custom_attributes(
91+
{
92+
'jwks-resource-url': 'https://raw.githubusercontent.com/NHSDigital/'
93+
'identity-service-jwks/main/jwks/internal-dev/'
94+
'9baed6f4-1361-4a8e-8531-1f8426e3aba8.json',
95+
'apim-app-flow-vars': '{"proxy":{{"allowed":{"update":true}}}'
96+
}
97+
)
98+
99+
token = await self._get_auth_token(test_app)
100+
101+
# When
102+
response = await self._send_request(token, debug)
103+
raise_fault_var = await debug.get_apigee_variable_from_trace(
104+
'raisefault.RaiseFault.InvalidJson') # is None unless the InvalidJson RaiseFault error has been thrown
105+
106+
# Then
107+
assert_that(500).is_equal_to(response.status_code)
108+
assert_that(raise_fault_var).is_not_none()
109+
110+
@staticmethod
111+
async def _send_request(token: str, debug: ApigeeApiTraceDebug):
112+
x_request_id_header = str(uuid.uuid4())
113+
debug.add_trace_filter(header_name='X-Request-ID', header_value=x_request_id_header)
114+
await debug.start_trace()
115+
116+
return requests.get(
117+
url=f"https://internal-dev.api.service.nhs.uk/{config.SERVICE_BASE_PATH}/extended-attributes",
118+
headers={
119+
"Authorization": f"Bearer {token}",
120+
"NHSD-Session-URID": "555254242102",
121+
"X-Request-ID": x_request_id_header
122+
},
123+
)
124+
125+
@staticmethod
126+
async def _get_auth_token(test_app):
127+
oauth = OauthHelper(
128+
client_id=test_app.client_id,
129+
client_secret=test_app.client_secret,
130+
redirect_uri=test_app.callback_url,
131+
)
132+
token_resp = await oauth.get_token_response(grant_type="authorization_code")
133+
assert token_resp["status_code"] == 200
134+
return token_resp["body"]["access_token"]

0 commit comments

Comments
 (0)