"""Test for log module.""" from copy import copy from datetime import datetime import json from unittest.mock import ANY from unittest.mock import Mock from unittest.mock import patch from flows.sales_data import log from flows.sales_data import status @patch('flows.sales_data.log.datetime') @patch('flows.sales_data.log.datastore') def test_create(mock_datastore, mock_datetime, database_context): """Test create function.""" mock_now = datetime(2018, 1, 1, 1, 1, 1) mock_datastore.context = database_context mock_datetime.now.return_value = mock_now upcs = Mock() upcs.data_json = json.dumps(['12', '34']) log_params = { 'correlation_id': 'cid123', 'accounting_period_id': '', 'upcs': upcs} log.create(**log_params) expected = copy(log_params) expected['etl_start'] = mock_now expected['etl_status'] = status.STARTED expected['upcs'] = upcs.data_json call_list = mock_datastore.execute.call_args_list assert call_list[0][0][1] == expected @patch('flows.sales_data.log.datastore') def test_add_run_id(mock_datastore, database_context): """Test add_run_id function.""" mock_datastore.context = database_context log.add_run_id(correlation_id='c1', workflow_run_id='w1') call_list = mock_datastore.execute.call_args_list expected = {'correlation_id': 'c1', 'workflow_run_id': 'w1'} assert call_list[0][0][1] == expected @patch('flows.sales_data.log.datetime') @patch('flows.sales_data.log.datastore') def test_update_status(mock_datastore, mock_datetime, database_context): """Test update_status function.""" mock_now = datetime(2018, 1, 1, 1, 1, 1) mock_datetime.now.return_value = mock_now mock_datastore.context = database_context log.update_status('c1', 'status1', False) log.update_status('c1', 'status2', True) call_list = mock_datastore.execute.call_args_list expected = {'correlation_id': 'c1', 'status': 'status1', 'etl_end': None} assert call_list[0][0][1] == expected expected['status'] = 'status2' expected['etl_end'] = mock_now assert call_list[1][0][1] == expected @patch('flows.sales_data.log.datetime') @patch('flows.sales_data.log.datastore') def test_accounting_period_update(mock_datastore, database_context): """Test accounting_period_update function.""" mock_datastore.context = database_context log.accounting_period_update('c1', 123) mock_datastore.execute.assert_called_once_with( ANY, {'correlation_id': 'c1', 'accounting_period_id': 123})