import argparse from unittest.mock import MagicMock from unittest.mock import patch import boto.swf.layer2 as swf from processing_accounting.bin import monthly_statement_generation from processing_accounting.util import swf as swf_util def test_execute_flow(monkeypatch): """Test execute_flow """ mock_flow = MagicMock() mock_flow.workflow_id = lambda params: None mock_flow.name = 'test_name' mock_flow.domain = 'test_domain' mock_flow.version = 'test_version' mock_workflow_type = MagicMock() monkeypatch.setattr( mock_workflow_type, 'start', MagicMock(return_value=None)) monkeypatch.setattr( swf, 'WorkflowType', MagicMock(return_value=mock_workflow_type)) monthly_statement_generation._execute_flow( mock_flow, '203', 'label', 'quarter') swf.WorkflowType.assert_any_call( name='test_name', domain='test_domain', version='test_version', task_list='test_name') mock_workflow_type.start.assert_any_call( workflow_id=None, input=( '{"payment_interval": "quarter", ' '"period_ids": "203", "user_type": "label"}'), execution_start_to_close_timeout=str(18000)) @patch('processing_accounting.bin.monthly_statement_generation.db_util') def test_get_quarter_period_ids(db_util_mock): """test _get_quarter_period_ids """ mock_result = [ {'PERIOD_IDS': '204,205,206'} ] db_util_mock.snowflake_query = MagicMock(return_value=mock_result) resp = monthly_statement_generation._get_quarter_period_ids( 204) assert resp == '204,205,206' @patch('processing_accounting.flows.accounting_statement_export.flow.Flow') def test_run(mock_flow, monkeypatch): """test run """ mock_parser = MagicMock() mock_args = MagicMock() mock_args.period_id = '204' mock_args.option = None mock_args.payment_interval = None mock_flow_obj = MagicMock() mock_flow_obj.return_value = mock_flow monkeypatch.setattr( mock_parser, 'add_argument', MagicMock(return_value=None)) monkeypatch.setattr( mock_parser, 'parse_args', MagicMock(return_value=mock_args)) monkeypatch.setattr( argparse, 'ArgumentParser', MagicMock(return_value=mock_parser)) monkeypatch.setattr( monthly_statement_generation, '_execute_flow', MagicMock(return_value=None)) monkeypatch.setattr( monthly_statement_generation, '_get_quarter_period_ids', MagicMock(return_value='202,203,204')) mock_workflow_execution = MagicMock() monkeypatch.setattr( mock_workflow_execution, 'describe', MagicMock(return_value={'executionInfo': {'closeStatus': None}})) monkeypatch.setattr( swf_util, 'wait_for_workflow_to_complete', MagicMock(return_value=None)) monkeypatch.setattr( monthly_statement_generation, '_wait_for_dynamodb', MagicMock(return_value=None)) monthly_statement_generation.run('204') monthly_statement_generation._execute_flow.assert_any_call( mock_flow(), '202,203,204', 'label', 'quarter') monthly_statement_generation._execute_flow.assert_any_call( mock_flow(), '202,203,204', 'subaccount', 'quarter') monthly_statement_generation._execute_flow.assert_any_call( mock_flow(), '204', 'label', 'month') monthly_statement_generation._execute_flow.assert_any_call( mock_flow(), '204', 'subaccount', 'month')