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