diff --git a/monkey/tests/unit_tests/monkey_island/cc/services/attack/technique_reports/test_technique_reports.py b/monkey/tests/unit_tests/monkey_island/cc/services/attack/technique_reports/test_technique_reports.py
new file mode 100644
index 000000000..6436d6df3
--- /dev/null
+++ b/monkey/tests/unit_tests/monkey_island/cc/services/attack/technique_reports/test_technique_reports.py
@@ -0,0 +1,174 @@
+from common.utils.attack_utils import ScanStatus
+from monkey_island.cc.services.attack.technique_reports.__init__ import (
+ AttackTechnique,
+ disabled_msg,
+)
+
+FAKE_CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE = {
+ "T0000": {
+ "Definition Type 1": ["Config Option 1", "Config Option 2"],
+ "Definition Type 2": ["Config Option 5", "Config Option 6"],
+ },
+ "T0001": {
+ "Definition Type 1": ["Config Option 1"],
+ "Definition Type 2": ["Config Option 5"],
+ },
+}
+
+
+class FakeAttackTechnique(AttackTechnique):
+ tech_id = "T0001"
+ relevant_systems = ["System 1", "System 2"]
+ unscanned_msg = "UNSCANNED"
+ scanned_msg = "SCANNED"
+ used_msg = "USED"
+
+ def get_report_data():
+ pass
+
+
+EXPECTED_UNSCANNED_MSG = (
+ "UNSCANNED due to one of the following reasons:\n"
+ "- The following configuration options were disabled:
"
+ "- Definition Type 1 — Config Option 1
"
+ "- Definition Type 2 — Config Option 5
"
+)
+
+
+EXPECTED_SCANNED_MSG = "SCANNED"
+
+
+EXPECTED_USED_MSG = "USED"
+
+
+def test_get_message_by_status_disabled(monkeypatch):
+ monkeypatch.setattr(
+ (
+ "monkey_island.cc.services.attack.technique_reports."
+ "__init__.CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE"
+ ),
+ FAKE_CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE,
+ )
+ technique_msg = FakeAttackTechnique.get_message_by_status(ScanStatus.DISABLED.value)
+ assert technique_msg == disabled_msg
+
+
+def test_get_message_by_status_unscanned(monkeypatch):
+ monkeypatch.setattr(
+ (
+ "monkey_island.cc.services.attack.technique_reports."
+ "__init__.CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE"
+ ),
+ FAKE_CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE,
+ )
+ technique_msg = FakeAttackTechnique.get_message_by_status(ScanStatus.UNSCANNED.value)
+ assert technique_msg == EXPECTED_UNSCANNED_MSG
+
+
+def test_get_message_by_status_scanned(monkeypatch):
+ monkeypatch.setattr(
+ (
+ "monkey_island.cc.services.attack.technique_reports."
+ "__init__.CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE"
+ ),
+ FAKE_CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE,
+ )
+ technique_msg = FakeAttackTechnique.get_message_by_status(ScanStatus.SCANNED.value)
+ assert technique_msg == EXPECTED_SCANNED_MSG
+
+
+def test_get_message_by_status_used(monkeypatch):
+ monkeypatch.setattr(
+ (
+ "monkey_island.cc.services.attack.technique_reports."
+ "__init__.CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE"
+ ),
+ FAKE_CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE,
+ )
+ technique_msg = FakeAttackTechnique.get_message_by_status(ScanStatus.USED.value)
+ assert technique_msg == EXPECTED_USED_MSG
+
+
+###
+
+
+class FakeAttackTechnique_OneRelevantSystem(AttackTechnique):
+ tech_id = "T0001"
+ relevant_systems = ["System 1"]
+ unscanned_msg = "UNSCANNED"
+ scanned_msg = "SCANNED"
+ used_msg = "USED"
+
+ def get_report_data():
+ pass
+
+
+EXPECTED_UNSCANNED_MSG_ONE_RELEVANT_SYSTEM = (
+ "UNSCANNED due to one of the following reasons:\n"
+ "- The Monkey did not run on any System 1 systems.\n"
+ "- The following configuration options were disabled:
"
+ "- Definition Type 1 — Config Option 1
"
+ "- Definition Type 2 — Config Option 5
"
+)
+
+
+EXPECTED_SCANNED_MSG_ONE_RELEVANT_SYSTEM = "SCANNED"
+
+
+EXPECTED_USED_MSG_ONE_RELEVANT_SYSTEM = "USED"
+
+
+def test_get_message_by_status_disabled_one_relevant_system(monkeypatch):
+ monkeypatch.setattr(
+ (
+ "monkey_island.cc.services.attack.technique_reports."
+ "__init__.CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE"
+ ),
+ FAKE_CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE,
+ )
+ technique_msg = FakeAttackTechnique_OneRelevantSystem.get_message_by_status(
+ ScanStatus.DISABLED.value
+ )
+ assert technique_msg == disabled_msg
+
+
+def test_get_message_by_status_unscanned_one_relevant_system(monkeypatch):
+ monkeypatch.setattr(
+ (
+ "monkey_island.cc.services.attack.technique_reports."
+ "__init__.CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE"
+ ),
+ FAKE_CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE,
+ )
+ technique_msg = FakeAttackTechnique_OneRelevantSystem.get_message_by_status(
+ ScanStatus.UNSCANNED.value
+ )
+ assert technique_msg == EXPECTED_UNSCANNED_MSG_ONE_RELEVANT_SYSTEM
+
+
+def test_get_message_by_status_scanned_one_relevant_system(monkeypatch):
+ monkeypatch.setattr(
+ (
+ "monkey_island.cc.services.attack.technique_reports."
+ "__init__.CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE"
+ ),
+ FAKE_CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE,
+ )
+ technique_msg = FakeAttackTechnique_OneRelevantSystem.get_message_by_status(
+ ScanStatus.SCANNED.value
+ )
+ assert technique_msg == EXPECTED_SCANNED_MSG_ONE_RELEVANT_SYSTEM
+
+
+def test_get_message_by_status_used_one_relevant_system(monkeypatch):
+ monkeypatch.setattr(
+ (
+ "monkey_island.cc.services.attack.technique_reports."
+ "__init__.CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE"
+ ),
+ FAKE_CONFIG_SCHEMA_PER_ATTACK_TECHNIQUE,
+ )
+ technique_msg = FakeAttackTechnique_OneRelevantSystem.get_message_by_status(
+ ScanStatus.USED.value
+ )
+ assert technique_msg == EXPECTED_USED_MSG_ONE_RELEVANT_SYSTEM