test_frontend.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. from django.core import paginator
  2. from django.test import TestCase
  3. from django.urls import reverse
  4. from wagtail.core.models import Page
  5. from wagtail.search.models import Query
  6. from wagtail.tests.testapp.models import EventPage
  7. class TestSearchView(TestCase):
  8. fixtures = ['test.json']
  9. def test_get(self):
  10. response = self.client.get(reverse('wagtailsearch_search'))
  11. self.assertEqual(response.status_code, 200)
  12. self.assertTemplateUsed(response, 'wagtailsearch/search_results.html')
  13. # Check that search_results/query are set to None
  14. self.assertIsNone(response.context['search_results'])
  15. self.assertIsNone(response.context['query'])
  16. def test_search(self):
  17. response = self.client.get(reverse('wagtailsearch_search') + '?q=Christmas')
  18. self.assertEqual(response.status_code, 200)
  19. self.assertTemplateUsed(response, 'wagtailsearch/search_results.html')
  20. self.assertEqual(response.context['query_string'], "Christmas")
  21. # Check that search_results is an instance of paginator.Page
  22. self.assertIsInstance(response.context['search_results'], paginator.Page)
  23. # Check that the christmas page was in the results (and is the only result)
  24. search_results = response.context['search_results'].object_list
  25. christmas_event_page = Page.objects.get(url_path='/home/events/christmas/')
  26. self.assertEqual(list(search_results), [christmas_event_page])
  27. # Check the query object
  28. self.assertIsInstance(response.context['query'], Query)
  29. query = response.context['query']
  30. self.assertEqual(query.query_string, "christmas")
  31. def pagination_test(test):
  32. def wrapper(*args, **kwargs):
  33. # Create some pages
  34. event_index = Page.objects.get(url_path='/home/events/')
  35. for i in range(100):
  36. event = EventPage(
  37. title="Event " + str(i),
  38. slug='event-' + str(i),
  39. location='the moon', audience='public',
  40. cost='free', date_from='2001-01-01',
  41. live=True,
  42. )
  43. event_index.add_child(instance=event)
  44. return test(*args, **kwargs)
  45. return wrapper
  46. @pagination_test
  47. def test_get_first_page(self):
  48. response = self.client.get(reverse('wagtailsearch_search') + '?q=Event&page=1')
  49. self.assertEqual(response.status_code, 200)
  50. self.assertTemplateUsed(response, 'wagtailsearch/search_results.html')
  51. # Test that we got the first page
  52. search_results = response.context['search_results']
  53. self.assertEqual(search_results.number, 1)
  54. @pagination_test
  55. def test_get_10th_page(self):
  56. response = self.client.get(reverse('wagtailsearch_search') + '?q=Event&page=10')
  57. self.assertEqual(response.status_code, 200)
  58. self.assertTemplateUsed(response, 'wagtailsearch/search_results.html')
  59. # Test that we got the tenth page
  60. search_results = response.context['search_results']
  61. self.assertEqual(search_results.number, 10)
  62. @pagination_test
  63. def test_get_invalid_page(self):
  64. response = self.client.get(reverse('wagtailsearch_search') + '?q=Event&page=Not a Page')
  65. self.assertEqual(response.status_code, 200)
  66. self.assertTemplateUsed(response, 'wagtailsearch/search_results.html')
  67. # Test that we got the first page
  68. search_results = response.context['search_results']
  69. self.assertEqual(search_results.number, 1)
  70. @pagination_test
  71. def test_get_out_of_range_page(self):
  72. response = self.client.get(reverse('wagtailsearch_search') + '?q=Event&page=9999')
  73. self.assertEqual(response.status_code, 200)
  74. self.assertTemplateUsed(response, 'wagtailsearch/search_results.html')
  75. # Test that we got the last page
  76. search_results = response.context['search_results']
  77. self.assertEqual(search_results.number, search_results.paginator.num_pages)
  78. @pagination_test
  79. def test_get_zero_page(self):
  80. response = self.client.get(reverse('wagtailsearch_search') + '?q=Event&page=0')
  81. self.assertEqual(response.status_code, 200)
  82. self.assertTemplateUsed(response, 'wagtailsearch/search_results.html')
  83. # Test that we got the first page
  84. search_results = response.context['search_results']
  85. self.assertEqual(search_results.number, search_results.paginator.num_pages)
  86. @pagination_test
  87. def test_get_10th_page_backwards_compatibility_with_p(self):
  88. response = self.client.get(reverse('wagtailsearch_search') + '?q=Event&p=10')
  89. self.assertEqual(response.status_code, 200)
  90. self.assertTemplateUsed(response, 'wagtailsearch/search_results.html')
  91. # Test that we got the tenth page
  92. search_results = response.context['search_results']
  93. self.assertEqual(search_results.number, 10)
  94. class TestSuggestionsView(TestCase):
  95. def get(self, params={}):
  96. return self.client.get('/search/suggest/', params)
  97. def test_simple(self):
  98. response = self.get()
  99. self.assertEqual(response.status_code, 200)
  100. # TODO: Check that a valid JSON document was returned
  101. def test_search(self):
  102. response = self.get({'q': "Hello"})
  103. self.assertEqual(response.status_code, 200)