Release Connectors v0.1.22 with service-desk federation
Module Package Release / publish-packages (push) Successful in 12s

This commit is contained in:
2026-08-22 16:11:07 +02:00
parent 79e2315e89
commit b277e8d7ac
22 changed files with 7348 additions and 13 deletions
+101 -1
View File
@@ -7,9 +7,13 @@ from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from govoplan_connectors.backend.db.models import (
ConnectorConfiguration,
ConnectorKnowledgeObject,
ConnectorKnowledgeProfile,
ConnectorKnowledgeSyncRun,
ConnectorServiceDeskObject,
ConnectorServiceDeskProfile,
ConnectorServiceDeskSyncRun,
ConnectorSanctionsAcquisitionRun,
ConnectorSanctionsSnapshot,
ConnectorTabularSource,
@@ -18,9 +22,11 @@ from govoplan_connectors.backend.manifest import manifest
from govoplan_connectors.backend.provider_state import (
KNOWLEDGE_PROVIDER_ID,
SANCTIONS_PROVIDER_ID,
SERVICE_DESK_PROVIDER_ID,
TABULAR_PROVIDER_ID,
knowledge_provider_states,
sanctions_provider_states,
service_desk_provider_states,
tabular_provider_states,
)
from govoplan_core.core.provider_governance import ExternalProviderStateContext
@@ -109,7 +115,12 @@ class ConnectorsProviderStateTests(unittest.TestCase):
self.assertNotIn("secret-source-name", rendered)
self.assertNotIn("source.example.test", rendered)
self.assertEqual(
{TABULAR_PROVIDER_ID, SANCTIONS_PROVIDER_ID, KNOWLEDGE_PROVIDER_ID},
{
TABULAR_PROVIDER_ID,
SANCTIONS_PROVIDER_ID,
KNOWLEDGE_PROVIDER_ID,
SERVICE_DESK_PROVIDER_ID,
},
{item.provider_id for item in manifest.external_provider_state_providers},
)
@@ -172,6 +183,95 @@ class ConnectorsProviderStateTests(unittest.TestCase):
self.assertNotIn("group:secret-acl", rendered)
self.assertNotIn("configuration-secret", rendered)
def test_service_desk_state_reports_recovery_without_ticket_or_acl_data(self) -> None:
now = datetime.now(UTC)
configuration = ConnectorConfiguration(
id="configuration-secret",
tenant_id="tenant-1",
definition_id="definition-1",
name="Secret service desk",
status="active",
base_definition_revision=1,
local_overrides={},
protected_paths=[],
effective_configuration={},
effective_hash="configuration-hash",
resource_revision=3,
ambiguity_policy="manual_review",
)
profile = ConnectorServiceDeskProfile(
id="service-desk-profile-1",
tenant_id="tenant-1",
configuration_id="configuration-secret",
status="active",
integration_mode="synchronize",
product="znuny",
product_version="7.1.4",
desired_maturity="synchronize",
discovered_maturity="synchronize",
source_authority_mode="governed_sync",
default_visibility="restricted",
default_acl_tokens=["group:secret-acl"],
routes={"secret": "route"},
queue_mappings=[{"secret": "queue"}],
dynamic_field_mappings=[{"secret": "field"}],
capabilities=["read", "search", "synchronize", "publish"],
discovered_configuration_revision=3,
discovered_configuration_hash="configuration-hash",
health_status="healthy",
discovered_at=now,
)
ticket = ConnectorServiceDeskObject(
id="service-desk-object-1",
tenant_id="tenant-1",
profile_id=profile.id,
object_type="ticket",
external_id="42",
external_ticket_number="secret-number",
title="Secret ticket title",
status="active",
source_revision="2026-08-22T10:00:00Z",
content_hash="e" * 64,
visibility="restricted",
acl_tokens=["group:secret-acl"],
mapped_data={"secret": "ticket content"},
provenance={"secret": "provider evidence"},
observed_at=now,
)
run = ConnectorServiceDeskSyncRun(
id="service-desk-run-1",
tenant_id="tenant-1",
profile_id=profile.id,
mode="update",
idempotency_key="secret-key",
request_hash="f" * 64,
status="outcome_unknown",
started_at=now,
finished_at=now,
)
self.session.add_all((configuration, profile, ticket, run))
self.session.commit()
state = service_desk_provider_states(
ExternalProviderStateContext(session=self.session, tenant_id="tenant-1")
)[0]
self.assertEqual(SERVICE_DESK_PROVIDER_ID, state.provider_id)
self.assertTrue(state.metrics["discovery_current"])
self.assertEqual("pending", state.conflict)
self.assertEqual("attention", state.recovery)
rendered = str(state.to_dict())
for secret in (
"configuration-secret",
"secret-number",
"Secret ticket title",
"group:secret-acl",
"ticket content",
"provider evidence",
"secret-key",
):
self.assertNotIn(secret, rendered)
if __name__ == "__main__":
unittest.main()