11import os
22import unittest
33
4- from tests .component .componenttestutils import BaseComponentTestCase
4+ import serverless_wsgi
5+
56from unittest_data_provider import data_provider
6- from flask_app .config import get_config
7- from flask_app .logging import get_logger
7+ from lambda_app import APP_NAME , APP_VERSION
8+ from lambda_app .repositories .mysql .product_repository import ProductRepository
9+ from tests import ROOT_DIR
10+ from tests .component .componenttestutils import BaseComponentTestCase
11+ from lambda_app .config import get_config
12+ from lambda_app .logging import get_logger
13+
14+ from tests .component .helpers .database .mysql_helper import MySQLHelper
815from tests .component .helpers .events .aws .sqs_helper import SQSHelper
916from tests .unit .helpers .aws .sqs_helper import get_sqs_event_sample
1017from tests .unit .mocks .aws_mocks .aws_lambda_mock import FakeLambdaContext
18+ from tests .unit .mocks .lambda_event_mocks .request_event import create_aws_api_gateway_proxy_request_event
1119from tests .unit .testutils import get_function_name
1220import app
1321import json
@@ -25,49 +33,92 @@ class AppTestCase(BaseComponentTestCase):
2533
2634 @classmethod
2735 def setUpClass (cls ):
36+ BaseComponentTestCase .setUpClass ()
2837 cls .CONFIG = get_config ()
2938 cls .CONFIG .SQS_ENDPOINT = cls .SQS_LOCALSTACK
3039
3140 # fixture
3241 if cls .EXECUTE_FIXTURE :
3342 logger = get_logger ()
43+
44+ logger .info ("Fixture: MYSQL Database connection" )
45+ logger .info ("Fixture: drop table" )
46+
47+ mysql_connection = MySQLHelper .get_connection ()
48+ table_name = ProductRepository .BASE_TABLE
49+ cls .fixture_table (logger , mysql_connection , table_name )
50+
3451 logger .info ('Fixture: create sqs queue' )
3552
36- # queue_url = cls.CONFIG.APP_QUEUE
37- # cls.fixture_sqs(logger, queue_url)
38- #
39- # @classmethod
40- # def fixture_sqs(cls, logger, queue_url):
41- # queue_name = SQSHelper.get_queue_name(queue_url)
42- # deleted = SQSHelper.delete_queue(queue_url)
43- # if deleted:
44- # logger.info(f'Deleting queue name: {queue_name}')
45- #
46- # attributes = {'DelaySeconds': '1'}
47- # result = SQSHelper.create_queue(queue_url, attributes)
48- # if result is not None:
49- # logger.info(f'queue {queue_name} created')
50- # else:
51- # logger.error(f'queue {queue_name} not created')
52- #
53- # event = get_sqs_event_sample()
54- # message = event['Records'][0]
55- # SQSHelper.create_message(message, queue_url)
56- # logger.info('created message: {}'.format(message))
57- #
58- # @data_provider(get_queue_message)
59- # def test_sqs_handler(self, event):
60- # self.logger.info('Running test: %s', get_function_name(__name__))
61- # self.logger.info('Event: {}'.format(event))
62- #
63- # lambda_context = FakeLambdaContext()
64- # try:
65- # response = app.sqs_handler(event=event, context=lambda_context)
66- # except Exception as err:
67- # self.logger.error(err)
68- # # response = app.sqs_handler(event=event)
69- #
70- # self.assertTrue(response)
53+ queue_url = cls .CONFIG .APP_QUEUE
54+ cls .fixture_sqs (logger , queue_url )
55+
56+ @classmethod
57+ def fixture_sqs (cls , logger , queue_url ):
58+ queue_name = SQSHelper .get_queue_name (queue_url )
59+ deleted = SQSHelper .delete_queue (queue_url )
60+ if deleted :
61+ logger .info (f'Deleting queue name: { queue_name } ' )
62+
63+ attributes = {'DelaySeconds' : '1' }
64+ result = SQSHelper .create_queue (queue_url , attributes )
65+ if result is not None :
66+ logger .info (f'queue { queue_name } created' )
67+ else :
68+ logger .error (f'queue { queue_name } not created' )
69+
70+ event = get_sqs_event_sample ()
71+ message = event ['Records' ][0 ]
72+ SQSHelper .create_message (message , queue_url )
73+ logger .info ('created message: {}' .format (message ))
74+
75+ @classmethod
76+ def fixture_table (cls , logger , mysql_connection , table_name ):
77+ dropped = MySQLHelper .drop_table (mysql_connection , table_name )
78+ if dropped :
79+ logger .info (f"Table dropped:: { table_name } " )
80+ file_name = ROOT_DIR + f"tests/datasets/database/structure/mysql/create.table.store.{ table_name } .sql"
81+ created = MySQLHelper .create_table (mysql_connection , table_name , file_name )
82+ if created :
83+ logger .info (f"Table created:: { table_name } " )
84+ file_name = ROOT_DIR + f"tests/datasets/database/seeders/mysql/seeder.table.store.{ table_name } .sql"
85+ populated = MySQLHelper .sow_table (mysql_connection , table_name , file_name )
86+ if populated :
87+ logger .info (f"Table populated:: { table_name } " )
88+
89+ def test_index (self ):
90+ self .logger .info ('Running test: %s' , get_function_name (__name__ ))
91+
92+ event = create_aws_api_gateway_proxy_request_event ('GET' , '/' )
93+ context = FakeLambdaContext ()
94+
95+ response = serverless_wsgi .handle_request (app .app , event , context )
96+
97+ self .assertTrue ('statusCode' in response )
98+ self .assertTrue ('body' in response )
99+
100+ body = json .loads (response ['body' ])
101+ self .logger .info (body )
102+
103+ self .assertTrue ('app' in body )
104+ self .assertEqual (body ['app' ], "%s:%s" % (APP_NAME , APP_VERSION ))
105+
106+ def test_alive (self ):
107+ self .logger .info ('Running test: %s' , get_function_name (__name__ ))
108+
109+ event = create_aws_api_gateway_proxy_request_event ('GET' , '/alive' )
110+ context = FakeLambdaContext ()
111+
112+ response = serverless_wsgi .handle_request (app .app , event , context )
113+
114+ self .assertTrue ('statusCode' in response )
115+ self .assertTrue ('body' in response )
116+
117+ body = json .loads (response ['body' ])
118+ self .logger .info (body )
119+
120+ self .assertTrue ('status' in body )
121+ self .assertTrue ('entries' in body )
71122
72123
73124if __name__ == '__main__' :
0 commit comments