7
This repository has been archived on 2023-05-07. You can view files and clone it, but cannot push or open issues or pull requests.
Files
cavemanon-wagtail-personali…/tests/unit/test_wagtail_hooks.py
2018-07-06 15:11:03 +01:00

115 lines
3.5 KiB
Python

import pytest
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_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())