import unittest.mock import pytest from db_schema.factories.apps import ContentStatusFactory, UnitOfWorkFactory from db_schema.factories.slz import LicensorFactory from apps_etl_databricks.entities import CancelInput, Config, Input, StartInput, SyncInput from apps_etl_databricks.handler import handler @pytest.mark.integration def test_handler__start(session, mocker): mocker.patch('apps_etl_databricks.commands.sync.execute') mocker.patch('apps_etl_databricks.commands.cancel.execute') start_mock = mocker.patch('apps_etl_databricks.commands.start.execute') licensor = LicensorFactory(licensor_name='sme') content_status = ContentStatusFactory( context='US', licensor=licensor, unit_of_work=UnitOfWorkFactory(unit_of_work_code='apple-report') ) config = Config( environment='prod', dbx_url='test-url', dbx_token='test-token', sqs_arns='sqs_arns', rds_secret_key='rds_secret_key', ) payload = Input( start=StartInput( dsp='spotify', report_date='2019-10-10', unit_of_work_id=1, content_status_ids=[content_status.content_status_id], licensor_ids=[licensor.licensor_id], dbx_job_id=10, dbx_spark_params=[], sf_token='test-token', sf_execution_name='execution-id', dbx_job_max_lifetime=3600, conversion_params={}, ), ) output = handler(unittest.mock.Mock(), config, session, payload) start_mock.assert_called_once() assert output.start.run_id @pytest.mark.integration def test_handler__sync(session, mocker): mocker.patch('apps_etl_databricks.commands.start.execute') mocker.patch('apps_etl_databricks.commands.cancel.execute') sync_mock = mocker.patch('apps_etl_databricks.commands.sync.execute') config = Config( environment='prod', dbx_url='test-url', dbx_token='test-token', sqs_arns='sqs_arns', rds_secret_key='rds_secret_key', ) payload = Input(sync=SyncInput(sf_execution_name='foo', conversion_params={})) output = handler(unittest.mock.Mock(), config, session, payload) sync_mock.assert_called_once() assert output.sync.is_synced @pytest.mark.integration def test_handler__cancel(session, mocker): mocker.patch('apps_etl_databricks.commands.start.execute') mocker.patch('apps_etl_databricks.commands.sync.execute') cancel_mock = mocker.patch('apps_etl_databricks.commands.cancel.execute') config = Config( environment='prod', dbx_url='test-url', dbx_token='test-token', sqs_arns='sqs_arns', rds_secret_key='rds_secret_key', ) payload = Input(cancel=CancelInput(sf_execution_name='foo')) output = handler(unittest.mock.Mock(), config, session, payload) cancel_mock.assert_called_once() assert output.cancel.is_cancelled