127 lines
3.8 KiB
Python
127 lines
3.8 KiB
Python
import pytest
|
|
|
|
from django.http import Http404
|
|
|
|
from wagtail.core.models import Page
|
|
|
|
from tests.factories.segment import SegmentFactory
|
|
from wagtail_personalisation import adapters, wagtail_hooks
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_serve_variant_no_variant(site, rf):
|
|
page = site.root_page
|
|
request = rf.get('/')
|
|
args = tuple()
|
|
kwargs = {}
|
|
|
|
result = wagtail_hooks.serve_variant(page, request, args, kwargs)
|
|
assert result is None
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_variant_accessed_directly_returns_404(segmented_page, rf):
|
|
request = rf.get('/')
|
|
args = tuple()
|
|
kwargs = {}
|
|
with pytest.raises(Http404):
|
|
wagtail_hooks.serve_variant(segmented_page, request, args, kwargs)
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_serve_variant_with_variant_no_segment(site, rf, segmented_page):
|
|
request = rf.get('/')
|
|
args = tuple()
|
|
kwargs = {}
|
|
|
|
page = segmented_page.personalisation_metadata.canonical_page
|
|
result = wagtail_hooks.serve_variant(page, request, args, kwargs)
|
|
assert result is None
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_serve_variant_with_variant_segmented(site, rf, segmented_page):
|
|
request = rf.get('/')
|
|
args = tuple()
|
|
kwargs = {}
|
|
|
|
page = segmented_page.personalisation_metadata.canonical_page
|
|
segment = segmented_page.personalisation_metadata.segment
|
|
|
|
adapter = adapters.get_segment_adapter(request)
|
|
adapter.set_segments([segment])
|
|
|
|
result = wagtail_hooks.serve_variant(page, request, args, kwargs)
|
|
assert result.status_code == 200
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_page_listing_variant_buttons(site, rf, segmented_page):
|
|
page = segmented_page.personalisation_metadata.canonical_page
|
|
|
|
SegmentFactory(name='something')
|
|
result = wagtail_hooks.page_listing_variant_buttons(page, [])
|
|
items = list(result)
|
|
assert len(items) == 1
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_page_listing_more_buttons(site, rf, segmented_page):
|
|
page = segmented_page.personalisation_metadata.canonical_page
|
|
|
|
SegmentFactory(name='something')
|
|
result = wagtail_hooks.page_listing_more_buttons(page, [])
|
|
items = list(result)
|
|
assert len(items) == 3
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_custom_delete_page_view_does_not_trigger_for_variants(
|
|
rf,
|
|
segmented_page
|
|
):
|
|
assert (
|
|
wagtail_hooks.delete_related_variants(rf.get('/'), segmented_page)
|
|
) is None
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_custom_delete_page_view_triggers_for_canonical_pages(
|
|
rf,
|
|
segmented_page
|
|
):
|
|
assert (
|
|
wagtail_hooks.delete_related_variants(
|
|
rf.get('/'),
|
|
segmented_page.personalisation_metadata.canonical_page
|
|
)
|
|
) is not None
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_custom_delete_page_view_deletes_variants(rf, segmented_page, user):
|
|
post_request = rf.post('/')
|
|
user.is_superuser = True
|
|
rf.user = user
|
|
canonical_page = segmented_page.personalisation_metadata.canonical_page
|
|
canonical_page_variant = canonical_page.personalisation_metadata
|
|
assert canonical_page_variant
|
|
|
|
variants = Page.objects.filter(pk__in=(
|
|
canonical_page.personalisation_metadata.variants_metadata.values_list('variant_id', flat=True)
|
|
))
|
|
variants_metadata = canonical_page.personalisation_metadata.variants_metadata
|
|
# Make sure there are variants that exist in the database.
|
|
assert len(variants.all())
|
|
assert len(variants_metadata.all())
|
|
wagtail_hooks.delete_related_variants(
|
|
post_request, segmented_page.personalisation_metadata.canonical_page
|
|
)
|
|
with pytest.raises(canonical_page.DoesNotExist):
|
|
canonical_page.refresh_from_db()
|
|
with pytest.raises(canonical_page_variant.DoesNotExist):
|
|
canonical_page_variant.refresh_from_db()
|
|
# Make sure all the variant pages have been deleted.
|
|
assert not len(variants.all())
|
|
assert not len(variants_metadata.all())
|