"""Tests for trasform function and helpers.""" import copy import pytest from codeengine import main UUID_TO_OVERWRITE_DESCRIPTION = 'c831b479-1795-4392-8dff-b1f50cce5123' NORMAL_UUID = 'c831b479-1795-4392-8dff-b1f50cceXXXX' DESCRIPTION = main.DESCRIPTION_OVERRIDES[UUID_TO_OVERWRITE_DESCRIPTION] @pytest.mark.parametrize( 'name, is_rollback', [ ('ROLLBACK_track', True), ('ROLLBACKtrack', True), ('track', False), ('rollback_track', True), ('TRACK', False), ('track_rollback', False) ] ) def test_is_rollback_table(name, is_rollback): """Test if a table is a rollback table.""" assert main.is_rollback_table(name) == is_rollback @pytest.mark.parametrize( 'name, is_dbchangelog', [ ('DATABASECHANGELOG_track', True), ('DATABASECHANGELOGtrack', True), ('track', False), ('databasechangelog_track', True), ('TRACK', False), ('track_databasechangelog', False) ] ) def test_is_dbchangelog_table(name, is_dbchangelog): """Test if a table is dbchangelog table.""" assert main.is_dbchangelog_table(name) == is_dbchangelog @pytest.mark.parametrize( 'input_label, schema, table, is_blacklisted', [ ('', '', 'ROLLBACK_track', True), ('', '', 'DATABASECHANGELOG_track', True), ('art_relations_qa', 'art_relations', 'track', False), ('art_relations_prod', 'art_relations', 'track', False), ('art_relations_prod', 'art_art', 'track', False), ('art_relations_prod', 'art_restore', 'track', True), ('art_relations_prod', 'art_relations', 'dig_sales', True), ('art_relations_prod', 'art_relations', 'releases', False) ] ) def test_is_table_black_listed(input_label, schema, table, is_blacklisted): """Test if a table is blacklisted.""" assert main.is_table_black_listed(input_label, schema, table) == \ is_blacklisted def test_clean_event_values(): """Test cleaning empty byte code at the start of an event's field.""" event = { 'release_id': 1234, 'vendor_catalog_number': b'\0VENDCAT', 'artist_name': 'A Good Record', # lack of 'release_name' key will test handling null key '_metadata': { 'input_label': 'art_relations_prod', '@uuid': NORMAL_UUID, 'schema': 'art_relations', 'description': 'Some description', 'event_type': 'art_relations.releases' } } cleaned_event = copy.deepcopy(event) cleaned_event['vendor_catalog_number'] = 'VENDCAT' main.clean_event_values(event) assert event == cleaned_event MYSQL_TEST_EVENT = { '_metadata': { 'input_label': 'art_relations_prod', '@uuid': NORMAL_UUID, 'schema': 'art_relations', 'table': 'track', 'description': 'Some description', 'event_type': 'insert', 'input_type': 'mysql' } } MONGODB_TEST_EVENT = { '_metadata': { 'input_label': 'art_relations_prod', '@uuid': NORMAL_UUID, 'schema': 'art_relations', 'table': 'track', 'description': 'Some description', 'event_type': 'videos', 'input_type': 'mongodb', 'db': 'thedb' } } TEST_EVENT_BLACKLISTED = copy.deepcopy(MYSQL_TEST_EVENT) TEST_EVENT_BLACKLISTED['_metadata']['table'] = 'dig_sales' TEST_EVENT_DESCRIPTION = copy.deepcopy(MYSQL_TEST_EVENT) TEST_EVENT_DESCRIPTION['_metadata']['@uuid'] = UUID_TO_OVERWRITE_DESCRIPTION @pytest.mark.parametrize( 'event, field_to_check, expected_value, is_none', [ (MYSQL_TEST_EVENT, 'event_type', 'art_relations.insert', False), (TEST_EVENT_BLACKLISTED, '', '', True), (MONGODB_TEST_EVENT, 'event_type', 'thedb.videos', False) ] ) def test_transform(event, field_to_check, expected_value, is_none): """Test main transform function.""" result = main.transform(event) if is_none: assert result is None else: assert result['_metadata'][field_to_check] == expected_value def test_transform_description_override(): """Test description override for a particular uuid.""" result = main.transform(TEST_EVENT_DESCRIPTION) assert result['description'] == DESCRIPTION