from unittest.mock import patch import ChronicleAssetEventsForProductIDWidgetScript def test_main_success(mocker): """ When main function is called, set_arguments_for_widget_view should be called. """ mocker.patch.object(ChronicleAssetEventsForProductIDWidgetScript, "set_arguments_for_widget_view", return_value={}) ChronicleAssetEventsForProductIDWidgetScript.main() assert ChronicleAssetEventsForProductIDWidgetScript.set_arguments_for_widget_view.called @patch("ChronicleAssetEventsForProductIDWidgetScript.return_error") def test_main_failure(mock_return_error, capfd, mocker): """ When main function gets some exception then valid message should be printed. """ mocker.patch.object(ChronicleAssetEventsForProductIDWidgetScript, "set_arguments_for_widget_view", side_effect=Exception) with capfd.disabled(): ChronicleAssetEventsForProductIDWidgetScript.main() mock_return_error.assert_called_once_with("Could not load widget:\n") def test_set_arguments_for_widget_view_when_product_id_is_empty(): """ When chronicleassetproductid indicator field is kept empty, set_arguments_for_widget_view should return empty argument dictionary. """ # set arguments for command indicator_data = {"CustomFields": {}} # Execute arguments = ChronicleAssetEventsForProductIDWidgetScript.set_arguments_for_widget_view(indicator_data) # Assert assert arguments == {} def test_set_arguments_for_widget_view_when_product_id_is_valid(): """ When chronicleassetproductid indicator field has valid value, set_arguments_for_widget_view should set the arguments successfully. """ # set argument for command indicator_data = {"CustomFields": {"chronicleassetproductid": "12345"}} # set expected output expected_arguments = {"asset_identifier": "12345", "asset_identifier_type": "Product ID", "preset_time_range": "Last 30 days"} # Execute arguments = ChronicleAssetEventsForProductIDWidgetScript.set_arguments_for_widget_view(indicator_data) # Assert assert expected_arguments == arguments