7

Return 404 if variant page is accessed directly (#188)

This commit is contained in:
tm-kn
2018-09-25 06:57:06 +01:00
committed by Jasper Berghoef
parent 7d679d7111
commit d15f6c37d3
2 changed files with 19 additions and 2 deletions

View File

@ -4,6 +4,7 @@ import logging
from django.conf.urls import include, url from django.conf.urls import include, url
from django.db import transaction from django.db import transaction
from django.http import Http404
from django.shortcuts import redirect, render from django.shortcuts import redirect, render
from django.template.defaultfilters import pluralize from django.template.defaultfilters import pluralize
from django.urls import reverse from django.urls import reverse
@ -104,9 +105,13 @@ def serve_variant(page, request, serve_args, serve_kwargs):
adapter = get_segment_adapter(request) adapter = get_segment_adapter(request)
user_segments = adapter.get_segments() user_segments = adapter.get_segments()
if user_segments: metadata = page.personalisation_metadata
metadata = page.personalisation_metadata
# If page is not canonical, don't serve it.
if not metadata.is_canonical:
raise Http404
if user_segments:
# TODO: This is never more then one page? (fix query count) # TODO: This is never more then one page? (fix query count)
metadata = metadata.metadata_for_segments(user_segments) metadata = metadata.metadata_for_segments(user_segments)
if metadata: if metadata:

View File

@ -1,4 +1,7 @@
import pytest import pytest
from django.http import Http404
from wagtail.core.models import Page from wagtail.core.models import Page
from tests.factories.segment import SegmentFactory from tests.factories.segment import SegmentFactory
@ -16,6 +19,15 @@ def test_serve_variant_no_variant(site, rf):
assert result is None 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 @pytest.mark.django_db
def test_serve_variant_with_variant_no_segment(site, rf, segmented_page): def test_serve_variant_with_variant_no_segment(site, rf, segmented_page):
request = rf.get('/') request = rf.get('/')