from unittest.mock import patch import json import pytest from DSPMExtractRiskDetails import set_user_slack_email, get_incident_details_command, main def test_set_user_slack_email_with_valid_owner_email(): incident_details = {"asset Dig Tags": json.dumps({"Owner": ["owner@example.com"]})} defaultSlackUser = "default@example.com" with patch("demistomock.setContext") as mock_setContext: set_user_slack_email(incident_details, defaultSlackUser) mock_setContext.assert_called_once_with("userSlackEmail", "owner@example.com") def test_set_user_slack_email_with_empty_owner_list(): incident_details = {"asset Dig Tags": json.dumps({"Owner": []})} defaultSlackUser = "default@example.com" with patch("demistomock.setContext") as mock_setContext: set_user_slack_email(incident_details, defaultSlackUser) mock_setContext.assert_called_once_with("userSlackEmail", defaultSlackUser) def test_set_user_slack_email_with_non_list_owner(): incident_details = { "asset Dig Tags": json.dumps({"Owner": "owner@example.com"}) # Not a list, incorrect format } defaultSlackUser = "default@example.com" with patch("demistomock.setContext") as mock_setContext: set_user_slack_email(incident_details, defaultSlackUser) mock_setContext.assert_called_once_with("userSlackEmail", defaultSlackUser) def test_set_user_slack_email_with_missing_asset_dig_tags(): incident_details = {} defaultSlackUser = "default@example.com" with patch("demistomock.setContext") as mock_setContext: set_user_slack_email(incident_details, defaultSlackUser) mock_setContext.assert_called_once_with("userSlackEmail", defaultSlackUser) def test_set_user_slack_email_with_null_asset_dig_tags(): incident_details = {"asset Dig Tags": None} defaultSlackUser = "default@example.com" with patch("demistomock.setContext") as mock_setContext: set_user_slack_email(incident_details, defaultSlackUser) mock_setContext.assert_called_once_with("userSlackEmail", defaultSlackUser) def test_get_incident_details_command_with_valid_data(): incident_data = { "id": "12345", "riskfindingid": "r123", "riskname": "High Risk", "severity": "Critical", "assetname": "Asset1", "assetid": "a123", "status": "Active", "projectid": "p123", "cloud": "AWS", "servicetype": "S3", "firstdetectedon": "2024-10-30T10:30:00Z", "assetdigtags": json.dumps({"Owner": ["owner@example.com"]}), "remediateinstruction": "Follow the steps to remediate.", } args = {"incident_object": incident_data} incident_object = get_incident_details_command(args) assert incident_object["incidentId"] == "12345" assert incident_object["riskFindingId"] == "r123" assert incident_object["ruleName"] == "High Risk" def test_get_incident_details_command_with_missing_fields(): incident_data = {"id": "12345", "riskfindingid": "r123", "riskname": "High Risk"} args = {"incident_object": incident_data} incident_object = get_incident_details_command(args) assert incident_object["incidentId"] == "12345" assert incident_object["riskFindingId"] == "r123" assert incident_object["ruleName"] == "High Risk" assert incident_object.get("severity") == "N/A" def test_main_success_case(): args = { "defaultSlackUser": "default@example.com", "incident_object": { "id": "12345", "riskfindingid": "r123", "riskname": "High Risk", "severity": "Critical", "assetname": "Asset1", "assetid": "a123", "status": "Active", "projectid": "p123", "cloud": "AWS", "servicetype": "S3", "firstdetectedon": "2024-10-30T10:30:00Z", "assetdigtags": json.dumps({"Owner": ["owner@example.com"]}), "remediateinstruction": "Follow the steps to remediate.", }, } with ( patch("demistomock.args", return_value=args), patch("demistomock.setContext") as mock_setContext, patch("DSPMExtractRiskDetails.return_results") as mock_return_results, ): main() mock_setContext.assert_called_once_with("userSlackEmail", "owner@example.com") assert mock_return_results.called # Run pytest with coverage if __name__ == "__main__": pytest.main(["-v", "--cov=DSPMExtractRiskDetails", "--cov-report=term-missing"])