perf(campaign): search share targets server-side
This commit is contained in:
94
tests/test_share_target_search.py
Normal file
94
tests/test_share_target_search.py
Normal file
@@ -0,0 +1,94 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user