DataminrPulseIntelAgentsPhysicalContext

This dynamic automation update the intel agents physical context data to HTML and presents it in the layout in color according to theme.

python · Dataminr Pulse

Details

IDDataminrPulseIntelAgentsPhysicalContext
Languagepython
From Version6.10.0
Docker Imagedemisto/python3:3.12.13.10116658
Tagsdynamic-section

README

This dynamic automation update the intel agents physical context data to HTML and presents it in the layout in color according to theme.

Script Data


Name Description
Script Type python3
Tags dynamic-section
Cortex XSOAR Version 6.10.0

Inputs


There are no inputs for this script.

Outputs


There are no outputs for this script.

from CommonServerPython import *  # noqa: F401
from DataminrPulseIntelAgentsPhysicalContext import main, demisto, PANEL_NAME
import json
import os


def util_load_json(path):
    """Load a JSON file to python dictionary."""
    with open(path, encoding="utf-8") as f:
        return json.loads(f.read())


def util_load_txt(path):
    """Load a text file to python dictionary."""
    with open(path, encoding="utf-8") as f:
        return f.read()


def test_main_with_valid_intel_agents_physical_context_data_in_light_mode(mocker):
    """
    Test the main function with valid intel agents physical context data in light mode.
    """
    intel_agents_data = util_load_json(
        os.path.join(os.path.dirname(os.path.realpath(__file__)), "test_data/intel_agents_data.json")
    )

    incident: dict = {
        "CustomFields": {
            "dataminrpulseintelagentssummary": json.dumps(intel_agents_data),
            "dataminrpulseexpandalerturl": "Dummy_URL",
        }
    }
    theme = {"context": {"User": {"theme": "light"}}}

    mocker.patch.object(demisto, "incident", return_value=incident)
    mocker.patch.object(demisto, "callingContext", theme)

    mock_return = mocker.patch("DataminrPulseIntelAgentsPhysicalContext.return_results")

    main()

    intel_agents = util_load_txt(
        os.path.join(os.path.dirname(os.path.realpath(__file__)), "test_data/expected_intel_agents_data.txt")
    )

    expected_content = (
        '<div style="background:#E9FBF9; color:#000000; border:2px solid #016558; border-radius:5px; padding:10px; '
        'margin-top:10px; line-height:1.2; font-size:14px;">'
        f'<h4 style="color:#016558;">{PANEL_NAME}</h4>'  # noqa: E231,E702
        f"{intel_agents}</div>"  # type: ignore
    )

    assert mock_return.call_args.args[0]["Type"] == EntryType.NOTE
    assert mock_return.call_args.args[0]["ContentsFormat"] == EntryFormat.HTML
    assert mock_return.call_args.args[0]["Contents"] == expected_content


def test_main_with_valid_intel_agents_physical_context_data_in_dark_mode(mocker):
    """
    Test the main function with valid intel agents physical context data in dark mode.
    """
    intel_agents_data = util_load_json(
        os.path.join(os.path.dirname(os.path.realpath(__file__)), "test_data/intel_agents_data.json")
    )

    incident: dict = {
        "CustomFields": {
            "dataminrpulseintelagentssummary": json.dumps(intel_agents_data),
            "dataminrpulseexpandalerturl": "Dummy_URL",
        }
    }
    theme = {"context": {"User": {"theme": "dark"}}}

    mocker.patch.object(demisto, "incident", return_value=incident)
    mocker.patch.object(demisto, "callingContext", theme)

    mock_return = mocker.patch("DataminrPulseIntelAgentsPhysicalContext.return_results")

    main()

    intel_agents = util_load_txt(
        os.path.join(os.path.dirname(os.path.realpath(__file__)), "test_data/expected_intel_agents_data.txt")
    )

    expected_content = (
        '<div style="background:#082223; color:#FFFFFF; border:2px solid #53DFCD; border-radius:5px; padding:10px; '
        'margin-top:10px; line-height:1.2; font-size:14px;">'
        f'<h4 style="color:#53DFCD;">{PANEL_NAME}</h4>'  # noqa: E231,E702
        f"{intel_agents}</div>"  # type: ignore
    )

    assert mock_return.call_args.args[0]["Type"] == EntryType.NOTE
    assert mock_return.call_args.args[0]["ContentsFormat"] == EntryFormat.HTML
    assert mock_return.call_args.args[0]["Contents"] == expected_content


def test_main_with_no_intel_agents_physical_context_data(mocker):
    """
    Test the main function with no intel agents physical context data.
    """
    incident: dict = {"CustomFields": {}}
    mocker.patch.object(demisto, "incident", return_value=incident)

    mock_return = mocker.patch("DataminrPulseIntelAgentsPhysicalContext.return_results")

    main()

    assert mock_return.call_args.args[0]["Type"] == EntryType.NOTE
    assert mock_return.call_args.args[0]["ContentsFormat"] == EntryFormat.HTML
    assert mock_return.call_args.args[0]["Contents"] == (
        f'<h4 style="margin:10px 0;">{PANEL_NAME}</h4><p>N/A</p>'  # noqa: E231,E702
    )


def test_main_with_invalid_intel_agents_physical_context_data(mocker):
    """
    Test the main function with invalid intel agents physical context data.
    """
    incident: dict = {
        "CustomFields": {
            "dataminrpulseintelagentssummary": "[",
            "dataminrpulseexpandalerturl": "Dummy_URL",
        }
    }
    mocker.patch.object(demisto, "incident", return_value=incident)

    mock_return = mocker.patch("DataminrPulseIntelAgentsPhysicalContext.return_error")

    main()

    error_message = 'Failed to render data: Failed to parse "Dataminr Pulse Intel Agents Summary" JSON string.'

    assert mock_return.call_args.args[0] == error_message