fix(installer): audit credential retirement
This commit is contained in:
@@ -3,7 +3,7 @@ from __future__ import annotations
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy import create_engine, inspect
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
|
||||
from govoplan_core.core.change_sequence import ChangeSequenceEntry
|
||||
@@ -1118,5 +1118,40 @@ END:VCARD
|
||||
self.assertIsNotNone(persisted)
|
||||
self.assertIn("secret_encrypted", (persisted.metadata_ or {})["carddav"])
|
||||
|
||||
def test_destructive_module_retirement_audits_credentials_before_tables_are_dropped(self) -> None:
|
||||
book = create_address_book(
|
||||
self.session,
|
||||
self.principal,
|
||||
AddressBookCreateRequest(scope_type="user", name="Retired module"),
|
||||
)
|
||||
self.session.commit()
|
||||
self.session.refresh(book)
|
||||
source = create_carddav_sync_source(
|
||||
self.session,
|
||||
self.principal,
|
||||
book.id,
|
||||
AddressCardDavSourceCreateRequest(
|
||||
collection_url="https://carddav.example.local/addressbooks/module-retirement/",
|
||||
auth_type="bearer",
|
||||
bearer_token="do-not-audit-this",
|
||||
),
|
||||
)
|
||||
self.session.commit()
|
||||
source_id = source.id
|
||||
retirement_provider = manifest.migration_spec.retirement_provider
|
||||
assert retirement_provider is not None
|
||||
plan = retirement_provider(self.session, "addresses")
|
||||
assert plan.destroy_data_executor is not None
|
||||
|
||||
with patch("govoplan_addresses.backend.service.audit_event") as audit:
|
||||
plan.destroy_data_executor(self.session, "addresses")
|
||||
|
||||
audit.assert_called_once()
|
||||
audit_call = audit.call_args.kwargs
|
||||
self.assertEqual(audit_call["object_id"], source_id)
|
||||
self.assertEqual(audit_call["details"]["deletion_reason"], "module_data_retired")
|
||||
self.assertNotIn("do-not-audit-this", repr(audit_call))
|
||||
self.assertFalse(inspect(self.engine).has_table("addresses_sync_sources"))
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user