import demistomock as demisto import pytest from GenerateAsBuilt import SortedTableData, TableData def test_as_html(): """ Given: - a list of dicts When: - calling as_html Then: - validate the html is as expected """ test_data = [{"name": "test", "blah": "test2"}] o = TableData(test_data, "Test table") r = o.as_html(["name", "blah"]) assert "name" in r assert "test" in r def test_sort_table(): """ Given: - a list of dicts When: - calling sort_table Then: - validate the list is sorted by the given key """ test_data = [{"name": "btest", "blah": "test2"}, {"name": "Ctest", "blah": "test2"}, {"name": "atest", "blah": "test2"}] o = SortedTableData(test_data, "Test table", "name") assert o.data[0].get("name") == "atest" assert o.data[1].get("name") == "btest" def test_post_api_request(mocker): """ Given: - valid api path and body arguments When: - calling post_api_request Then: - validate the response is as expected """ from GenerateAsBuilt import post_api_request mocker.patch.object(demisto, "executeCommand", return_value=[{"Contents": {"response": "ok"}}]) assert post_api_request("/incidents/search", {}) == "ok" @pytest.mark.parametrize( "res, expected", [([{"Contents": {"response": ["ok"]}}], ["ok"]), ([{"Contents": {"response": None}}], None)] ) def test_get_api_request(mocker, res, expected): """ Given: - valid api path When: - calling get_api_request Then: - validate the response is as expected """ from GenerateAsBuilt import get_api_request mocker.patch.object(demisto, "executeCommand", return_value=res) assert get_api_request("/incidents/search") == expected def test_get_all_incidents(mocker): """ Given: - available incidents When: - calling get_all_incidents Then: - all available incidents are returned """ import GenerateAsBuilt from GenerateAsBuilt import get_all_incidents mocker.patch.object(GenerateAsBuilt, "post_api_request", return_value={"data": "ok"}) assert get_all_incidents() == "ok" def test_get_open_incidents(mocker): """ Given: - open incidents When: - calling get_open_incidents Then: - all open incidents are returned """ import GenerateAsBuilt from GenerateAsBuilt import SingleFieldData, get_open_incidents mocker.patch.object(GenerateAsBuilt, "post_api_request", return_value={"total": 1000}) expected = SingleFieldData(f"Open Incidents {7} days", 1000) res = get_open_incidents() assert res.name == expected.name assert res.data == expected.data def test_get_closed_incidents(mocker): """ Given: - closed incidents When: - calling get_closed_incidents Then: - all closed incidents are returned """ import GenerateAsBuilt from GenerateAsBuilt import SingleFieldData, get_closed_incidents mocker.patch.object(GenerateAsBuilt, "post_api_request", return_value={"total": 1000}) expected = SingleFieldData(f"Closed Incidents {7} days", 1000) res = get_closed_incidents() assert res.name == expected.name assert res.data == expected.data def test_get_enabled_integrations(mocker): """ Given: - enabled integrations When: - calling get_enabled_integrations Then: - all enabled integrations are returned """ import GenerateAsBuilt from GenerateAsBuilt import SortedTableData, get_enabled_integrations mocker.patch.object(GenerateAsBuilt, "post_api_request", return_value={"instances": [{"enabled": True, "name": "test"}]}) expected = SortedTableData([{"enabled": True, "name": "test"}], "Enabled Instances", "name") res = get_enabled_integrations(1) assert res.name == expected.name assert res.data == expected.data @pytest.mark.parametrize("get_api_request_returned_value", [None, [{"enabled": True, "name": "test"}]]) def test_get_installed_packs(mocker, get_api_request_returned_value): """ Given: - installed packs When: - calling get_installed_packs Then: - all installed packs are returned """ import GenerateAsBuilt from GenerateAsBuilt import SortedTableData, get_installed_packs mocker.patch.object(GenerateAsBuilt, "get_api_request", return_value=get_api_request_returned_value) result = get_installed_packs() if result: expected = SortedTableData([{"enabled": True, "name": "test"}], "Installed Content Packs", "name") assert result.name == expected.name assert result.data == expected.data def test_get_custom_playbooks(mocker): """ Given: - custom playbooks When: - calling get_custom_playbooks Then: - all custom playbooks are returned """ import GenerateAsBuilt from GenerateAsBuilt import SortedTableData, get_custom_playbooks mocker.patch.object(GenerateAsBuilt, "post_api_request", return_value={"playbooks": [{"name": "test"}]}) expected = SortedTableData([{"name": "test", "TotalTasks": 0}], "Custom Playbooks", "name") res = get_custom_playbooks() assert res.name == expected.name assert res.data == expected.data def test_get_custom_reports(mocker): """ Given: - custom reports When: - calling get_custom_reports Then: - all custom reports are returned """ import GenerateAsBuilt from GenerateAsBuilt import TableData, get_custom_reports mocker.patch.object(GenerateAsBuilt, "get_api_request", return_value=[{"name": "test"}]) expected = TableData([{"name": "test"}], "Custom Reports") res = get_custom_reports() assert res.name == expected.name assert res.data == expected.data def test_get_custom_dashboards(mocker): """ Given: - custom dashboards When: - calling get_custom_dashboards Then: - all custom dashboards are returned """ import GenerateAsBuilt from GenerateAsBuilt import TableData, get_custom_dashboards mocker.patch.object(GenerateAsBuilt, "get_api_request", return_value={"dashboard": {"name": "test"}}) expected = TableData([{"name": "test"}], "Custom dashboards") res = get_custom_dashboards() assert res.name == expected.name assert res.data == expected.data def test_get_all_playbooks(mocker): """ Given: - available playbooks When: - calling get_all_playbooks Then: - all available playbooks are returned """ import GenerateAsBuilt from GenerateAsBuilt import TableData, get_all_playbooks mocker.patch.object(GenerateAsBuilt, "post_api_request", return_value={"playbooks": [{"name": "test"}]}) expected = TableData([{"name": "test", "TotalTasks": 0}], "All Playbooks") res = get_all_playbooks() assert res.name == expected.name assert res.data == expected.data def test_get_playbook_stats(mocker): """ Given: - available playbooks When: - calling get_playbook_stats Then: - all available playbooks stats are returned """ import GenerateAsBuilt from GenerateAsBuilt import TableData, get_playbook_stats mocker.patch.object( GenerateAsBuilt, "get_all_incidents", return_value=[{"name": "test", "TotalTasks": 0, "playbookId": "000001"}] ) expected = TableData([{"playbook": "000001", "incidents": 1}], "Playbook Stats") res = get_playbook_stats(SortedTableData([{"name": "test", "TotalTasks": 0}], "Custom Playbooks", "name")) assert res.name == expected.name assert res.data == expected.data def test_get_playbook_dependencies(mocker): """ Given: - available playbooks When: - calling get_playbook_dependencies Then: - all available playbooks dependencies are returned """ import GenerateAsBuilt from GenerateAsBuilt import TableData, get_playbook_dependencies mocker.patch.object( GenerateAsBuilt, "get_all_playbooks", return_value=TableData([{"name": "test", "TotalTasks": 0, "id": "000001"}], "All Playbooks"), ) mocker.patch.object( GenerateAsBuilt, "post_api_request", return_value={"existing": {"playbook": {"000001": [{"ok": "ok", "type": "type", "name": "name"}]}}}, ) res = get_playbook_dependencies("test") assert res.get("type").name == "types" assert res.get("type").data == [{"type": "type", "name": "name", "pack": "Custom"}] def test_get_custom_automations(mocker): """ Given: - custom automations When: - calling get_custom_automations Then: - all custom automations are returned """ import GenerateAsBuilt from GenerateAsBuilt import TableData, get_custom_automations mocker.patch.object(GenerateAsBuilt, "post_api_request", return_value={"scripts": [{"name": "test"}]}) expected = TableData([{"name": "test"}], "Custom Automations") res = get_custom_automations() assert res.name == expected.name assert res.data == expected.data def test_get_system_config(mocker): """ Given: - system configuration settings When: - calling get_system_config Then: - all system configurations are returned """ import GenerateAsBuilt from GenerateAsBuilt import TableData, get_system_config mocker.patch.object(GenerateAsBuilt, "get_api_request", return_value={"config": [{"name": "test"}]}) expected = TableData([{"name": "test"}], "System Configuration") res = get_system_config() assert res.name == expected.name