Some checks failed
Aegis CI / lint-and-test (push) Has been cancelled
Verify skip when disabled, per-link sync invocation, and continued batch on single-link failures.
65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
"""Worklog service tests — integrity hash (FASE-1.5)."""
|
|
|
|
from datetime import datetime
|
|
from uuid import uuid4
|
|
|
|
from app.services import worklog_service
|
|
|
|
|
|
def test_create_worklog_sets_integrity_hash(db, admin_user):
|
|
entity_id = uuid4()
|
|
started = datetime(2026, 5, 18, 9, 0, 0)
|
|
wl = worklog_service.create_worklog(
|
|
db,
|
|
entity_type="test",
|
|
entity_id=entity_id,
|
|
user_id=admin_user.id,
|
|
activity_type="red_team",
|
|
started_at=started,
|
|
duration_seconds=3600,
|
|
description="Manual entry",
|
|
)
|
|
db.commit()
|
|
db.refresh(wl)
|
|
|
|
assert wl.integrity_hash
|
|
assert len(wl.integrity_hash) == 64
|
|
assert worklog_service.verify_worklog_integrity(wl) is True
|
|
|
|
|
|
def test_verify_worklog_integrity_detects_tampering(db, admin_user):
|
|
wl = worklog_service.create_worklog(
|
|
db,
|
|
entity_type="test",
|
|
entity_id=uuid4(),
|
|
user_id=admin_user.id,
|
|
activity_type="blue_validation",
|
|
started_at=datetime(2026, 5, 18, 10, 0, 0),
|
|
duration_seconds=1800,
|
|
)
|
|
db.commit()
|
|
db.refresh(wl)
|
|
|
|
wl.duration_seconds = 9999
|
|
assert worklog_service.verify_worklog_integrity(wl) is False
|
|
|
|
|
|
def test_list_worklogs_filters_by_entity(db, admin_user):
|
|
eid = uuid4()
|
|
worklog_service.create_worklog(
|
|
db,
|
|
entity_type="campaign",
|
|
entity_id=eid,
|
|
user_id=admin_user.id,
|
|
activity_type="reporting",
|
|
started_at=datetime(2026, 5, 18, 11, 0, 0),
|
|
duration_seconds=600,
|
|
)
|
|
db.commit()
|
|
|
|
rows = worklog_service.list_worklogs(
|
|
db, entity_type="campaign", entity_id=eid,
|
|
)
|
|
assert len(rows) == 1
|
|
assert rows[0].entity_id == eid
|