Skip to content

Commit d563c31

Browse files
tests
1 parent 50081de commit d563c31

9 files changed

Lines changed: 76 additions & 41 deletions

File tree

tests/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@ __pycache__/
1515
*/__pycache__/
1616
**/__pycache__/
1717
*.pyc
18+
tests/e2e-tests/lib/internal-dev-test-1.pem

tests/e2e-tests/api/test-get-letter-status.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,33 @@
22
import pytest
33
from lib.fixtures import * # NOSONAR
44
from lib.constants import LETTERS_ENDPOINT
5+
from lib.generators import Generators
56

67
@pytest.mark.test
78
@pytest.mark.devtest
89
@pytest.mark.inttest
910
@pytest.mark.prodtest
10-
def test_406(url, bearer_token):
1111

12-
headers = Generators.generate_valid_headers(bearer_token)
12+
def test_200_get_letter_status(url, bearer_token):
1313

14-
get_message_response = requests.get(f"{url}/letters/status", headers=headers)
14+
headers = Generators.generate_valid_headers(bearer_token.value)
15+
get_messages = requests.get(f"{url}/{LETTERS_ENDPOINT}/", headers=headers)
16+
17+
letter_id = get_messages.json().get("data")[0].get("id")
18+
get_message_response = requests.get(f"{url}/{LETTERS_ENDPOINT}/{letter_id}", headers=headers)
1519

1620
assert get_message_response.status_code == 200
21+
print(get_message_response.json().get("data").get("id"))
22+
23+
24+
@pytest.mark.test
25+
@pytest.mark.devtest
26+
@pytest.mark.inttest
27+
@pytest.mark.prodtest
28+
def test_404_letter_does_not_exist(url, bearer_token):
29+
30+
headers = Generators.generate_valid_headers(bearer_token.value)
31+
get_message_response = requests.get(f"{url}/{LETTERS_ENDPOINT}/xx", headers=headers)
32+
33+
assert get_message_response.status_code == 404
34+
assert get_message_response.json().get("errors")[0].get("detail") == "No resource found with that ID"
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import requests
2+
import pytest
3+
from lib.fixtures import * # NOSONAR
4+
from lib.constants import LETTERS_ENDPOINT
5+
from lib.generators import Generators
6+
7+
@pytest.mark.test
8+
@pytest.mark.devtest
9+
@pytest.mark.inttest
10+
@pytest.mark.prodtest
11+
def test_200_get_letters(url, bearer_token):
12+
13+
headers = Generators.generate_valid_headers(bearer_token.value)
14+
15+
get_message_response = requests.get(f"{url}/letters?limit=1", headers=headers)
16+
17+
assert get_message_response.status_code == 200
18+
assert get_message_response.json().get("data")[0].get("attributes").get("status") == "PENDING"

tests/e2e-tests/lib/authentication.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,23 @@ def generate_authentication(self, env, base_url):
3131
# For the test_url, note that we don't need a message_id that actually exists in
3232
# the backend. The test will only check that the API doesn't return a 401,
3333
# a 404 response means the authentication is working.
34-
test_url = f"{base_url}/v1/messages/message_id"
34+
test_url = f"{base_url}/letters"
3535

36-
if env in ["internal-dev", "ref"]:
36+
if env == "internal-dev":
3737
api_key = os.environ["NON_PROD_API_KEY"]
3838
private_key = os.environ["NON_PROD_PRIVATE_KEY"]
3939
url = "https://internal-dev.api.service.nhs.uk/oauth2/token"
40-
kid = "local"
40+
kid = "internal-dev-test-1"
41+
elif env == "ref":
42+
api_key = os.environ["NON_PROD_API_KEY"]
43+
private_key = os.environ["NON_PROD_PRIVATE_KEY"]
44+
url = "https://ref.api.service.nhs.uk/oauth2/token"
45+
kid = "internal-dev-test-1"
4146
elif env == "int":
4247
api_key = os.environ.get("INTEGRATION_API_KEY")
4348
private_key = os.environ.get("INTEGRATION_PRIVATE_KEY")
4449
url = "https://int.api.service.nhs.uk/oauth2/token"
45-
kid = "local"
50+
kid = "internal-dev-test-1"
4651
elif env == "prod":
4752
api_key = os.environ.get("PRODUCTION_API_KEY")
4853
private_key = os.environ.get("PRODUCTION_PRIVATE_KEY")
@@ -65,7 +70,7 @@ def generate_and_test_new_token(self, api_key, private_key, url, kid, test_url):
6570
valid_auth = False
6671

6772
for i in range(self.max_tests):
68-
print(f"Testing new token, attemp #{i+1}")
73+
print(f"Testing new token, attempt #{i+1}")
6974
if new_token is None:
7075
new_token = self.generate_new_token(api_key, private_key, url, kid)
7176
time_since_new_token = int(time())
@@ -93,6 +98,8 @@ def generate_new_token(self, api_key, private_key, url, kid):
9398
with open(private_key, "r") as f:
9499
pk_pem = f.read()
95100

101+
private_key_file = f"{private_key}"
102+
96103
token_expiry = int(time()) + self.token_validity
97104

98105
claims = {

tests/e2e-tests/lib/fixtures.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ def url(api_product_name):
3636
if environment == "prod":
3737
return f"https://api.service.nhs.uk/{suffix}"
3838

39-
# REF / REF2 share internal-dev gateway
40-
elif environment in ["ref", "ref2"]:
39+
# REF share internal-dev gateway
40+
elif environment in ["ref"]:
4141
return f"https://internal-dev.api.service.nhs.uk/{suffix}"
4242

4343
# Everything else (dev, test, pr environments, internal-dev)
@@ -50,3 +50,15 @@ def url(api_product_name):
5050
@pytest.fixture(scope='session')
5151
def authentication_cache():
5252
return AuthenticationCache()
53+
54+
@pytest.fixture()
55+
def bearer_token(authentication_cache):
56+
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"
64+
return authentication_cache.generate_authentication(environment, url)

tests/e2e-tests/lib/generators.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,5 @@ def generate_valid_create_message_body(environment="sandbox"):
1515
def generate_valid_headers(auth):
1616
return {
1717
"Authorization": auth,
18-
"Content-Type": "application/json",
19-
"Accept": "application/json"
18+
"X-Request-ID":"123e4567-e89b-12d3-a456-426614174000",
2019
}

tests/e2e-tests/lib/secret.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Secret:
2+
def __init__(self, value):
3+
self.value = value
4+
5+
def __repr__(self):
6+
return "Secret(********)"
7+
8+
def __str___(self):
9+
return "*******"

tests/e2e-tests/partials/authentication/test_401_invalid.rst

Lines changed: 0 additions & 13 deletions
This file was deleted.

tests/e2e-tests/partials/methods.rst

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)