Skip to content

Commit f652e7d

Browse files
committed
Make the preview view hack the title/tree fields to match the control page, in the same way that the frontend hook does
1 parent d61c7ab commit f652e7d

File tree

6 files changed

+24
-12
lines changed

6 files changed

+24
-12
lines changed

experiments/admin_urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
urlpatterns = [
77
url(r'^experiment/report/(\d+)/$', views.experiment_report, name='report'),
88
url(r'^experiment/select_winner/(\d+)/(\d+)/$', views.select_winner, name='select_winner'),
9-
url(r'^experiment/report/preview/(\d+)/$', views.preview_for_report, name='preview_for_report'),
9+
url(r'^experiment/report/preview/(\d+)/(\d+)/$', views.preview_for_report, name='preview_for_report'),
1010
]

experiments/templates/experiments/report.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
{% trans 'Use this' %}
4040
</button>
4141
<a class="button button-small button-primary" title="{% trans 'Preview' %}"
42-
href="{% url 'experiments:preview_for_report' variation.pk %}">
42+
href="{% url 'experiments:preview_for_report' experiment.pk variation.pk %}">
4343
<span class="icon icon-view"></span>
4444
</a>
4545
</form>

experiments/utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,13 @@ def percentage(fraction, population):
1212
return float(fraction) / float(population) * 100
1313
except (ValueError, ZeroDivisionError, TypeError):
1414
return 0.0
15+
16+
17+
def impersonate_other_page(page, other):
18+
"""Modify the title and tree location data of `page` to resemble `other`"""
19+
page.id = other.id
20+
page.pk = other.pk
21+
page.path = other.path
22+
page.depth = other.depth
23+
page.url_path = other.url_path
24+
page.title = other.title

experiments/views.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from wagtail.wagtailcore.models import Page
1010

1111
from .models import Experiment, get_backend
12-
from .utils import get_user_id, percentage
12+
from .utils import get_user_id, impersonate_other_page, percentage
1313

1414

1515
def record_completion(request, slug):
@@ -69,11 +69,15 @@ def select_winner(request, experiment_id, variation_id):
6969
return redirect('experiments:report', experiment.pk)
7070

7171

72-
def preview_for_report(request, page_id):
72+
def preview_for_report(request, experiment_id, page_id):
73+
experiment = get_object_or_404(Experiment, pk=experiment_id)
7374
page = get_object_or_404(Page, id=page_id).specific
7475
if not page.permissions_for_user(request.user).can_publish():
7576
raise PermissionDenied
7677

78+
# hack the title and page-tree-related fields to match the control page
79+
impersonate_other_page(page, experiment.control_page)
80+
7781
# pass in the real user request rather than page.dummy_request(), so that request.user
7882
# and request.revision_id will be picked up by the wagtail user bar
7983
return page.serve_preview(request, page.default_preview_mode)

experiments/wagtail_hooks.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from wagtail.wagtailcore import hooks
1111

1212
from .models import Experiment
13-
from .utils import get_user_id
13+
from .utils import get_user_id, impersonate_other_page
1414

1515

1616
@hooks.register('register_admin_urls')
@@ -80,11 +80,6 @@ def check_experiments(page, request, serve_args, serve_kwargs):
8080
variation = variation.specific
8181

8282
# hack the title and page-tree-related fields to match the control page
83-
variation.id = page.id
84-
variation.pk = page.pk
85-
variation.path = page.path
86-
variation.depth = page.depth
87-
variation.url_path = page.url_path
88-
variation.title = page.title
83+
impersonate_other_page(variation, page)
8984

9085
return variation.serve(request, *serve_args, **serve_kwargs)

tests/tests.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,9 @@ def test_select_winner(self):
297297

298298
def test_preview(self):
299299
response = self.client.get(
300-
'/admin/experiments/experiment/report/preview/%d/' % self.homepage_alternative_1.pk
300+
'/admin/experiments/experiment/report/preview/%d/%d/' % (
301+
self.experiment.pk, self.homepage_alternative_1.pk
302+
)
301303
)
302304
self.assertEqual(response.status_code, 200)
305+
self.assertContains(response, "<title>Home</title>")

0 commit comments

Comments
 (0)