import json import os import pytest from test_event_data_generator import * from snowflake_connection import get_snowflake_cursor # Define test cases with their generator function names test_case_generators = { 'test_case_with_long_fields': generate_test_case_with_long_fields, 'test_case_with_correct_length_fields': generate_test_case_with_correct_length_fields, 'test_case_with_invalid_email': generate_test_case_with_invalid_email, 'test_case_with_valid_email': generate_test_case_with_valid_email, 'test_case_for_valid_mail_list': generate_test_case_for_valid_mail_list, 'test_case_for_invalid_mail_list': generate_test_case_for_invalid_mail_list, 'test_case_null_campaign_id': generate_test_case_null_campaign_id } test_cases = [] test_case_ids = [] for name, generator in test_case_generators.items(): cases = generator() test_cases.extend(cases) test_case_ids.extend([f'{name}[{i}]' for i in range(len(cases))]) @pytest.fixture(scope='module') def snowflake_cursor(): """This fixture sets up the resources for the test.""" print('\nSetting up resources...') conn = get_snowflake_cursor() cursor = conn.cursor() yield cursor # Provide the data to the test # Teardown: Clean up resources (if any) after the test print('\nTearing down resources...') cursor.close() conn.close() @pytest.mark.parametrize("test_case", test_cases, ids=test_case_ids) def test_validate_fanresponce(test_case: dict, snowflake_cursor): """This function tests the validate_fanresponce function in Snowflake.""" db = os.environ.get('SNOWFLAKE_DATABASE') schema = os.environ.get('SNOWFLAKE_SCHEMA') record_content = json.dumps(test_case['record_content']) campaign_id = test_case['campaign_id'] territory = test_case['territory'] valid_mail_list = test_case['valid_mail_list'] expected_result = test_case['expected_result'] valid_mail_list_str = ', '.join(f"'{item}'" for item in valid_mail_list) query = f""" SELECT {db}.{schema}.validate_fanresponce( PARSE_JSON('{record_content}'), {f"'{campaign_id}'" if campaign_id is not None else 'NULL'}, {f"'{territory}'" if territory is not None else 'NULL'}, ARRAY_CONSTRUCT({valid_mail_list_str}) ) AS result """ snowflake_cursor.execute(query) result = snowflake_cursor.fetchone()[0] assert result == expected_result, f'Expected: {expected_result}, Got: {result}'