"""Lambda test module.""" from unittest.mock import patch import pytest from src import app as index from src.app import MultipleSubaccountsExist @pytest.fixture def input_data_fixture(): """Return input_data. Returns: dict: header dict """ return { 'vendor_id': 123, 'rep_owner_name': 'test_rep_owner_name', 'rep_owner_key': 'test_key', } @pytest.fixture def input_data_fixture_incorrect(): """Return incorrect input_data. Returns: dict: header dict """ return {'vendor_id': 123} @patch('src.app.request.process') def test_check_subaccount_already_exist_several_subaccounts( mock_request_process, input_data_fixture): """Test check_subaccount_already_exist with return several subaccounts.""" get_response = {'items': [ { 'subaccount_id': 81717, 'vendor_id': 123, 'subaccount_name': 'test_rep_owner_name', }, { 'subaccount_id': 81718, 'vendor_id': 123, 'subaccount_name': 'test_rep_owner_name', } ]} mock_request_process.return_value.status_code = 200 mock_request_process.return_value.json.return_value = get_response with pytest.raises(MultipleSubaccountsExist): index.check_subaccount_already_exist(input_data_fixture) @patch('src.app.request.process') def test_check_subaccount_already_exist_get_one_subaccount( mock_request_process, input_data_fixture): """Test check_subaccount_already_exist - a subaccount is already exist.""" subaccount = { 'subaccount_id': 81717, 'vendor_id': 123, 'subaccount_name': 'test_rep_owner_name'} get_response = {'items': [subaccount]} mock_request_process.return_value.status_code = 200 mock_request_process.return_value.json.return_value = get_response result = index.check_subaccount_already_exist(input_data_fixture) assert result assert result == subaccount @patch('src.app.request.process') def test_check_subaccount_already_exist_no_subaccount_with_proposed_name( mock_request_process, input_data_fixture): """Test check_subaccount_already_exist - no required subaccount.""" get_response = {'items': [{ 'subaccount_id': 81717, 'vendor_id': 123, # not the same name as in input_data 'subaccount_name': 'subaccount_name'}]} mock_request_process.return_value.status_code = 200 mock_request_process.return_value.json.return_value = get_response result = index.check_subaccount_already_exist(input_data_fixture) assert result is None @patch('src.app.request.process') def test_check_subaccount_already_exist_vendor_has_no_subaccounts( mock_request_process, input_data_fixture): """Test check_subaccount_already_exist - no subaccount.""" get_response = {'code': 'not_found_error'} mock_request_process.return_value.status_code = 404 mock_request_process.return_value.json.return_value = get_response result = index.check_subaccount_already_exist(input_data_fixture) assert result is None @patch('src.app.request.process') def test_check_subaccount_already_exist_process_500_error( mock_request_process, input_data_fixture): """Test ows-account returns status_code > 500.""" mock_request_process.return_value.status_code = 502 with pytest.raises(index.RetryException): index.check_subaccount_already_exist(input_data_fixture) @patch('src.app.check_subaccount_already_exist') @patch('src.app.request.process') def test_handler_existing_subaccount( mock_request_process, mock_check_subaccount_already_exist, input_data_fixture): """Test handler don't create subaccount if it is already exist.""" mock_check_subaccount_already_exist.return_value = {'subaccount_id': '1'} result = index.handler(input_data_fixture, {}) mock_request_process.assert_not_called() assert result == {'subaccount_id': '1'} @patch('src.app.check_subaccount_already_exist') @patch('src.app.request.process') def test_handler( mock_request_process, mock_check_subaccount_already_exist, input_data_fixture): """Test handler create subaccount.""" new_subaccount = { 'subaccount_id': '1', **input_data_fixture } mock_check_subaccount_already_exist.return_value = None mock_request_process.return_value.status_code = 200 mock_request_process.return_value.json.return_value = new_subaccount result = index.handler(input_data_fixture, {}) mock_check_subaccount_already_exist.assert_called_once_with( input_data_fixture) assert result == { 'subaccount_id': None }