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.db import transaction
from django.http import Http404
from django.shortcuts import redirect, render
from django.template.defaultfilters import pluralize
from django.urls import reverse
@ -104,9 +105,13 @@ def serve_variant(page, request, serve_args, serve_kwargs):
adapter = get_segment_adapter(request)
user_segments = adapter.get_segments()
if user_segments:
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)
metadata = metadata.metadata_for_segments(user_segments)
if metadata:

View File

@ -1,4 +1,7 @@
import pytest
from django.http import Http404
from wagtail.core.models import Page
from tests.factories.segment import SegmentFactory
@ -16,6 +19,15 @@ def test_serve_variant_no_variant(site, rf):
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('/')