"""Tests for contract_term_import.""" from unittest.mock import MagicMock from unittest.mock import patch from json_contract_file_import import contract_term_import from json_contract_file_import.entity_import_result import EntityImportResult from tests.unit.utils import assert_import_result @patch( 'json_contract_file_import.contract_term_import.create_contract_term') @patch( 'json_contract_file_import.contract_term_import.import_contract_term_conditions') def test_import_contract_terms_success( mock_import_contract_term_conditions, mock_create_contract_term, mock_json_contract_file_parsed ): """Test successful import contract terms.""" contract_id = 123 mock_response = MagicMock() mock_response.status_code = 201 mock_response.text = f"""{{ "contract_id": {contract_id}, "contract_term_name": "Test contract term", "term_type": "product", "attachments": [ 10, 18 ], "attachments_relations": {{ "label_ids": [ 12, 25 ], "upcs": [] }}, "is_base_term": true, "schedule_ids": [ "1", "2" ] }}""" mock_create_contract_term.return_value = mock_response term_condition_import_result = EntityImportResult( EntityImportResult.CONTRACT_TERM_CONDITION, 'Contract Term Condition Name', True, additional_info='Some extra info.' ) mock_import_contract_term_conditions.return_value = [term_condition_import_result] response = contract_term_import.import_contract_terms( contract_id, mock_json_contract_file_parsed ) assert len(response) == 2 mock_create_contract_term.assert_called_once_with( contract_id, { 'contract_term_name': 'Santa', 'term_type': 'product', 'attachments': ['8445162776431'], 'attachments_relations': { 'label_ids': [ '789468' ] } } ) mock_import_contract_term_conditions.assert_called_once_with( mock_response.json().get('contract_term_id'), mock_json_contract_file_parsed['contract_terms'][0]['contract_term'][ 'term_conditions'] ) assert_import_result(response[0], EntityImportResult( EntityImportResult.CONTRACT_TERM, 'Santa', True, additional_info=mock_response.text )) assert_import_result(response[1], term_condition_import_result) def test__get_attachments_from_int(): """Test get attachments from int values. Expecting converting to str.""" attachments = contract_term_import._get_attachments({ 'attachments': [1, 2, 3] }) assert attachments == ['1', '2', '3'] def test__get_attachments_from_str(): """Test get attachments from str values.""" attachments = contract_term_import._get_attachments({ 'attachments': ['1', '2', '3'] }) assert attachments == ['1', '2', '3'] def test__get_attachments_from_str_with_upc_prefix(): """Test get attachments from str values.""" attachments = contract_term_import._get_attachments({ 'attachments': ['UPC8445162776431'] }) assert attachments == ['8445162776431'] def test__get_attachments_relations(): """Test getting attachments, basic use case.""" created_attachments = contract_term_import._get_attachments_relations({ 'attachments_relations': { 'label_ids': [ '781885' ] } }) assert created_attachments == {'label_ids': ['781885']} def test__get_attachments_relations_empty_input(): """Test getting attachments when input is empty object.""" created_attachments = contract_term_import._get_attachments_relations({ 'attachments_relations': {} }) assert created_attachments == {} def test__get_attachments_relations_null_input(): """Test getting attachments when input is null.""" created_attachments = contract_term_import._get_attachments_relations({ 'attachments_relations': None }) assert created_attachments == {} def test__get_attachments_relations_number_input(): """Test getting attachments when input is int.""" created_attachments = contract_term_import._get_attachments_relations({ 'attachments_relations': { 'label_ids': [123] } }) assert created_attachments == {'label_ids': ['123']}