Mercurial > public > tweet-analysis
diff tests/integration/test_api_gateway.py @ 0:cea9500dca25
first commit
author | Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com> |
---|---|
date | Tue, 14 Sep 2021 17:46:04 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/integration/test_api_gateway.py Tue Sep 14 17:46:04 2021 +0200 @@ -0,0 +1,55 @@ +import os +from unittest import TestCase + +import boto3 +import requests + +""" +Make sure env variable AWS_SAM_STACK_NAME exists with the name of the stack we are going to test. +""" + + +class TestApiGateway(TestCase): + api_endpoint: str + + @classmethod + def get_stack_name(cls) -> str: + stack_name = os.environ.get("AWS_SAM_STACK_NAME") + if not stack_name: + raise Exception( + "Cannot find env var AWS_SAM_STACK_NAME. \n" + "Please setup this environment variable with the stack name where we are running integration tests." + ) + + return stack_name + + def setUp(self) -> None: + """ + Based on the provided env variable AWS_SAM_STACK_NAME, + here we use cloudformation API to find out what the HelloWorldApi URL is + """ + stack_name = TestApiGateway.get_stack_name() + + client = boto3.client("cloudformation") + + try: + response = client.describe_stacks(StackName=stack_name) + except Exception as e: + raise Exception( + f"Cannot find stack {stack_name}. \n" f'Please make sure stack with the name "{stack_name}" exists.' + ) from e + + stacks = response["Stacks"] + + stack_outputs = stacks[0]["Outputs"] + api_outputs = [output for output in stack_outputs if output["OutputKey"] == "HelloWorldApi"] + self.assertTrue(api_outputs, f"Cannot find output HelloWorldApi in stack {stack_name}") + + self.api_endpoint = api_outputs[0]["OutputValue"] + + def test_api_gateway(self): + """ + Call the API Gateway endpoint and check the response + """ + response = requests.get(self.api_endpoint) + self.assertDictEqual(response.json(), {"message": "hello world"})