"""DB tests.""" from unittest.mock import call, MagicMock, patch import boto3 from garcon import activity from dim_refresh_etl.tasks import db @patch('dim_refresh_etl.tasks.db.subprocess') def test_art_relation_sql_to_stdout(mock_subprocess): """Test art_relation_sql_to_stdout method.""" client = boto3.client('swf', 'us-east-1') db.art_relation_sql_to_stdout( activity.Activity(client), 'SELECT * FROM TABLE') mock_subprocess.Popen.assert_called_with( ['echo', 'use art_relations; SELECT * FROM TABLE'], stdout=mock_subprocess.PIPE, close_fds=True) @patch('dim_refresh_etl.tasks.db.SnowflakeSQLExecutor') def test_snowflake_execute_query(mock_executor): """Test snowflake_execute_query task.""" db.snowflake_execute_query(MagicMock(), 'SELECT *;', {}) mock_executor.assert_has_calls([call().__enter__().execute('SELECT *;')]) @patch('dim_refresh_etl.tasks.db.SnowflakeSQLExecutor') def test_snowflake_execute_query_list(mock_executor): """Test snowflake_execute_query_list task.""" db.snowflake_execute_query_list(MagicMock(), ['SELECT *;', 'INSERT;'], {}) mock_executor.assert_has_calls([ call().__enter__().execute('SELECT *;'), call().__enter__().execute('INSERT;')], any_order=True) @patch('dim_refresh_etl.tasks.db.SnowflakeSQLExecutor') def test_snowflake_copy_from_s3(mock_executor): """Test snowflake_copy_from_s3 task.""" db.snowflake_copy_from_s3( MagicMock(), {'db': 'testdb', 'schema': 'testschema'}, {'access_key': '', 'access_secret': ''}, 'some_table', 'FILE FORMAT OPTIONS', 's3://path') mock_executor.assert_has_calls([ call().__enter__().execute( 'COPY INTO testdb.testschema.some_table FROM ' 's3://path FILE_FORMAT = ( FILE FORMAT OPTIONS ) ' "CREDENTIALS=(AWS_KEY_ID='' AWS_SECRET_KEY='');")]) @patch('dim_refresh_etl.tasks.db.SnowflakeSQLExecutor') def test_snowflake_copy_to_s3(mock_executor): """Test snowflake_copy_to_s3 task.""" db.snowflake_copy_to_s3( MagicMock(), {'db': 'testdb', 'schema': 'testschema'}, {'access_key': '', 'access_secret': ''}, 'FILE FORMAT OPTIONS', 's3path', 'SELECT *;') mock_executor.assert_has_calls([ call().__enter__().execute( 'COPY INTO s3path FROM (SELECT *;) ' 'FILE_FORMAT = ( FILE FORMAT OPTIONS ) ' "CREDENTIALS=(AWS_KEY_ID='' AWS_SECRET_KEY='');")], any_order=True)