Skip to content

Commit 58c38cf

Browse files
committed
More work
1 parent b124bf7 commit 58c38cf

12 files changed

Lines changed: 65 additions & 47 deletions

.github/actions/acceptance-tests/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ runs:
104104
run: |
105105
echo "$SUPPLIER_API_PRIVATE_KEY" > "${GITHUB_WORKSPACE}/internal-dev-test-1.pem"
106106
chmod 600 "${GITHUB_WORKSPACE}/internal-dev-test-1.pem"
107-
BASE_PROXY_NAME=nhs-notify-supplier--internal-dev--nhs-notify-supplier
107+
108108
export API_ENVIRONMENT=internal-dev
109109
if [[ -z "$PR_NUMBER" ]]; then
110110
export PROXY_NAME="${BASE_PROXY_NAME}"

tests/e2e-tests/api/data/test_get_letter_data.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
@pytest.mark.devtest
1111
@pytest.mark.inttest
1212
@pytest.mark.prodtest
13-
def test_200_get_letter_status(url, bearer_token):
14-
headers = Generators.generate_valid_headers(bearer_token.value)
13+
def test_200_get_letter_status(url, authentication_secret):
14+
headers = Generators.generate_valid_headers(authentication_secret)
1515
get_letter_id = requests.get(f"{url}/{LETTERS_ENDPOINT}/", headers=headers)
1616

1717
letter_id = get_letter_id.json().get("data")[0].get("id")
@@ -25,8 +25,8 @@ def test_200_get_letter_status(url, bearer_token):
2525
@pytest.mark.devtest
2626
@pytest.mark.inttest
2727
@pytest.mark.prodtest
28-
def test_404_letter_does_not_exist(url, bearer_token):
29-
headers = Generators.generate_valid_headers(bearer_token.value)
28+
def test_404_letter_does_not_exist(url, authentication_secret):
29+
headers = Generators.generate_valid_headers(authentication_secret)
3030
get_message_response = requests.get(f"{url}/{LETTERS_ENDPOINT}/xx", headers=headers)
3131

3232
ErrorHandler.handle_retry(get_message_response)
@@ -37,11 +37,23 @@ def test_404_letter_does_not_exist(url, bearer_token):
3737
@pytest.mark.devtest
3838
@pytest.mark.inttest
3939
@pytest.mark.prodtest
40-
def test_404_letter_does_not_exist(url, bearer_token):
40+
def test_404_letter_does_not_exist(url, authentication_secret):
4141
letter_id = uuid.uuid4().hex
42-
headers = Generators.generate_valid_headers(bearer_token.value)
42+
headers = Generators.generate_valid_headers(authentication_secret)
4343
get_message_response = requests.get(f"{url}/{LETTERS_ENDPOINT}/{letter_id}/data", headers=headers)
4444

4545
ErrorHandler.handle_retry(get_message_response)
4646
assert get_message_response.status_code == 404
4747
assert get_message_response.json().get("errors")[0].get("detail") == "No resource found with that ID"
48+
49+
@pytest.mark.test
50+
@pytest.mark.devtest
51+
@pytest.mark.inttest
52+
@pytest.mark.prodtest
53+
def test_500_letter_does_not_exist(url, authentication_secret):
54+
letter_id = "00000000-0000-0000-0000-000000000000"
55+
headers = Generators.generate_valid_headers(authentication_secret)
56+
get_message_response = requests.get(f"{url}/{LETTERS_ENDPOINT}/{letter_id}/data", headers=headers)
57+
58+
ErrorHandler.handle_retry(get_message_response)
59+
assert get_message_response.status_code == 500

tests/e2e-tests/api/headers/test_x_request_id.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ def test_header_letters_endpoint(
1717
url,
1818
method,
1919
endpoints,
20-
bearer_token
20+
authentication_secret
2121
):
2222
resp = getattr(requests, method)(f"{url}/{endpoints}", headers={
23-
"Authorization": bearer_token.value,
23+
"Authorization": authentication_secret.value,
2424
"X-Request-ID": None
2525
})
2626

@@ -33,10 +33,10 @@ def test_header_letters_endpoint(
3333
@pytest.mark.prodtest
3434
def test_header_mi_endpoint(
3535
url,
36-
bearer_token
36+
authentication_secret
3737
):
3838
resp = getattr(requests, "post")(f"{url}/{MI_ENDPOINT}", headers={
39-
"Authorization": bearer_token.value,
39+
"Authorization": authentication_secret.value,
4040
"X-Request-ID": ""
4141
})
4242

tests/e2e-tests/api/letters/test_get_letter_status.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
@pytest.mark.devtest
1010
@pytest.mark.inttest
1111
@pytest.mark.prodtest
12-
def test_200_get_letter_status(url, bearer_token):
13-
headers = Generators.generate_valid_headers(bearer_token.value)
12+
def test_200_get_letter_status(url, authentication_secret):
13+
headers = Generators.generate_valid_headers(authentication_secret)
1414
get_letters = requests.get(f"{url}/{LETTERS_ENDPOINT}/", headers=headers)
1515

1616
letter_id = get_letters.json().get("data")[0].get("id")
@@ -24,8 +24,8 @@ def test_200_get_letter_status(url, bearer_token):
2424
@pytest.mark.devtest
2525
@pytest.mark.inttest
2626
@pytest.mark.prodtest
27-
def test_404_letter_does_not_exist(url, bearer_token):
28-
headers = Generators.generate_valid_headers(bearer_token.value)
27+
def test_404_letter_does_not_exist(url, authentication_secret):
28+
headers = Generators.generate_valid_headers(authentication_secret)
2929
get_message_response = requests.get(f"{url}/{LETTERS_ENDPOINT}/xx", headers=headers)
3030

3131
ErrorHandler.handle_retry(get_message_response)

tests/e2e-tests/api/letters/test_get_list_of_letters.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
@pytest.mark.devtest
1010
@pytest.mark.inttest
1111
@pytest.mark.prodtest
12-
def test_200_get_letters(url, bearer_token):
13-
headers = Generators.generate_valid_headers(bearer_token.value)
12+
def test_200_get_letters(url, authentication_secret):
13+
headers = Generators.generate_valid_headers(authentication_secret)
1414

1515
get_message_response = requests.get(f"{url}/{LETTERS_ENDPOINT}?limit=1", headers=headers)
1616

tests/e2e-tests/api/letters/test_multiple_letter_status.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
@pytest.mark.devtest
1212
@pytest.mark.inttest
1313
@pytest.mark.prodtest
14-
def test_202_with_valid_headers(url, bearer_token):
15-
headers = Generators.generate_valid_headers(bearer_token.value)
14+
def test_202_with_valid_headers(url, authentication_secret):
15+
headers = Generators.generate_valid_headers(authentication_secret)
1616
get_letter_id = requests.get(f"{url}/{LETTERS_ENDPOINT}?limit=2", headers=headers)
1717

1818
ids = [item.get("id") for item in get_letter_id.json().get("data", [])]
@@ -35,8 +35,8 @@ def test_202_with_valid_headers(url, bearer_token):
3535
@pytest.mark.devtest
3636
@pytest.mark.inttest
3737
@pytest.mark.prodtest
38-
def test_400_duplicates_in_request_body(url, bearer_token):
39-
headers = Generators.generate_valid_headers(bearer_token.value)
38+
def test_400_duplicates_in_request_body(url, authentication_secret):
39+
headers = Generators.generate_valid_headers(authentication_secret)
4040
get_letter_id = requests.get(f"{url}/{LETTERS_ENDPOINT}?limit=2", headers=headers)
4141

4242
ids = [item.get("id") for item in get_letter_id.json().get("data", [])]
@@ -60,8 +60,8 @@ def test_400_duplicates_in_request_body(url, bearer_token):
6060
@pytest.mark.devtest
6161
@pytest.mark.inttest
6262
@pytest.mark.prodtest
63-
def test_400_invalid_status_in_request_body(url, bearer_token):
64-
headers = Generators.generate_valid_headers(bearer_token.value)
63+
def test_400_invalid_status_in_request_body(url, authentication_secret):
64+
headers = Generators.generate_valid_headers(authentication_secret)
6565
get_letter_id = requests.get(f"{url}/{LETTERS_ENDPOINT}?limit=3", headers=headers)
6666

6767
ids = [item.get("id") for item in get_letter_id.json().get("data", [])]

tests/e2e-tests/api/letters/test_update_letter_status.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
@pytest.mark.devtest
1212
@pytest.mark.inttest
1313
@pytest.mark.prodtest
14-
def test_202_with_valid_headers(url, bearer_token):
15-
headers = Generators.generate_valid_headers(bearer_token.value)
14+
def test_202_with_valid_headers(url, authentication_secret):
15+
headers = Generators.generate_valid_headers(authentication_secret)
1616
get_letter_id = requests.get(f"{url}/{LETTERS_ENDPOINT}?limit=1", headers=headers)
1717

1818
letter_id = get_letter_id.json().get("data")[0].get("id")
@@ -27,8 +27,8 @@ def test_202_with_valid_headers(url, bearer_token):
2727
ErrorHandler.handle_retry(update_letter_status)
2828
assert update_letter_status.status_code == 202, f"Response: {update_letter_status.status_code}: {update_letter_status.text}"
2929

30-
def test_202_with_rejected_status(url, bearer_token):
31-
headers = Generators.generate_valid_headers(bearer_token.value)
30+
def test_202_with_rejected_status(url, authentication_secret):
31+
headers = Generators.generate_valid_headers(authentication_secret)
3232
get_letter_id = requests.get(f"{url}/{LETTERS_ENDPOINT}?limit=1", headers=headers)
3333

3434
letter_id = get_letter_id.json().get("data")[0].get("id")
@@ -47,8 +47,8 @@ def test_202_with_rejected_status(url, bearer_token):
4747
@pytest.mark.devtest
4848
@pytest.mark.inttest
4949
@pytest.mark.prodtest
50-
def test_400_with_invalid_status(url, bearer_token):
51-
headers = Generators.generate_valid_headers(bearer_token.value)
50+
def test_400_with_invalid_status(url, authentication_secret):
51+
headers = Generators.generate_valid_headers(authentication_secret)
5252
get_letter_id = requests.get(f"{url}/{LETTERS_ENDPOINT}?limit=1", headers=headers)
5353

5454
letter_id = get_letter_id.json().get("data")[0].get("id")
@@ -67,8 +67,8 @@ def test_400_with_invalid_status(url, bearer_token):
6767
@pytest.mark.devtest
6868
@pytest.mark.inttest
6969
@pytest.mark.prodtest
70-
def test_400_id_mismatch_with_request(url, bearer_token):
71-
headers = Generators.generate_valid_headers(bearer_token.value)
70+
def test_400_id_mismatch_with_request(url, authentication_secret):
71+
headers = Generators.generate_valid_headers(authentication_secret)
7272
get_letter_id = requests.get(f"{url}/{LETTERS_ENDPOINT}?limit=1", headers=headers)
7373

7474
letter_id = get_letter_id.json().get("data")[0].get("id")

tests/e2e-tests/api/test_endpoint.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import requests
33
from lib.errorhandler import ErrorHandler
44
from lib.fixtures import * # NOSONAR
5+
from lib.generators import Generators
56

67
@pytest.mark.smoketest
78
def test_ping(url):
@@ -11,10 +12,9 @@ def test_ping(url):
1112
@pytest.mark.smoketest
1213
@pytest.mark.sandboxtest
1314
@pytest.mark.devtest
14-
def test_status(url, status_endpoint_api_key):
15-
resp = requests.get(
16-
f"{url}/_status", headers={"apikey": status_endpoint_api_key}
17-
)
15+
def test_status(url, authentication_secret):
16+
headers = Generators.generate_valid_headers(authentication_secret)
17+
resp = requests.get(f"{url}/_status", headers=headers)
1818

1919
ErrorHandler.handle_retry(resp)
2020
assert resp.status_code == 200

tests/e2e-tests/lib/authentication.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,22 @@ def generate_authentication(self, env, base_url):
5656
else:
5757
raise ValueError("Unknown value: ", env)
5858

59+
if "-PR-" in base_url:
60+
# PR environments use AAL0 - authentication is the API key passed directly
61+
return Secret(api_key, auth_type="apikey")
62+
63+
if base_url.ends_with("/_status"):
64+
# Special case - the status endpoint uses a different API key
65+
api_key = os.environ.get("STATUS_ENDPOINT_API_KEY")
66+
5967
_, latest_token_expiry = self.tokens.get(env, (None, 0))
6068

6169
# Generate new token if latest token will expire in 15 seconds
6270
if env not in self.tokens or latest_token_expiry < int(time()) + 15:
6371
self.tokens[env] = self.generate_and_test_new_token(api_key, private_key, url, kid, test_url)
6472

65-
bearer_token = self.tokens[env][0]
66-
return Secret(bearer_token)
73+
authentication_secret = self.tokens[env][0]
74+
return Secret(authentication_secret)
6775

6876
def generate_and_test_new_token(self, api_key, private_key, url, kid, test_url):
6977
new_token = None

tests/e2e-tests/lib/fixtures.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,8 @@ def authentication_cache():
5252
return AuthenticationCache()
5353

5454
@pytest.fixture()
55-
def bearer_token(authentication_cache):
55+
def authentication_secret(url, authentication_cache):
5656
environment = os.environ['API_ENVIRONMENT']
57-
if environment == "prod":
58-
url = "https://api.service.nhs.uk/nhs-notify-supplier"
59-
# the ref2 url is structured slightly differently so it needs to be explicitly called out here
60-
elif environment == "ref":
61-
url = "https://internal-dev.api.service.nhs.uk/nhs-notify-supplier"
62-
else:
63-
url = f"https://{environment}.api.service.nhs.uk/nhs-notify-supplier"
6457
return authentication_cache.generate_authentication(environment, url)
6558

6659
@pytest.fixture(scope='session')

0 commit comments

Comments
 (0)