import html as html_module import json BASE_URL = "https://api.mnemonic.no" CASE_ID = 1337 COMMENT_ID = "some-long-hash" TAG_ID = "some-long-hash" TAG_KEY = "test_key" TAG_VALUE = "test_value" ATTACHMENT_ID = "some-long-hash" EVENT_TYPE = "NIDS" TIMESTAMP = "some-timestamp" CUSTOMER_ID = 5381 EVENT_ID = "some-hash" def test_argus_priority_to_demisto_severity(): from ArgusManagedDefence import argus_priority_to_demisto_severity mapping = {"low": 1, "medium": 2, "high": 3, "critical": 4, "not valid value": 0} for key, value in mapping.items(): assert argus_priority_to_demisto_severity(key) == value def test_argus_status_to_demisto_status(): from ArgusManagedDefence import argus_status_to_demisto_status mapping = { "pendingCustomer": 0, "pendingSoc": 0, "pendingVendor": 0, "pendingClose": 0, "workingSoc": 1, "workingCustomer": 1, "closed": 2, "not valid value": 0, } for key, value in mapping.items(): assert argus_status_to_demisto_status(key) == value def test_build_argus_priority_from_min_severity(): from ArgusManagedDefence import build_argus_priority_from_min_severity assert build_argus_priority_from_min_severity("low") == [ "low", "medium", "high", "critical", ] assert build_argus_priority_from_min_severity("medium") == [ "medium", "high", "critical", ] assert build_argus_priority_from_min_severity("high") == ["high", "critical"] assert build_argus_priority_from_min_severity("critical") == ["critical"] assert build_argus_priority_from_min_severity("not valid") == [ "low", "medium", "high", "critical", ] def test_date_time_to_epoch_milliseconds_datetime(): import datetime from ArgusManagedDefence import date_time_to_epoch_milliseconds date = datetime.datetime(2000, 1, 1, 00, 00, 00) timestamp = date.timestamp() * 1000 assert date_time_to_epoch_milliseconds(date) == timestamp def test_date_time_to_epoch_milliseconds_str(): import datetime from ArgusManagedDefence import date_time_to_epoch_milliseconds timestamp = int(datetime.datetime(2000, 1, 1, 00, 00, 00).timestamp() * 1000) assert date_time_to_epoch_milliseconds("2000-01-01 00:00:00") == timestamp def test_date_time_to_epoch_milliseconds_malformed_str(): from ArgusManagedDefence import date_time_to_epoch_milliseconds assert date_time_to_epoch_milliseconds("gibberish") def test_date_time_to_epoch_milliseconds_empty(): from ArgusManagedDefence import date_time_to_epoch_milliseconds assert date_time_to_epoch_milliseconds() def test_pretty_print_date_datetime(): import datetime from ArgusManagedDefence import PRETTY_DATE_FORMAT, pretty_print_date date = datetime.datetime(2000, 1, 1, 00, 00, 00) assert pretty_print_date(date) == date.strftime(PRETTY_DATE_FORMAT) def test_pretty_print_date_str(): from ArgusManagedDefence import pretty_print_date date_string = "Jan 01, 2000, 00:00:00" assert pretty_print_date(date_string) == date_string def test_pretty_print_date_malformed_str(): from ArgusManagedDefence import pretty_print_date date_string = "gibberish" assert pretty_print_date(date_string) def test_pretty_print_date_empty(): from ArgusManagedDefence import pretty_print_date assert pretty_print_date() def test_build_tags_from_list(): from ArgusManagedDefence import build_tags_from_list assert build_tags_from_list(None) == [] assert build_tags_from_list([]) == [] assert build_tags_from_list(["list must be divisible by two"]) == [] assert build_tags_from_list(["foo", "bar"]) == [{"key": "foo", "value": "bar"}] def test_str_to_dict(): from ArgusManagedDefence import str_to_dict assert str_to_dict(None) == {} assert str_to_dict("") == {} assert str_to_dict("one_value") == {} assert str_to_dict("foo,bar") == {"foo": "bar"} assert str_to_dict("foo,bar,key,value") == {"foo": "bar", "key": "value"} def test_parse_first_fetch(): from ArgusManagedDefence import parse_first_fetch assert parse_first_fetch("some string") == "-some string" assert parse_first_fetch("-some string") == "-some string" assert parse_first_fetch(123) == 123 def test_test_module_command(requests_mock): from ArgusManagedDefence import test_module_command with open("argus_json/argus_currentuser.json") as json_file: data = json.load(json_file) method_url = "/currentuser/v1/user" requests_mock.get(f"{BASE_URL}{method_url}", json=data) assert test_module_command() != "ok" data["responseCode"] = 200 assert test_module_command() == "ok" def test_fetch_incidents(requests_mock): from ArgusManagedDefence import fetch_incidents with open("argus_json/argus_case_search.json") as json_file: data = json.load(json_file) with open("argus_json/argus_case_attachments.json") as attachments_file: attachments = json.load(attachments_file) with open("argus_json/argus_case_attachment.json", "rb") as attachment_file: attachment = attachment_file.read() method_url = "/cases/v2/case/search" requests_mock.post(f"{BASE_URL}{method_url}", json=data) method_url = f"/cases/v2/case/{0}/attachments" requests_mock.get(f"{BASE_URL}{method_url}", json=attachments) method_url = f"/cases/v2/case/{0}/attachments/{'3fa85f64-5717-4562-b3fc-2c963f66afa6'}/download" requests_mock.get(f"{BASE_URL}{method_url}", content=attachment) last_run = {"start_time": 1603372183576} next_run, incidents = fetch_incidents(last_run, "-1 day") assert len(incidents) == 1 assert incidents[0]["name"] == "#0: string" assert next_run.get("start_time") == "1" def test_fetch_incidents_increment_timestamp(requests_mock): from ArgusManagedDefence import fetch_incidents method_url = "/cases/v2/case/search" timestamp = 327645 with open("argus_json/argus_case_search.json") as json_file: data = json.load(json_file) data["data"][0]["createdTimestamp"] = timestamp requests_mock.post(f"{BASE_URL}{method_url}", json=data) next_run, incidents = fetch_incidents({}, "-1 day") assert len(incidents) == 1 assert next_run.get("start_time") == str(timestamp + 1) def test_get_remote_data_command(requests_mock): from ArgusManagedDefence import get_remote_data_command with open("argus_json/argus_case_metadata.json") as json_file: metadata = json.load(json_file) with open("argus_json/argus_case_attachments.json") as json_file: attachments = json.load(json_file) with open("argus_json/argus_case_comments.json") as json_file: comments = json.load(json_file) method_urls = { f"/cases/v2/case/{CASE_ID}": metadata, f"/cases/v2/case/{CASE_ID}/attachments": attachments, f"/cases/v2/case/{CASE_ID}/comments": comments, } for method_url, data in method_urls.items(): requests_mock.get(f"{BASE_URL}{method_url}", json=data) last_update = "2020-01-01 12:00:00" metadata["data"]["lastUpdatedTime"] = "2020-01-01 12:05:00" args = { "id": CASE_ID, "lastUpdate": last_update, } xsoar_mirroring = { "dbotMirrorId": str(0), "dbotMirrorInstance": "", "dbotMirrorDirection": None, "dbotMirrorTags": ["argus_mirror"], } result = get_remote_data_command(args) assert metadata.get("data").items() <= result.mirrored_object.items() assert "xsoar_mirroring" in result.mirrored_object assert xsoar_mirroring.items() == result.mirrored_object.get("xsoar_mirroring").items() assert {"severity": 1} in result.entries assert {"arguscasestatus": "pendingCustomer"} in result.entries def test_get_remote_data_command_no_updates(requests_mock): from ArgusManagedDefence import get_remote_data_command with open("argus_json/argus_case_metadata.json") as json_file: metadata = json.load(json_file) with open("argus_json/argus_case_attachments.json") as json_file: attachments = json.load(json_file) with open("argus_json/argus_case_comments.json") as json_file: comments = json.load(json_file) method_urls = { f"/cases/v2/case/{CASE_ID}": metadata, f"/cases/v2/case/{CASE_ID}/attachments": attachments, f"/cases/v2/case/{CASE_ID}/comments": comments, } for method_url, data in method_urls.items(): requests_mock.get(f"{BASE_URL}{method_url}", json=data) last_update = "2020-01-01 12:00:00" metadata["data"]["lastUpdatedTime"] = "2020-01-01 11:00:00" args = { "id": CASE_ID, "lastUpdate": last_update, } result = get_remote_data_command(args) assert not result.mirrored_object assert not result.entries def test_update_remote_system_command(requests_mock): from ArgusManagedDefence import update_remote_system_command with open("argus_json/argus_case_metadata.json") as json_file: data = json.load(json_file) data["data"]["id"] = CASE_ID method_url = f"/cases/v2/case/{CASE_ID}" requests_mock.put(f"{BASE_URL}{method_url}", json=data) with open("argus_json/argus_case_comment.json") as json_file: comment = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}/comments" requests_mock.post(f"{BASE_URL}{method_url}", json=comment) method_url = f"/cases/v2/case/{CASE_ID}/attachments" requests_mock.post(f"{BASE_URL}{method_url}") method_url = f"/cases/v2/case/{CASE_ID}/close" requests_mock.put(f"{BASE_URL}{method_url}", json=data) args = { "data": data, "entries": [ { "type:": 1, # Note "user": "user", "created": "2020-01-01 00:00:00", "contents": "comment", } ], "remoteId": str(CASE_ID), "status": 2, # Done "delta": {"severity": 2}, "incidentChanged": True, } assert update_remote_system_command(args) == str(CASE_ID) def test_update_remote_system_command_no_change(requests_mock): from ArgusManagedDefence import update_remote_system_command args = { "data": {}, "entries": [], "remoteId": str(CASE_ID), "status": "", "delta": {}, "incidentChanged": False, } assert update_remote_system_command(args) == str(CASE_ID) def test_add_case_tag_command(requests_mock): from ArgusManagedDefence import add_case_tag_command with open("argus_json/argus_case_metadata.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}/tags" requests_mock.post(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID, "key": "test_key", "value": "test_value"} result = add_case_tag_command(args) assert result.raw_response == data def test_add_comment_command(requests_mock): from ArgusManagedDefence import add_comment_command with open("argus_json/argus_case_comment.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}/comments" requests_mock.post(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID, "comment": "test_comment"} result = add_comment_command(args) assert result.raw_response == data def test_advanced_case_search_command(requests_mock): from ArgusManagedDefence import advanced_case_search_command with open("argus_json/argus_case_search.json") as json_file: data = json.load(json_file) method_url = "/cases/v2/case/search" requests_mock.post(f"{BASE_URL}{method_url}", json=data) result = advanced_case_search_command({}) assert result.raw_response == data def test_close_case_command(requests_mock): from ArgusManagedDefence import close_case_command with open("argus_json/argus_case_metadata.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}/close" requests_mock.put(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID} result = close_case_command(args) assert result.raw_response == data def test_create_case_command(requests_mock): from ArgusManagedDefence import create_case_command with open("argus_json/argus_case_metadata.json") as json_file: data = json.load(json_file) method_url = "/cases/v2/case" requests_mock.post(f"{BASE_URL}{method_url}", json=data) args = { "subject": "test subject", "description": "test description", "service": "administrative", "type": "informational", "tags": "test_key,test_value", } result = create_case_command(args) assert result.raw_response == data def test_delete_case_command(requests_mock): from ArgusManagedDefence import delete_case_command with open("argus_json/argus_case_metadata.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}" requests_mock.delete(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID} result = delete_case_command(args) assert result.raw_response == data def test_delete_comment_command(requests_mock): from ArgusManagedDefence import delete_comment_command with open("argus_json/argus_case_comment.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}/comments/{COMMENT_ID}" requests_mock.delete(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID, "comment_id": COMMENT_ID} result = delete_comment_command(args) assert result.raw_response == data def test_download_attachment_command(requests_mock): from ArgusManagedDefence import download_attachment_command with open("argus_json/argus_case_attachment.json", "rb") as file: content = file.read() method_url = f"/cases/v2/case/{CASE_ID}/attachments/{ATTACHMENT_ID}/download" requests_mock.get(f"{BASE_URL}{method_url}", content=content) args = {"case_id": CASE_ID, "attachment_id": ATTACHMENT_ID} result = download_attachment_command(args) assert result["File"] == ATTACHMENT_ID def test_edit_comment_command(requests_mock): from ArgusManagedDefence import edit_comment_command with open("argus_json/argus_case_comment.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}/comments/{COMMENT_ID}" requests_mock.put(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID, "comment_id": COMMENT_ID, "comment": "test comment"} result = edit_comment_command(args) assert result.raw_response == data def test_get_attachment_command(requests_mock): from ArgusManagedDefence import get_attachment_command with open("argus_json/argus_case_attachment.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}/attachments/{ATTACHMENT_ID}" requests_mock.get(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID, "attachment_id": ATTACHMENT_ID} result = get_attachment_command(args) assert result.raw_response == data def test_get_case_metadata_by_id_command(requests_mock): from ArgusManagedDefence import get_case_metadata_by_id_command with open("argus_json/argus_case_metadata.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}" requests_mock.get(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID} result = get_case_metadata_by_id_command(args) assert result.raw_response == data def test_list_case_attachments_command(requests_mock): from ArgusManagedDefence import list_case_attachments_command with open("argus_json/argus_case_attachments.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}/attachments" requests_mock.get(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID} result = list_case_attachments_command(args) assert result.raw_response == data def test_list_case_tags_command(requests_mock): from ArgusManagedDefence import list_case_tags_command with open("argus_json/argus_case_tags.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}/tags" requests_mock.get(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID} result = list_case_tags_command(args) assert result.raw_response == data def test_list_case_comments_command(requests_mock): from ArgusManagedDefence import list_case_comments_command with open("argus_json/argus_case_comments.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}/comments" requests_mock.get(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID} result = list_case_comments_command(args) assert result.raw_response == data def test_remove_case_tag_by_id_command(requests_mock): from ArgusManagedDefence import remove_case_tag_by_id_command with open("argus_json/argus_case_tags.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}/tags/{TAG_ID}" requests_mock.delete(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID, "tag_id": TAG_ID} result = remove_case_tag_by_id_command(args) assert result.raw_response == data def test_remove_case_tag_by_key_value_command(requests_mock): from ArgusManagedDefence import remove_case_tag_by_key_value_command with open("argus_json/argus_case_tags.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}/tags/{TAG_KEY}/{TAG_VALUE}" requests_mock.delete(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID, "key": TAG_KEY, "value": TAG_VALUE} result = remove_case_tag_by_key_value_command(args) assert result.raw_response == data def test_update_case_command(requests_mock): from ArgusManagedDefence import update_case_command with open("argus_json/argus_case_metadata.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}" requests_mock.put(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID} result = update_case_command(args) assert result.raw_response == data def test_get_events_for_case_command(requests_mock): from ArgusManagedDefence import get_events_for_case_command with open("argus_json/argus_events.json") as json_file: data = json.load(json_file) method_url = f"/events/v1/case/{CASE_ID}" requests_mock.get(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID} result = get_events_for_case_command(args) assert result.raw_response == data def test_find_aggregated_events_command(requests_mock): from ArgusManagedDefence import find_aggregated_events_command with open("argus_json/argus_events.json") as json_file: data = json.load(json_file) method_url = "/events/v1/aggregated/search" requests_mock.post(f"{BASE_URL}{method_url}", json=data) result = find_aggregated_events_command({}) assert result.raw_response == data def test_list_aggregated_events_command(requests_mock): from ArgusManagedDefence import list_aggregated_events_command with open("argus_json/argus_events.json") as json_file: data = json.load(json_file) method_url = "/events/v1/aggregated" requests_mock.get(f"{BASE_URL}{method_url}", json=data) result = list_aggregated_events_command({}) assert result.raw_response == data def test_get_event(requests_mock): from ArgusManagedDefence import get_event_command with open("argus_json/argus_event.json") as json_file: data = json.load(json_file) method_url = f"/events/v1/{EVENT_TYPE}/{TIMESTAMP}/{CUSTOMER_ID}/{EVENT_ID}" requests_mock.get(f"{BASE_URL}{method_url}", json=data) args = { "type": EVENT_TYPE, "timestamp": TIMESTAMP, "customer_id": CUSTOMER_ID, "event_id": EVENT_ID, } result = get_event_command(args) assert result.raw_response == data def test_get_payload_command(requests_mock): from ArgusManagedDefence import get_payload_command with open("argus_json/argus_event_payload.json") as json_file: data = json.load(json_file) method_url = f"/events/v1/{EVENT_TYPE}/{TIMESTAMP}/{CUSTOMER_ID}/{EVENT_ID}/payload" requests_mock.get(f"{BASE_URL}{method_url}", json=data) args = { "type": EVENT_TYPE, "timestamp": TIMESTAMP, "customer_id": CUSTOMER_ID, "event_id": EVENT_ID, } result = get_payload_command(args) assert result.raw_response == data def test_get_pcap_command(requests_mock): from ArgusManagedDefence import get_pcap_command with open("argus_json/argus_event.json", "rb") as file: content = file.read() method_url = f"/events/v1/{EVENT_TYPE}/{TIMESTAMP}/{CUSTOMER_ID}/{EVENT_ID}/pcap" requests_mock.get(f"{BASE_URL}{method_url}", content=content) args = { "type": EVENT_TYPE, "timestamp": TIMESTAMP, "customer_id": CUSTOMER_ID, "event_id": EVENT_ID, } result = get_pcap_command(args) assert result["File"] == f"{EVENT_ID}_pcap" def test_search_records_command(requests_mock): from ArgusManagedDefence import search_records_command with open("argus_json/argus_event_pdns.json") as json_file: data = json.load(json_file) query = "mnemonic.no" method_url = "/pdns/v3/search" requests_mock.post(f"{BASE_URL}{method_url}", json=data) result = search_records_command({"query": query}) assert result.raw_response == data def test_fetch_observations_for_domain_command(requests_mock): from ArgusManagedDefence import fetch_observations_for_domain_command with open("argus_json/argus_event_obs_domain.json") as json_file: data = json.load(json_file) fqdn = "domain.test" method_url = f"/reputation/v1/observation/domain/{fqdn}" requests_mock.get(f"{BASE_URL}{method_url}", json=data) result = fetch_observations_for_domain_command({"fqdn": fqdn}) assert result.raw_response == data def test_fetch_observations_for_i_p_command(requests_mock): from ArgusManagedDefence import fetch_observations_for_i_p_command with open("argus_json/argus_event_obs_ip.json") as json_file: data = json.load(json_file) ip = "0.0.0.0" method_url = f"/reputation/v1/observation/ip/{ip}" requests_mock.get(f"{BASE_URL}{method_url}", json=data) result = fetch_observations_for_i_p_command({"ip": ip}) assert result.raw_response == data def test_find_nids_events(requests_mock): from ArgusManagedDefence import find_nids_events_command with open("argus_json/argus_event_nids.json") as json_file: data = json.load(json_file) method_url = "/events/v1/nids/search" requests_mock.post(f"{BASE_URL}{method_url}", json=data) result = find_nids_events_command({}) assert result.raw_response == data def test_list_nids_events(requests_mock): from ArgusManagedDefence import list_nids_events_command with open("argus_json/argus_event_nids.json") as json_file: data = json.load(json_file) method_url = "/events/v1/nids" requests_mock.get(f"{BASE_URL}{method_url}", json=data) result = list_nids_events_command({}) assert result.raw_response == data def test_print_case_comments_command(requests_mock): from ArgusManagedDefence import print_case_comments_command with open("argus_json/argus_case_comments.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}/comments" requests_mock.get(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID} result = print_case_comments_command(args) for comment in result: assert comment.get("ContentsFormat") == "html" assert comment.get("Type") == 1 # Note assert comment.get("Contents") assert comment.get("Note") is True def test_print_case_metadata_by_id_command(requests_mock): from ArgusManagedDefence import print_case_metadata_by_id_command with open("argus_json/argus_case_metadata.json") as json_file: data = json.load(json_file) method_url = f"/cases/v2/case/{CASE_ID}" requests_mock.get(f"{BASE_URL}{method_url}", json=data) args = {"case_id": CASE_ID} result = print_case_metadata_by_id_command(args) assert result.get("ContentsFormat") == "html" assert result.get("Type") == 1 assert result.get("Contents") def test_download_case_attachments_command(requests_mock): from ArgusManagedDefence import download_case_attachments_command with open("argus_json/argus_case_attachments.json") as json_file: data = json.load(json_file) data["data"][0]["name"] = "filename" attachment_id = data["data"][0]["id"] method_url = f"/cases/v2/case/{CASE_ID}/attachments" requests_mock.get(f"{BASE_URL}{method_url}", json=data) with open("argus_json/argus_case_attachments.json", "rb") as file: bin_data = file.read() method_url = f"/cases/v2/case/{CASE_ID}/attachments/{attachment_id}/download" requests_mock.get(f"{BASE_URL}{method_url}", content=bin_data) args = {"case_id": CASE_ID} result = download_case_attachments_command(args) for file in result: assert file.get("File") == "filename" assert file.get("Type") == 3 # File class TestPrettyPrintCommentHtml: """Tests for output encoding in pretty_print_comment_html.""" @staticmethod def _make_comment(comment_text: str = "hello", username: str = "user1", attachments: list | None = None) -> dict: return { "comment": comment_text, "addedByUser": {"userName": username}, "addedTime": "2024-01-01T00:00:00Z", "lastUpdatedTime": None, "associatedAttachments": attachments or [], } def test_comment_text_output_encoding(self): """Test that special characters in comment text are encoded in output.""" from ArgusManagedDefence import pretty_print_comment_html comment = self._make_comment(comment_text="") result = pretty_print_comment_html(comment) assert "") in result def test_username_output_encoding(self): """Test that special characters in username are encoded in output.""" from ArgusManagedDefence import pretty_print_comment_html comment = self._make_comment(username="") result = pretty_print_comment_html(comment) assert "") in result def test_attachment_name_output_encoding(self): """Test that special characters in attachment names are encoded in output.""" from ArgusManagedDefence import pretty_print_comment_html comment = self._make_comment(attachments=[{"name": ""}]) result = pretty_print_comment_html(comment) assert "") in result def test_normal_text_passes_through(self): """Test that normal text is preserved correctly after encoding.""" from ArgusManagedDefence import pretty_print_comment_html comment = self._make_comment( comment_text="Normal comment text", username="john.doe", attachments=[{"name": "report.pdf"}], ) result = pretty_print_comment_html(comment) assert "Normal comment text" in result assert "john.doe" in result assert "report.pdf" in result class TestPrettyPrintCaseMetadataHtml: """Tests for output encoding in pretty_print_case_metadata_html.""" @staticmethod def _make_case( subject: str = "Test case", priority: str = "medium", status: str = "open", publisher_name: str = "analyst1", description: str = "Some description", ) -> dict: return { "id": 1, "subject": subject, "priority": priority, "status": status, "lastUpdatedTime": "2024-01-01T00:00:00Z", "publishedByUser": {"name": publisher_name}, "publishedTime": "2024-01-01T00:00:00Z", "description": description, } def test_subject_output_encoding(self): """Test that special characters in subject are encoded in output.""" from ArgusManagedDefence import pretty_print_case_metadata_html case = self._make_case(subject="") result = pretty_print_case_metadata_html(case) assert "") in result def test_priority_output_encoding(self): """Test that special characters in priority are encoded in output.""" from ArgusManagedDefence import pretty_print_case_metadata_html case = self._make_case(priority="") result = pretty_print_case_metadata_html(case) assert "") in result def test_status_output_encoding(self): """Test that special characters in status are encoded in output.""" from ArgusManagedDefence import pretty_print_case_metadata_html case = self._make_case(status="") result = pretty_print_case_metadata_html(case) assert "") in result def test_publisher_name_output_encoding(self): """Test that special characters in publisher name are encoded in output.""" from ArgusManagedDefence import pretty_print_case_metadata_html case = self._make_case(publisher_name="") result = pretty_print_case_metadata_html(case) assert "") in result def test_description_output_encoding(self): """Test that special characters in description are encoded in output.""" from ArgusManagedDefence import pretty_print_case_metadata_html case = self._make_case(description="") result = pretty_print_case_metadata_html(case) assert "") in result def test_normal_text_passes_through(self): """Test that normal text is preserved correctly after encoding.""" from ArgusManagedDefence import pretty_print_case_metadata_html case = self._make_case( subject="Incident report", priority="high", status="open", publisher_name="john.doe", description="Normal description text", ) result = pretty_print_case_metadata_html(case) assert "Incident report" in result assert "high" in result assert "open" in result assert "john.doe" in result assert "Normal description text" in result def test_html_structure_preserved(self): """Test that HTML structure tags remain intact after encoding.""" from ArgusManagedDefence import pretty_print_case_metadata_html case = self._make_case(subject="") result = pretty_print_case_metadata_html(case) assert "

" in result assert "

" in result assert "" in result assert "" in result assert "
" in result