feat(reports): extend report generation service [FASE-2.3]
Add quarterly summary and technique detail builders with UUID-safe lookups and unit tests for purple campaign context.
This commit is contained in:
58
backend/tests/test_report_generation_service.py
Normal file
58
backend/tests/test_report_generation_service.py
Normal file
@@ -0,0 +1,58 @@
|
||||
"""Report generation service tests (FASE-2.3)."""
|
||||
|
||||
import uuid
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
||||
from app.domain.exceptions import EntityNotFoundError
|
||||
from app.models.campaign import Campaign, CampaignTest
|
||||
from app.models.enums import TestState
|
||||
from app.models.technique import Technique
|
||||
from app.models.test import Test
|
||||
|
||||
|
||||
@patch("app.services.report_generation_service.report_engine.generate_pdf")
|
||||
def test_generate_purple_campaign_report_pdf(mock_pdf, db, admin_user):
|
||||
mock_pdf.return_value = "/tmp/fake.pdf"
|
||||
|
||||
technique = Technique(
|
||||
mitre_id="T1059.001",
|
||||
name="PowerShell",
|
||||
tactic="execution",
|
||||
)
|
||||
db.add(technique)
|
||||
db.flush()
|
||||
|
||||
campaign = Campaign(name="Q1 Purple", description="Scope", status="active")
|
||||
db.add(campaign)
|
||||
db.flush()
|
||||
|
||||
test = Test(
|
||||
name="PS test",
|
||||
technique_id=technique.id,
|
||||
state=TestState.validated,
|
||||
created_by=admin_user.id,
|
||||
)
|
||||
db.add(test)
|
||||
db.flush()
|
||||
db.add(CampaignTest(campaign_id=campaign.id, test_id=test.id))
|
||||
db.commit()
|
||||
|
||||
path = __import__(
|
||||
"app.services.report_generation_service",
|
||||
fromlist=["generate_purple_campaign_report"],
|
||||
).generate_purple_campaign_report(db, str(campaign.id), "pdf")
|
||||
|
||||
assert path == "/tmp/fake.pdf"
|
||||
mock_pdf.assert_called_once()
|
||||
context = mock_pdf.call_args[0][1]
|
||||
assert context["tests_validated"] == 1
|
||||
assert len(context["tests"]) == 1
|
||||
|
||||
|
||||
def test_generate_technique_detail_not_found(db):
|
||||
from app.services.report_generation_service import generate_technique_detail_report
|
||||
|
||||
with pytest.raises(EntityNotFoundError):
|
||||
generate_technique_detail_report(db, str(uuid.uuid4()), "html")
|
||||
Reference in New Issue
Block a user