Skip to content
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
7332bf9
initial commit - new confirm delete page
joelwilliam2005 Jan 20, 2025
f422a6b
Added All word to warning statement for plural abtests
joelwilliam2005 Jan 20, 2025
9999dc4
added unit tests
joelwilliam2005 Jan 25, 2025
84a067c
added ab_test_delete view get request test
joelwilliam2005 Jan 25, 2025
19a2ac4
removed blank lines from the template
joelwilliam2005 Feb 17, 2025
4a22685
registered views using register_admin_urls hook
joelwilliam2005 Feb 17, 2025
51bd75e
added bad permissions handling
joelwilliam2005 Feb 17, 2025
456d9dd
added new line to html
joelwilliam2005 Mar 1, 2025
5ec5e4c
moved creating abtest objects to setUp, removed check abtest order
joelwilliam2005 Mar 1, 2025
40e862c
removed check abtest count
joelwilliam2005 Mar 1, 2025
f9954dc
used default delete view and added follow=True
joelwilliam2005 Mar 1, 2025
c43a964
added permission tests
joelwilliam2005 Mar 1, 2025
0cb0c5b
fixed var names
joelwilliam2005 Mar 1, 2025
ac02964
merged confirm_delete and delete function, renamed template
joelwilliam2005 Mar 1, 2025
951218b
rename template
joelwilliam2005 Mar 2, 2025
1dc95a3
removed test confirm_delete_view functions
joelwilliam2005 Mar 2, 2025
9a6bf66
removed unneccessary comments
joelwilliam2005 Mar 2, 2025
b55b19f
used double quotations
joelwilliam2005 Mar 2, 2025
d7a0a9b
repace blocktrans with trans for title
joelwilliam2005 Mar 2, 2025
33d1a2d
removed count from context, used .count in template
joelwilliam2005 Mar 2, 2025
4635216
removed form action
joelwilliam2005 Mar 2, 2025
edf9ef1
formatted template
joelwilliam2005 Mar 2, 2025
07bafd9
added initial perm check and modified test
joelwilliam2005 Mar 12, 2025
04e5768
removed url
joelwilliam2005 Mar 14, 2025
19b1460
updated test to check redirection to wagtailadmin_home
joelwilliam2005 Mar 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
{% extends "wagtailadmin/base.html" %}
{% load i18n wagtailadmin_tags %}
{% block titletag %}{% trans "Delete A/B Tests" %} - {{ page.title }}{% endblock %}

{% block content %}
{% include "wagtailadmin/shared/header.html" with title=_("A/B Tests") subtitle=page.get_admin_display_title icon="doc-empty-inverse" %}

<div class="nice-padding">
<p>
{% blocktrans count counter=ab_tests.count %}
1 A/B test associated with this page will be permanently deleted.
{% plural %}
All {{ counter }} A/B tests associated with this page will be permanently deleted.
{% endblocktrans %}
</p>
<table class="listing">
<thead>
<tr>
<th>
{% trans "Test Name" %}
</th>
<th>
{% trans "Goal Event" %}
</th>
<th>
{% trans "Status" %}
</th>
<th>
{% trans "Created By" %}
</th>
<th>
{% trans "Start Date" %}
</th>
</tr>
</thead>
<tbody>
{% for test in ab_tests %}
<tr>
<td>
<a href="{% url 'wagtailadmin_pages:edit' page.id %}">
{{ test.name }}
</a>
</td>
<td>
<span class="status-tag primary">
{{ test.goal_event }}
</span>
</td>
<td>
<span class="status-tag primary">
{{ test.get_status_description }}
</span>
</td>
<td>
<span class="status-tag primary">
{{ test.created_by }}
</span>
</td>
<td>
<span class="status-tag primary">
{% trans "Not started" as not_started_str %}
{{ test.first_started_at|default:not_started_str }}
</span>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<p class="status-msg failure" >This action cannot be undone.</p>
<form method="POST">
{% csrf_token %}
<input type="submit" value="{% trans 'Yes, delete A/B tests' %}" class="button serious">
<a href="{% url 'wagtailadmin_explore' page.get_parent.id %}" class="button button-secondary">{% trans "No, don't Delete" %}</a>
</form>
</div>
{% endblock %}
120 changes: 30 additions & 90 deletions wagtail_ab_testing/test/tests/test_delete_abtest.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,110 +16,59 @@ class TestDeleteAbTestConfirmationPage(WagtailTestUtils, TestCase):
def setUp(self):
self.user = self.login()

# Convert the user into an moderator
self.moderators_group = Group.objects.get(name="Moderators")
for permission in Permission.objects.filter(
content_type=ContentType.objects.get_for_model(AbTest)
):
self.moderators_group.permissions.add(permission)

for permission in Permission.objects.filter(
content_type=ContentType.objects.get_for_model(Page)
):
self.moderators_group.permissions.add(permission)
self.user.is_superuser = False
self.user.groups.add(self.moderators_group)
self.user.save()

self.factory = RequestFactory()

# Create test page with a draft revision
self.page = Page.objects.get(id=1).add_child(
instance=SimplePage(title="Test", slug="test")
)
self.page.save_revision().publish()

def test_check_ab_tests_hook_with_tests(self):
# Create A/B tests
AbTest.objects.create(
self.ab_test = AbTest.objects.create(
page=self.page,
name="Test AB 1",
name="Test AB",
first_started_at=datetime(2023, 2, 15),
variant_revision=self.page.get_latest_revision(),
status=AbTest.STATUS_DRAFT,
sample_size=10,
)
AbTest.objects.create(
page=self.page,
name="Test AB 2",
first_started_at=datetime(2023, 2, 20),
variant_revision=self.page.get_latest_revision(),
status=AbTest.STATUS_DRAFT,
sample_size=10,
)
# Simulate visiting the delete page

def test_check_ab_tests_hook_with_tests(self):
response = self.client.get(
reverse("wagtailadmin_pages:delete", args=[self.page.id])
)

# Assert redirection to the A/B test confirmation page
self.assertRedirects(
response,
reverse("wagtail_ab_testing:ab_test_confirm_delete", args=[self.page.id]),
reverse("wagtail_ab_testing:ab_test_delete", args=[self.page.id]),
msg_prefix="Redirection to the delete A/B tests confirmation page failed.",
)

def test_check_ab_tests_hook_without_tests(self):
# Simulate visiting the delete page
AbTest.objects.all().delete()
request = self.factory.get("/")
response = check_ab_tests_for_page(request, self.page)
self.assertIsNone(response)

def test_ab_test_confirm_delete_view(self):
# Create A/B tests
AbTest.objects.create(
page=self.page,
name="Test AB 1",
first_started_at=datetime(2023, 2, 15),
variant_revision=self.page.get_latest_revision(),
status=AbTest.STATUS_DRAFT,
sample_size=10,
)
AbTest.objects.create(
page=self.page,
name="Test AB 2",
first_started_at=datetime(2023, 2, 20),
variant_revision=self.page.get_latest_revision(),
status=AbTest.STATUS_DRAFT,
sample_size=10,
)

response = self.client.get(
reverse("wagtail_ab_testing:ab_test_confirm_delete", args=[self.page.id])
)
self.assertTemplateUsed(
response, "wagtail_ab_testing/confirm_delete_ab_tests.html"
)

# Check order of abtests
ab_tests = response.context["ab_tests"]
self.assertEqual(len(ab_tests), 2)
self.assertEqual(ab_tests[0].name, "Test AB 2")
self.assertEqual(ab_tests[1].name, "Test AB 1")

def test_ab_test_delete_view(self):
# Create A/B tests
AbTest.objects.create(
page=self.page,
name="Test AB 1",
first_started_at=datetime(2023, 2, 15),
variant_revision=self.page.get_latest_revision(),
status=AbTest.STATUS_DRAFT,
sample_size=10,
)
AbTest.objects.create(
page=self.page,
name="Test AB 2",
first_started_at=datetime(2023, 2, 20),
variant_revision=self.page.get_latest_revision(),
status=AbTest.STATUS_DRAFT,
sample_size=10,
response = self.client.get(
reverse("wagtailadmin_pages:delete", args=[self.page.id]),
follow=True,
)
self.assertTemplateUsed(response, "wagtail_ab_testing/delete_ab_tests.html")

response = self.client.post(
reverse("wagtail_ab_testing:ab_test_delete", args=[self.page.id])
Expand All @@ -133,38 +82,30 @@ def test_ab_test_delete_view(self):
msg_prefix="The response did not redirect to the expected delete page. A/B Tests were not deleted.",
)

def test_ab_test_delete_view_without_delete_abtest_permission(self):
delete_abtest_permission = Permission.objects.get(codename="delete_abtest")
self.moderators_group.permissions.remove(delete_abtest_permission)
self.user.save()

response = self.client.get(
reverse("wagtail_ab_testing:ab_test_delete", args=[self.page.id])
)

self.assertRedirects(
response,
reverse("wagtail_ab_testing:ab_test_confirm_delete", args=[self.page.id]),
)
self.assertEqual(response.status_code, 403)

def test_ab_test_confirm_delete_view_bad_permissions(self):
AbTest.objects.create(
page=self.page,
name="Test AB 1",
first_started_at=datetime(2023, 2, 15),
variant_revision=self.page.get_latest_revision(),
status=AbTest.STATUS_DRAFT,
sample_size=10,
)
AbTest.objects.create(
page=self.page,
name="Test AB 2",
first_started_at=datetime(2023, 2, 20),
variant_revision=self.page.get_latest_revision(),
status=AbTest.STATUS_DRAFT,
sample_size=10,
response = self.client.post(
reverse("wagtail_ab_testing:ab_test_delete", args=[self.page.id])
)
self.user.is_superuser = False
self.user.groups.clear()

self.assertEqual(response.status_code, 403)

def test_ab_test_delete_view_without_delete_page_permission(self):
delete_page_permission = Permission.objects.get(codename="delete_page")
self.moderators_group.permissions.remove(delete_page_permission)
self.user.save()

response = self.client.get(
reverse("wagtail_ab_testing:ab_test_confirm_delete", args=[self.page.id])
reverse("wagtail_ab_testing:ab_test_delete", args=[self.page.id])
)

self.assertEqual(response.status_code, 403)
Expand All @@ -174,4 +115,3 @@ def test_ab_test_confirm_delete_view_bad_permissions(self):
)

self.assertEqual(response.status_code, 403)
self.assertEqual(AbTest.objects.filter(page=self.page).count(), 2)
5 changes: 0 additions & 5 deletions wagtail_ab_testing/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,6 @@
"register-participant/", views.register_participant, name="register_participant"
),
path("goal-reached/", views.goal_reached, name="goal_reached"),
path(
"pages/<int:page_id>/confirm_delete/abtests/",
views.ab_test_confirm_delete,
name="ab_test_confirm_delete",
),
path(
"pages/<int:page_id>/delete/abtests/",
views.ab_test_delete,
Expand Down
Loading