from datetime import datetime import pytest import constants from utils.db_objects.art_relations import EncodingOrder LAMBDA_NAME = constants.LAMBDA_VECTOR_AR_TO_DDB_SYNC DYNAMODB_TABLE = constants.DYNAMODB_VECTOR_ORDERS S3_BUCKET = constants.S3_ORCHBUCKET @pytest.mark.parametrize('alchemy_db', ['art_relations'], indirect=True) def test_ar_to_ddb_sync(current_datetime, alchemy_db, lambda_client, dynamo_db, s3_handler, cloudwatch_log_handler): """Test ar-to-ddb-sync lambda creates correct data in dynamoDB \n https://www.notion.so/Obtain-Flow-297cd35c20ff4c41b7e7e484cef9a399?pvs= 4#a25fc79c46cb46de8b137a53c833ba7c""" encoding_order = EncodingOrder(2, 18, current_datetime, 1223, 'track') eo = alchemy_db.encoding_order.insert_encoding_order(encoding_order) eo_id = eo.encoding_order_id print(f'encoding_order_id={eo_id}') alchemy_db.encoding_order.update_encoding_order_id(eo_id) lambda_client.invoke(LAMBDA_NAME) cloudwatch_log_handler.assert_lambda_logs_message( LAMBDA_NAME, f"Updating AR status for order ID {eo_id}" ) results = dynamo_db.get(DYNAMODB_TABLE, 'order_id', eo_id) assert_dynamodb_fields(current_datetime, eo, eo_id, results) assert_eo_processed(alchemy_db, eo_id) s3_handler.assert_object_exists(S3_BUCKET, f'{results["s3_key"]}') def assert_dynamodb_fields(current_datetime, eo, eo_id, results): assert results['priority'] == eo.priority assert results['encoder_id'] == eo.encoder_id assert results['order_id'] == f'{eo_id}' assert results['meta_update'] == eo.meta_update created_at = results['created_at'].replace('T', ' ') date_format = '%Y-%m-%d %H:%M:%S' created_at = datetime.strptime(created_at, date_format) assert created_at == datetime.strptime(current_datetime, date_format) assert results['s3_key'] == f'vector3/vector-orders/{eo_id}.json' def assert_eo_processed(alchemy_db, eo_id): processed = alchemy_db.encoding_order.get_row_by_id(EncodingOrder, 'encoding_order_id', eo_id).processed assert processed == 'Y'