cspresentpolicyactions

python · CrowdStrike Falcon

Details

IDcspresentpolicyactions
Languagepython
From Version6.10.0
Docker Imagedemisto/python3:3.12.13.10116658
Tagsdynamic-section
from unittest.mock import MagicMock

import demistomock as demisto
import pytest
from Cspresentpolicyactions import convert_json_to_markdown_table, main


def test_convert_json_to_markdown_table_basic():
    input_data = {"Action1": "Value1", "Action2": "Value2"}
    expected_output = (
        "| ***Policy Action*** | ***Opration Executed*** |\n| --- | ----- |\n| Action2 | Value2 |\n| Action1 | Value1 |\n"  # noqa: E501
    )
    assert convert_json_to_markdown_table(input_data) == expected_output


def test_convert_json_to_markdown_table_with_dict():
    input_data = {"Action1": {"subkey": "subvalue"}}
    expected_output = '| ***Policy Action*** | ***Opration Executed*** |\n| --- | ----- |\n| Action1 | ```json\n{\n    "subkey": "subvalue"\n}\n``` |\n'  # noqa: E501
    assert convert_json_to_markdown_table(input_data) == expected_output


def test_convert_json_to_markdown_table_with_list():
    input_data = {"Action1": ["item1", "item2"]}
    expected_output = "| ***Policy Action*** | ***Opration Executed*** |\n| --- | ----- |\n| Action1 | item1, item2 |\n"
    assert convert_json_to_markdown_table(input_data) == expected_output


def test_convert_json_to_markdown_table_with_boolean():
    input_data = {"Action1": True, "Action2": False}
    expected_output = "| ***Policy Action*** | ***Opration Executed*** |\n| --- | ----- |\n| Action1 | ✅ |\n| Action2 | ❌ |\n"
    assert convert_json_to_markdown_table(input_data) == expected_output


def test_convert_json_to_markdown_table_invalid_input():
    with pytest.raises(ValueError):
        convert_json_to_markdown_table("Not a dict")


def test_convert_json_to_markdown_table_sort_options():
    input_data = {"B": 2, "A": 1, "C": 3}
    assert "| C | 3 |" in convert_json_to_markdown_table(input_data, sort_by_value=True, descending=True)
    assert "| A | 1 |" in convert_json_to_markdown_table(input_data, sort_by_value=True, descending=False)
    assert "| A | 1 |" in convert_json_to_markdown_table(input_data, sort_by_value=False, descending=True)


@pytest.mark.parametrize(
    "context_value, expected_output, expected_calls",
    [
        ([{"policyactions": {"Action1": "Value1"}}], "| Action1 | Value1 |", 1),
        ([], "### No policyactions data available.", 2),
        ([{"no_policyactions": {}}], "### No policyactions data available.", 2),
    ],
)
def test_main_with_data(monkeypatch, context_value, expected_output, expected_calls):
    def mock_context():
        return {"CrowdStrike": {"Detection": context_value}}

    monkeypatch.setattr(demisto, "context", mock_context)
    mock_results = MagicMock()
    monkeypatch.setattr(demisto, "results", mock_results)
    main()
    assert mock_results.call_count == expected_calls
    if isinstance(mock_results.call_args_list[0][0][0], dict):
        assert expected_output in mock_results.call_args_list[0][0][0]["Contents"]
    else:
        assert expected_output in mock_results.call_args_list[0][0][0]
    if expected_calls == 2:
        assert "No Policy Actions were found" in mock_results.call_args_list[1][0][0]


def test_main_exception(monkeypatch):
    def mock_context():
        return {}

    monkeypatch.setattr(demisto, "context", mock_context)
    mock_results = MagicMock()
    monkeypatch.setattr(demisto, "results", mock_results)
    main()
    mock_results.assert_called_once_with("No Policy Actions were found on CrowdStrike.Detection context key")


def test_main_exception_no_context(monkeypatch):
    monkeypatch.setattr(demisto, "context", lambda: None)
    mock_results = MagicMock()
    monkeypatch.setattr(demisto, "results", mock_results)
    main()
    assert mock_results.call_count == 1
    assert "No Policy Actions were found" in mock_results.call_args[0][0]


def test_main_exception_raised(monkeypatch):
    def mock_context():
        raise Exception("Test exception")

    monkeypatch.setattr(demisto, "context", mock_context)
    mock_results = MagicMock()
    monkeypatch.setattr(demisto, "results", mock_results)
    main()
    assert mock_results.call_count == 1
    assert "No Policy Actions were found" in mock_results.call_args[0][0]