"""Unit tests for base_flow.py.""" import datetime from unittest.mock import call from unittest.mock import Mock from freezegun import freeze_time import pytest from data_landing_zone.flows import base_flow @pytest.mark.parametrize('env', [None, 'dev']) def test_get_domain_dev(monkeypatch, env): """Test get_domain for dev env.""" # Mocking os_mock = Mock() os_mock.getenv.side_effect = [env, 'dev'] monkeypatch.setattr( 'data_landing_zone.flows.base_flow.os', os_mock) # Test function call domain = base_flow.get_domain() # Checks assert domain == 'dev' os_mock.getenv.assert_has_calls([ call('Environment'), call('DEV_SWF_DOMAIN', 'dev')]) @pytest.mark.parametrize('env', ['qa', 'prod']) def test_get_domain_not_dev(monkeypatch, env): """Test get_domain for not dev env.""" # Mocking os_mock = Mock() os_mock.getenv.side_effect = [env, 'dev'] monkeypatch.setattr( 'data_landing_zone.flows.base_flow.os', os_mock) # Test function call domain = base_flow.get_domain() # Checks assert domain == '{}_{}'.format(env, 'data_landing_zone') os_mock.getenv.assert_called_once_with('Environment') def test_base_flow(monkeypatch, flow_mock): """Test BaseFlow class __init__ method.""" # Mocking os_mock = Mock() os_mock.getenv.return_value = None monkeypatch.setattr( 'data_landing_zone.flows.base_flow.os', os_mock) # Test class method flow = base_flow.BaseFlow( flow_name=flow_mock.flow_name, version=flow_mock.flow_version, swf_domain=flow_mock.flow_domain) # Checks assert flow.domain == flow_mock.flow_domain assert flow.name == flow_mock.flow_name assert flow.version == flow_mock.flow_version assert flow.sentry_client is None def test_base_flow_default_domain(monkeypatch, flow_mock): """Test BaseFlow class __init__ method with default domain.""" # Mocking os_mock = Mock() os_mock.getenv.return_value = None monkeypatch.setattr( 'data_landing_zone.flows.base_flow.os', os_mock) get_domain_mock = Mock() domain_mock = get_domain_mock.return_value monkeypatch.setattr( 'data_landing_zone.flows.base_flow.get_domain', get_domain_mock) # Test class method flow = base_flow.BaseFlow( flow_name=flow_mock.flow_name, version=flow_mock.flow_version) # Checks assert flow.domain == domain_mock assert flow.name == flow_mock.flow_name assert flow.version == flow_mock.flow_version assert flow.sentry_client is None def test_base_flow_senrty_client(monkeypatch, flow_mock): """Test BaseFlow class __init__ method, check sentry client.""" # Mocking os_mock = Mock() os_mock.getenv.return_value = 'sentry_dsn' monkeypatch.setattr( 'data_landing_zone.flows.base_flow.os', os_mock) raven_mock = Mock() sentry_client = raven_mock.Client.return_value monkeypatch.setattr( 'data_landing_zone.flows.base_flow.raven', raven_mock) # Test class method flow = base_flow.BaseFlow( flow_name=flow_mock.flow_name, version=flow_mock.flow_version, swf_domain=flow_mock.flow_domain) # Checks assert flow.domain == flow_mock.flow_domain assert flow.name == flow_mock.flow_name assert flow.version == flow_mock.flow_version assert flow.sentry_client == sentry_client @freeze_time('2017-10-01') def test_base_flow_workflow_id(monkeypatch, flow_mock): """Test BaseFlow calls workflow_id method.""" # Mocking os_mock = Mock() os_mock.getenv.return_value = None monkeypatch.setattr( 'data_landing_zone.flows.base_flow.os', os_mock) date = datetime.datetime.today().strftime('%Y-%m-%d') expected_workflow_id = '{flow_name}-{date}'.format( flow_name=flow_mock.flow_name, date=date) # Test class method flow = base_flow.BaseFlow( flow_name=flow_mock.flow_name, version=flow_mock.flow_version, swf_domain=flow_mock.flow_domain) workflow_id = flow.workflow_id({}) # Checks assert workflow_id == expected_workflow_id def test_base_flow_workflow_id_with_context_date(monkeypatch, flow_mock): """Test BaseFlow calls workflow_id method passed context_date.""" # Mocking os_mock = Mock() os_mock.getenv.return_value = None monkeypatch.setattr( 'data_landing_zone.flows.base_flow.os', os_mock) expected_workflow_id = '{flow_name}-{date}'.format( flow_name=flow_mock.flow_name, date='2017-10-01') # Test class method flow = base_flow.BaseFlow( flow_name=flow_mock.flow_name, version=flow_mock.flow_version, swf_domain=flow_mock.flow_domain) workflow_id = flow.workflow_id({'context_date': '2017-10-01'}) # Checks assert workflow_id == expected_workflow_id