"""Test label.""" from unittest.mock import patch from sony_metadata import response from sony_metadata.logic import label @patch('sony_metadata.logic.label._create_label_fields_element') @patch('sony_metadata.models.field_manager.get_subaccount_labels') def test_get_subaccount_labels( mock_get_labels, mock_create_label_fields_element): """Test get_subaccount_labels handles valid and invalid Response.""" # test get_subaccount_labels returns valid response.Response mock_get_labels.return_value = response.Response('hi') result_response = label.get_subaccount_labels(1) mock_create_label_fields_element.assert_called_with('hi') assert result_response mock_get_labels.reset_mock() mock_create_label_fields_element.reset_mock() # test get_subaccount_labels returns invalid response.Response mock_get_labels.return_value = response.create_not_found_response( 'No subaccount found') result_response = label.get_subaccount_labels(1) assert not mock_create_label_fields_element.called assert not result_response assert result_response.status == 404 @patch('sony_metadata.logic.label._create_label_fields_element') @patch('sony_metadata.models.field_manager.get_vendor_labels') def test_get_vendor_labels( mock_get_vendor_labels, mock_create_label_fields_element): """Test get_vendor_labels handles valid and invalid Response.""" # test get_vendor_labels returns valid response.Response mock_get_vendor_labels.return_value = response.Response('hi') result_response = label.get_vendor_labels(1) mock_create_label_fields_element.assert_called_with('hi') assert result_response mock_get_vendor_labels.reset_mock() mock_create_label_fields_element.reset_mock() # test get_vendor_labels returns invalid response.Response mock_get_vendor_labels.return_value = response.create_not_found_response( 'No vendor found') result_response = label.get_vendor_labels(1) assert not mock_create_label_fields_element.called assert not result_response assert result_response.status == 404 def test_create_label_fields_element(): """Test _create_label_fields_element flattens label_fields dictionary.""" flat_dict = { 'vendor_id': 2, 'financial_label_code': 'q', 'financial_label_name': 't', 'rep_owner_name': None } nested_dict = label._create_label_fields_element(flat_dict) assert nested_dict == { 'vendor_id': 2, 'label_fields': { 'financial_label_code': 'q', 'financial_label_name': 't' } } assert flat_dict == { 'vendor_id': 2, 'financial_label_code': 'q', 'financial_label_name': 't', 'rep_owner_name': None } @patch('sony_metadata.logic.label.add_update_vendor_meta') def test_add_vendor_meta(mock_add_update_metadata): """Test that adding a vendor that doesnt exist inserts the record.""" vendor_id = 7123 metadata = { 'financial_label_code': 'Megaforce +', 'financial_label_name': 'G913', 'rep_owner_code': None, 'rep_owner_name': None, 'gras_imprint_code': None, 'gras_imprint_name': None, 'sap_profit_center_code': None, 'sap_profit_center_name': None} response = label.add_update_vendor_meta(vendor_id, metadata) assert mock_add_update_metadata.called mock_add_update_metadata.assert_called_with(7123, metadata) assert response.id @patch('sony_metadata.models.field_manager.delete_vendor_metadata') def test_delete_vendor_meta(mock_delete_metadata): """Test that posting empty values call delete method.""" vendor_id = 7123 metadata = { 'financial_label_code': '', 'financial_label_name': '', 'rep_owner_code': '', 'rep_owner_name': '', 'gras_imprint_code': '', 'gras_imprint_name': '', 'sap_profit_center_code': '', 'sap_profit_center_name': ''} label.add_update_vendor_meta(vendor_id, metadata) mock_delete_metadata.assert_called_with(vendor_id, None) def test_is_empty_metadata(): """Test that payload with empty fields returns a boolean.""" inputs_outputs = [( { 'financial_label_code': '', 'financial_label_name': '', 'rep_owner_code': '', 'gras_imprint_code': '', 'gras_imprint_name': '', 'sap_profit_center_code': '', 'sap_profit_center_name': '' }, False ), ( {}, False ), ( { 'financial_label_code': 'I am not empty!', 'financial_label_name': '', 'rep_owner_code': '', 'gras_imprint_code': '', 'gras_imprint_name': '', 'sap_profit_center_code': '', 'sap_profit_center_name': '' }, False ), ( { 'financial_label_code': '', 'financial_label_name': '', 'rep_owner_code': '', 'gras_imprint_code': '', 'gras_imprint_name': '', 'sap_profit_center_code': '', 'sap_profit_center_name': '', 'unrelated': 'I am here, but who cares?' }, False ) ] for (metadata, expected_result) in inputs_outputs: assert label.is_empty_metadata(metadata) == expected_result def test_missing_keys_throws_error(): """Test that adding a vendor that doesnt exist inserts the record.""" vendor_id = 7123 metadata = { 'financial_label_name': 'G913', 'rep_owner_code': None, 'rep_owner_name': None, 'gras_imprint_code': None, 'gras_imprint_name': None, 'sap_profit_center_code': None, 'sap_profit_center_name': None} result = label.add_update_vendor_meta(vendor_id, metadata) assert not result @patch('sony_metadata.models.field_manager.add_update_vendor_metadata') @patch('sony_metadata.models.field_manager.delete_vendor_metadata') def test_delete_not_called(mock_delete_meta, mock_add_update_meta): """Test that posting just one field calls update.""" vendor_id = 7123 metadata = { 'financial_label_code': '', 'financial_label_name': 'G913', 'rep_owner_code': '', 'rep_owner_name': '', 'gras_imprint_code': '', 'gras_imprint_name': '', 'sap_profit_center_code': '', 'sap_profit_center_name': ''} label.add_update_vendor_meta(vendor_id, metadata) mock_add_update_meta.assert_called_with(vendor_id, metadata, None) assert not mock_delete_meta.called @patch('sony_metadata.models.field_manager.add_update_vendor_metadata') @patch('sony_metadata.models.field_manager.delete_vendor_metadata') def test_add_update_subaccount(mock_delete_meta, mock_add_update_meta): """Test subaccont add/update.""" vendor_id = 7123 subaccount_id = 34534523 metadata = { 'financial_label_code': '', 'financial_label_name': 'G913', 'rep_owner_code': '', 'rep_owner_name': '', 'gras_imprint_code': '', 'gras_imprint_name': '', 'sap_profit_center_code': '', 'sap_profit_center_name': ''} label.add_update_vendor_meta(vendor_id, metadata, subaccount_id) mock_add_update_meta.assert_called_with(vendor_id, metadata, 34534523) assert not mock_delete_meta.called