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"})