PageRenderTime 25ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 1ms

/tests/core/tests/models.py

https://bitbucket.org/signonsandiego/django-haystack
Python | 140 lines | 112 code | 23 blank | 5 comment | 0 complexity | 6aed416c04be5b5e6c16972b3a1338f2 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. import logging
  2. import pickle
  3. from django.test import TestCase
  4. from haystack.models import SearchResult
  5. from core.models import MockModel
  6. from core.tests.mocks import MockSearchResult
  7. class CaptureHandler(logging.Handler):
  8. logs_seen = []
  9. def emit(self, record):
  10. CaptureHandler.logs_seen.append(record)
  11. class SearchResultTestCase(TestCase):
  12. def setUp(self):
  13. super(SearchResultTestCase, self).setUp()
  14. cap = CaptureHandler()
  15. logging.getLogger('haystack').addHandler(cap)
  16. self.no_data = {}
  17. self.extra_data = {
  18. 'stored': 'I am stored data. How fun.',
  19. }
  20. self.no_overwrite_data = {
  21. 'django_id': 2,
  22. 'django_ct': 'haystack.anothermockmodel',
  23. 'stored': 'I am stored data. How fun.',
  24. }
  25. self.no_data_sr = MockSearchResult('haystack', 'mockmodel', '1', 2)
  26. self.extra_data_sr = MockSearchResult('haystack', 'mockmodel', '1', 3, **self.extra_data)
  27. self.no_overwrite_data_sr = MockSearchResult('haystack', 'mockmodel', '1', 4, **self.no_overwrite_data)
  28. def test_init(self):
  29. self.assertEqual(self.no_data_sr.app_label, 'haystack')
  30. self.assertEqual(self.no_data_sr.model_name, 'mockmodel')
  31. self.assertEqual(self.no_data_sr.model, MockModel)
  32. self.assertEqual(self.no_data_sr.verbose_name, u'Mock model')
  33. self.assertEqual(self.no_data_sr.verbose_name_plural, u'Mock models')
  34. self.assertEqual(self.no_data_sr.pk, '1')
  35. self.assertEqual(self.no_data_sr.score, 2)
  36. self.assertEqual(self.no_data_sr.stored, None)
  37. self.assertEqual(self.extra_data_sr.app_label, 'haystack')
  38. self.assertEqual(self.extra_data_sr.model_name, 'mockmodel')
  39. self.assertEqual(self.extra_data_sr.model, MockModel)
  40. self.assertEqual(self.extra_data_sr.verbose_name, u'Mock model')
  41. self.assertEqual(self.extra_data_sr.verbose_name_plural, u'Mock models')
  42. self.assertEqual(self.extra_data_sr.pk, '1')
  43. self.assertEqual(self.extra_data_sr.score, 3)
  44. self.assertEqual(self.extra_data_sr.stored, 'I am stored data. How fun.')
  45. self.assertEqual(self.no_overwrite_data_sr.app_label, 'haystack')
  46. self.assertEqual(self.no_overwrite_data_sr.model_name, 'mockmodel')
  47. self.assertEqual(self.no_overwrite_data_sr.model, MockModel)
  48. self.assertEqual(self.no_overwrite_data_sr.verbose_name, u'Mock model')
  49. self.assertEqual(self.no_overwrite_data_sr.verbose_name_plural, u'Mock models')
  50. self.assertEqual(self.no_overwrite_data_sr.pk, '1')
  51. self.assertEqual(self.no_overwrite_data_sr.score, 4)
  52. self.assertEqual(self.no_overwrite_data_sr.stored, 'I am stored data. How fun.')
  53. def test_get_additional_fields(self):
  54. self.assertEqual(self.no_data_sr.get_additional_fields(), {})
  55. self.assertEqual(self.extra_data_sr.get_additional_fields(), {'stored': 'I am stored data. How fun.'})
  56. self.assertEqual(self.no_overwrite_data_sr.get_additional_fields(), {'django_ct': 'haystack.anothermockmodel', 'django_id': 2, 'stored': 'I am stored data. How fun.'})
  57. def test_unicode(self):
  58. self.assertEqual(self.no_data_sr.__unicode__(), u"<SearchResult: haystack.mockmodel (pk='1')>")
  59. self.assertEqual(self.extra_data_sr.__unicode__(), u"<SearchResult: haystack.mockmodel (pk='1')>")
  60. self.assertEqual(self.no_overwrite_data_sr.__unicode__(), u"<SearchResult: haystack.mockmodel (pk='1')>")
  61. def test_stored_fields(self):
  62. # Stow.
  63. import haystack
  64. from haystack.sites import SearchSite
  65. old_site = haystack.site
  66. test_site = SearchSite()
  67. haystack.site = test_site
  68. # Without registering, we should receive an empty dict.
  69. self.assertEqual(self.no_data_sr.get_stored_fields(), {})
  70. self.assertEqual(self.extra_data_sr.get_stored_fields(), {})
  71. self.assertEqual(self.no_overwrite_data_sr.get_stored_fields(), {})
  72. from haystack.indexes import SearchIndex, CharField
  73. class TestSearchIndex(SearchIndex):
  74. stored = CharField(model_attr='author', document=True)
  75. # Register the index & try again.
  76. haystack.site.register(MockModel, TestSearchIndex)
  77. self.assertEqual(self.no_data_sr.get_stored_fields(), {'stored': None})
  78. self.assertEqual(self.extra_data_sr.get_stored_fields(), {'stored': 'I am stored data. How fun.'})
  79. self.assertEqual(self.no_overwrite_data_sr.get_stored_fields(), {'stored': 'I am stored data. How fun.'})
  80. # Restore.
  81. haystack.site = old_site
  82. def test_missing_object(self):
  83. awol1 = SearchResult('core', 'mockmodel', '1000000', 2)
  84. self.assertEqual(awol1.app_label, 'core')
  85. self.assertEqual(awol1.model_name, 'mockmodel')
  86. self.assertEqual(awol1.pk, '1000000')
  87. self.assertEqual(awol1.score, 2)
  88. awol2 = SearchResult('core', 'yetanothermockmodel', '1000000', 2)
  89. self.assertEqual(awol2.app_label, 'core')
  90. self.assertEqual(awol2.model_name, 'yetanothermockmodel')
  91. self.assertEqual(awol2.pk, '1000000')
  92. self.assertEqual(awol2.score, 2)
  93. # Failed lookups should fail gracefully.
  94. CaptureHandler.logs_seen = []
  95. self.assertEqual(awol1.model, MockModel)
  96. self.assertEqual(awol1.object, None)
  97. self.assertEqual(awol1.verbose_name, u'Mock model')
  98. self.assertEqual(awol1.verbose_name_plural, u'Mock models')
  99. self.assertEqual(awol1.stored, None)
  100. self.assertEqual(len(CaptureHandler.logs_seen), 3)
  101. CaptureHandler.logs_seen = []
  102. self.assertEqual(awol2.model, None)
  103. self.assertEqual(awol2.object, None)
  104. self.assertEqual(awol2.verbose_name, u'')
  105. self.assertEqual(awol2.verbose_name_plural, u'')
  106. self.assertEqual(awol2.stored, None)
  107. self.assertEqual(len(CaptureHandler.logs_seen), 9)
  108. def test_pickling(self):
  109. pickle_me_1 = SearchResult('core', 'mockmodel', '1000000', 2)
  110. picklicious = pickle.dumps(pickle_me_1)
  111. pickle_me_2 = pickle.loads(picklicious)
  112. self.assertEqual(pickle_me_1.app_label, pickle_me_2.app_label)
  113. self.assertEqual(pickle_me_1.model_name, pickle_me_2.model_name)
  114. self.assertEqual(pickle_me_1.pk, pickle_me_2.pk)
  115. self.assertEqual(pickle_me_1.score, pickle_me_2.score)