Files
govoplan-campaign/tests/test_share_target_search.py

95 lines
2.8 KiB
Python

from __future__ import annotations
import unittest
from types import SimpleNamespace
from unittest.mock import patch
from govoplan_campaign.backend.routes.sharing import (
search_campaign_share_targets,
)
from govoplan_core.core.references import (
CAPABILITY_ACCESS_REFERENCE_OPTIONS,
ReferenceOption,
ReferenceSearchPage,
)
class _Provider:
def __init__(self) -> None:
self.requests = []
def search_reference_options(self, session, principal, *, request):
del session, principal
self.requests.append(request)
return ReferenceSearchPage(
options=(
ReferenceOption(
value="membership-1",
label="Ada",
kind="membership",
source_module="access",
),
),
next_cursor="offset:1",
has_more=True,
)
class _Registry:
def __init__(self) -> None:
self.provider = _Provider()
def has_capability(self, name):
return name == CAPABILITY_ACCESS_REFERENCE_OPTIONS
def capability(self, name):
return self.provider if self.has_capability(name) else None
class CampaignShareTargetSearchTests(unittest.TestCase):
def test_search_uses_membership_references_and_retains_stale_targets(self) -> None:
registry = _Registry()
principal = SimpleNamespace(
tenant_id="tenant-1",
account_id="account-1",
membership_id="membership-1",
group_ids=frozenset(),
)
with (
patch(
"govoplan_campaign.backend.routes.sharing._get_campaign_for_principal"
),
patch(
"govoplan_campaign.backend.routes.sharing.get_registry",
return_value=registry,
),
):
response = search_campaign_share_targets(
"campaign-1",
"user",
q="Ada",
selected=["removed-membership"],
limit=25,
cursor="offset:0",
session=object(), # type: ignore[arg-type]
principal=principal, # type: ignore[arg-type]
)
request = registry.provider.requests[0]
self.assertEqual("membership", request.kind)
self.assertEqual("tenant-1", request.tenant_id)
self.assertEqual("ada", request.query)
self.assertTrue(request.context["administrative"])
self.assertEqual(
["membership-1", "removed-membership"],
[option.value for option in response.options],
)
self.assertEqual("unavailable", response.options[1].availability)
self.assertTrue(response.has_more)
self.assertEqual("offset:1", response.next_cursor)
if __name__ == "__main__":
unittest.main()