""" Test DB Utils. Utility class for generating sqlite db fixtures to test against. """ import sys from sony_metadata import config from sony_metadata.connectors import mysql from sony_metadata.models import field_manager field_manager_data = [ { 'vendor_id': 1, 'subaccount_id': None, 'financial_label_code': 'F848', 'financial_label_name': 'Silver Arrow Record1', 'rep_owner_code': 'F846', 'rep_owner_name': 'Silver Arrow Record2', 'gras_imprint_code': 'AAAA4042', 'gras_imprint_name': 'Silver Arrow Record3', 'sap_profit_center_code': 'SAP001', 'sap_profit_center_name': 'Silver Arrow Record4' }, { 'vendor_id': 2, 'subaccount_id': None, 'financial_label_code': 'Cooking Vinyl/MRI', 'financial_label_name': 'I705', 'rep_owner_code': None, 'rep_owner_name': None, 'gras_imprint_code': None, 'gras_imprint_name': None, 'sap_profit_center_code': None, 'sap_profit_center_name': None }, { 'vendor_id': 21899, 'subaccount_id': 1, 'financial_label_code': 'F432', 'financial_label_name': 'Camera Record1', 'rep_owner_code': 'F432', 'rep_owner_name': 'Camera Record2', 'gras_imprint_code': 'AAAA3817', 'gras_imprint_name': 'Camera Record3', 'sap_profit_center_code': 'SAP002', 'sap_profit_center_name': 'Camera Record4' }, { 'vendor_id': 21899, 'subaccount_id': 2, 'financial_label_code': 'Megaforce +', 'financial_label_name': 'G913', 'rep_owner_code': None, 'rep_owner_name': None, 'gras_imprint_code': None, 'gras_imprint_name': None, 'sap_profit_center_code': None, 'sap_profit_center_name': None } ] def create_tables(): """Drops & Creates tables defined in sony-metadata.models.""" _exit_if_not_test_environment() mysql.BaseModel.metadata.drop_all(mysql._db_engine) mysql.BaseModel.metadata.create_all(mysql._db_engine) with mysql.db_session() as session: session.execute( field_manager.FieldManager.__table__.insert().values( field_manager_data)) def drop_tables(): """Drops tables defined in sony-metadata.models.""" _exit_if_not_test_environment() mysql.BaseModel.metadata.drop_all(mysql._db_engine) def populate_field_manager_table(): """Inserts test data into field_manager table.""" _exit_if_not_test_environment() with mysql.db_session() as session: session.execute(field_manager.FieldManager.__table__.insert().values( field_manager_data)) def _exit_if_not_test_environment(): """For safety, only run tests in test environment pointed to sqlite. Exit immediately if not in test environment or not pointed to sqlite. """ if config.ENVIRONMENT != config.TEST_ENVIRONMENT: sys.exit('Environment must be set to {}.'.format( config.TEST_ENVIRONMENT)) with mysql.db_session() as session: if 'sqlite' not in session.bind.url.drivername: sys.exit('Tests must point to sqlite database.')