1from __future__ import absolute_import, unicode_literals
2
3from django.test import TestCase
4from django.urls import reverse
5from django.utils import timezone
6
7from wagtail.core.models import Page, Site
8from wagtail.tests.benchmark import Benchmark
9from wagtail.tests.testapp.models import SingleEventPage, StreamPage
10from wagtail.tests.utils import WagtailTestUtils
11
12
13class BenchPageExplorerWith50LargePages(Benchmark, WagtailTestUtils, TestCase):
14    """
15    Creates 50 pages with large body content and benches the explorer.
16    This will be slow if the body content is being loaded from the database.
17    """
18
19    def setUp(self):
20        self.root_page = Page.objects.get(id=1)
21
22        # Add a site so the URLs render correctly
23        Site.objects.create(is_default_site=True, root_page=self.root_page)
24
25        # Create a large piece of body text
26        body = '[' + ','.join(['{"type": "text", "value": "%s"}' % ('foo' * 2000)] * 100) + ']'
27
28        # Create 50 simple pages with long content fields
29        for i in range(50):
30            self.root_page.add_child(instance=StreamPage(
31                title="Page {}".format(i + 1),
32                slug=str(i + 1),
33                body=body,
34            ))
35
36        self.login()
37
38    def bench(self):
39        response = self.client.get(reverse('wagtailadmin_explore', args=(self.root_page.id, )))
40
41        # Check the response was good
42        self.assertEqual(response.status_code, 200)
43
44        # Check every single page was rendered
45        self.assertContains(response, "Page 1")
46        self.assertContains(response, "Page 49")
47
48
49class BenchPageExplorerWithCustomURLPages(Benchmark, WagtailTestUtils, TestCase):
50    """
51    Creates 50 pages of a class with a customised the .url property.
52    This will check how long it takes to generate URLs for all of these
53    pages.
54    """
55
56    def setUp(self):
57        self.root_page = Page.objects.get(id=1)
58
59        # Add a site so the URLs render correctly
60        Site.objects.create(is_default_site=True, root_page=self.root_page)
61
62        # Create 50 blog pages
63        for i in range(50):
64            self.root_page.add_child(instance=SingleEventPage(
65                title="Event {}".format(i + 1),
66                slug=str(i + 1),
67                date_from=timezone.now(),
68                audience="public",
69                location="reykjavik",
70                cost="cost",
71            ))
72
73        self.login()
74
75    def bench(self):
76        response = self.client.get(reverse('wagtailadmin_explore', args=(self.root_page.id, )))
77
78        # Check the response was good
79        self.assertEqual(response.status_code, 200)
80
81        # Check every single page was rendered
82        self.assertContains(response, "Event 1")
83        self.assertContains(response, "Event 49")
84
85        # Check the URLs were rendered correctly
86        self.assertContains(response, 'a href="http:///49/pointless-suffix/"')
87