summaryrefslogtreecommitdiffstats
path: root/askbot/tests/haystack_search_tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'askbot/tests/haystack_search_tests.py')
-rw-r--r--askbot/tests/haystack_search_tests.py101
1 files changed, 101 insertions, 0 deletions
diff --git a/askbot/tests/haystack_search_tests.py b/askbot/tests/haystack_search_tests.py
new file mode 100644
index 00000000..7a8bfcfd
--- /dev/null
+++ b/askbot/tests/haystack_search_tests.py
@@ -0,0 +1,101 @@
+"""Tests haystack indexes and queries"""
+from django.core import exceptions
+from django.conf import settings
+from django.contrib.auth.models import User
+from askbot.tests.utils import AskbotTestCase, skipIf
+from askbot import models
+import datetime
+
+class HaystackSearchTests(AskbotTestCase):
+ """tests methods on User object,
+ that were added for askbot
+ """
+ def setUp(self):
+ self._old_value = getattr(settings, 'ENABLE_HAYSTACK_SEARCH', False)
+ setattr(settings, "ENABLE_HAYSTACK_SEARCH", True)
+
+ self.user = self.create_user(username='gepeto')
+ self.other_user = self.create_user(username = 'pinocho')
+ self.other_user.location = 'Managua'
+ self.other_user.about = "I'm made of wood, gepeto made me"
+ self.other_user.save()
+ body_1 = '''Lorem turpis purus? Amet mattis eu et sociis phasellus
+ montes elementum proin ut urna enim, velit, tincidunt quis ut,
+ et integer mus? Nunc! Vut sed? Ac tincidunt egestas adipiscing,
+ magna et pulvinar mid est urna ultricies, turpis tristique nisi,
+ cum. Urna. Purus elit porttitor nisi porttitor ridiculus tincidunt
+ amet duis, gepeto'''
+ #from Baldy of Nome by Esther Birdsall Darling
+ body_2 = ''' With unseeing eyes and dragging steps, the boy trudged along the snowy
+ trail, dreading the arrival at Golconda Camp. For there was the House of
+ Judgment, where all of the unfortunate events of that most unhappy day
+ would be reviewed sternly, lorem'''
+ self.question1 = self.post_question(
+ user=self.user,
+ body_text=body_1,
+ title='Test title 1'
+ )
+ self.question2 = self.post_question(
+ user=self.other_user,
+ body_text=body_2,
+ title='Test title 2, Baldy of Nome'
+ )
+ self.answer1 = self.post_answer(
+ user=self.user,
+ question = self.question1,
+ body_text="This is a answer for question 1"
+ )
+ self.answer1 = self.post_answer(
+ user=self.other_user,
+ question = self.question2,
+ body_text="Just a random text to fill the space"
+ )
+
+ def tearDown(self):
+ setattr(settings, "ENABLE_HAYSTACK_SEARCH", self._old_value)
+
+ @skipIf('haystack' not in settings.INSTALLED_APPS,
+ 'Haystack not setup')
+ def test_title_search(self):
+ #title search
+ title_search_qs = models.Thread.objects.get_for_query('title')
+ title_search_qs_2 = models.Thread.objects.get_for_query('Nome')
+ self.assertEquals(title_search_qs.count(), 2)
+ self.assertEquals(title_search_qs_2.count(), 1)
+
+ @skipIf('haystack' not in settings.INSTALLED_APPS,
+ 'Haystack not setup')
+ def test_body_search(self):
+
+ #bodysearch
+ body_search_qs = models.Thread.objects.get_for_query('Lorem')
+ self.assertEquals(body_search_qs.count(), 2)
+ body_search_qs_2 = models.Thread.objects.get_for_query('steps')
+ self.assertEquals(body_search_qs_2.count(), 1)
+
+ @skipIf('haystack' not in settings.INSTALLED_APPS,
+ 'Haystack not setup')
+ def test_user_profile_search(self):
+ #must return pinocho
+ user_profile_qs = models.get_users_by_text_query('wood')
+ self.assertEquals(user_profile_qs.count(), 1)
+
+ #returns both gepeto and pinocho because gepeto nickname
+ #and gepeto name in pinocho's profile
+ user_profile_qs = models.get_users_by_text_query('gepeto')
+ self.assertEquals(user_profile_qs.count(), 2)
+
+ @skipIf('haystack' not in settings.INSTALLED_APPS,
+ 'Haystack not setup')
+ def test_get_django_queryset(self):
+ '''makes a query that can return multiple models and test
+ get_django_queryset() method from AskbotSearchQuerySet'''
+ #gepeto is present in profile and in question
+ from askbot.search.haystack import AskbotSearchQuerySet
+ qs = AskbotSearchQuerySet().filter(content='gepeto').get_django_queryset(User)
+ for instance in qs:
+ self.assertTrue(isinstance(instance, User))
+
+ qs = AskbotSearchQuerySet().filter(content='gepeto').get_django_queryset(models.Thread)
+ for instance in qs:
+ self.assertTrue(isinstance(instance, models.Thread))