summaryrefslogtreecommitdiffstats
path: root/askbot/tests/search_state_tests.py
diff options
context:
space:
mode:
authorTomasz Zielinski <tomasz.zielinski@pyconsultant.eu>2012-01-19 18:22:01 +0100
committerTomasz Zielinski <tomasz.zielinski@pyconsultant.eu>2012-01-19 20:53:05 +0100
commitd49ceb5b144356865d2566336f2e90283de9d029 (patch)
tree52f4b9ad0816cc4639ff45cb6e3074cb0d06168f /askbot/tests/search_state_tests.py
parent4f0f77ca945a43bfd70767a30cd6819af1741cb8 (diff)
downloadaskbot-d49ceb5b144356865d2566336f2e90283de9d029.tar.gz
askbot-d49ceb5b144356865d2566336f2e90283de9d029.tar.bz2
askbot-d49ceb5b144356865d2566336f2e90283de9d029.zip
Speed optimizations for the main page; bugfixes; added new tests and upgraded some old ones
Diffstat (limited to 'askbot/tests/search_state_tests.py')
-rw-r--r--askbot/tests/search_state_tests.py120
1 files changed, 102 insertions, 18 deletions
diff --git a/askbot/tests/search_state_tests.py b/askbot/tests/search_state_tests.py
index 791ee206..aca989fc 100644
--- a/askbot/tests/search_state_tests.py
+++ b/askbot/tests/search_state_tests.py
@@ -1,6 +1,7 @@
from askbot.tests.utils import AskbotTestCase
from askbot.search.state_manager import SearchState
import askbot.conf
+from django.core import urlresolvers
class SearchStateTests(AskbotTestCase):
@@ -56,6 +57,10 @@ class SearchStateTests(AskbotTestCase):
'scope:unanswered/sort:age-desc/query:alfa/tags:miki,mini/author:12/page:2/',
ss.query_string()
)
+ self.assertEqual(
+ 'scope:unanswered/sort:age-desc/query:alfa/tags:miki,mini/author:12/page:2/',
+ ss.deepcopy().query_string()
+ )
def test_edge_cases_1(self):
ss = SearchState(
@@ -72,6 +77,10 @@ class SearchStateTests(AskbotTestCase):
'scope:all/sort:age-desc/query:alfa/tags:miki,mini/author:12/page:2/',
ss.query_string()
)
+ self.assertEqual(
+ 'scope:all/sort:age-desc/query:alfa/tags:miki,mini/author:12/page:2/',
+ ss.deepcopy().query_string()
+ )
ss = SearchState(
scope='favorite',
@@ -86,7 +95,10 @@ class SearchStateTests(AskbotTestCase):
self.assertEqual(
'scope:favorite/sort:age-desc/query:alfa/tags:miki,mini/author:12/page:2/',
ss.query_string()
-
+ )
+ self.assertEqual(
+ 'scope:favorite/sort:age-desc/query:alfa/tags:miki,mini/author:12/page:2/',
+ ss.deepcopy().query_string()
)
def test_edge_cases_2(self):
@@ -144,10 +156,10 @@ class SearchStateTests(AskbotTestCase):
def test_query_escaping(self):
ss = self._ss(query=' alfa miki maki +-%#?= lalala/: ') # query coming from URL is already unescaped
- self.assertEqual(
- 'scope:all/sort:activity-desc/query:alfa%20miki%20maki%20+-%25%23%3F%3D%20lalala%2F%3A/page:1/',
- ss.query_string()
- )
+
+ qs = 'scope:all/sort:activity-desc/query:alfa%20miki%20maki%20+-%25%23%3F%3D%20lalala%2F%3A/page:1/'
+ self.assertEqual(qs, ss.query_string())
+ self.assertEqual(qs, ss.deepcopy().query_string())
def test_tag_escaping(self):
ss = self._ss(tags=' aA09_+.-#, miki ') # tag string coming from URL is already unescaped
@@ -158,11 +170,15 @@ class SearchStateTests(AskbotTestCase):
def test_extract_users(self):
ss = self._ss(query='"@anna haha @"maria fernanda" @\'diego maradona\' hehe [user:karl marx] hoho user:\' george bush \'')
- self.assertEquals(
+ self.assertEqual(
sorted(ss.query_users),
sorted(['anna', 'maria fernanda', 'diego maradona', 'karl marx', 'george bush'])
)
- self.assertEquals(ss.stripped_query, '" haha hehe hoho')
+ self.assertEqual(sorted(ss.query_users), sorted(ss.deepcopy().query_users))
+
+ self.assertEqual(ss.stripped_query, '" haha hehe hoho')
+ self.assertEqual(ss.stripped_query, ss.deepcopy().stripped_query)
+
self.assertEqual(
'scope:all/sort:activity-desc/query:%22%40anna%20haha%20%40%22maria%20fernanda%22%20%40%27diego%20maradona%27%20hehe%20%5Buser%3Akarl%20%20marx%5D%20hoho%20%20user%3A%27%20george%20bush%20%20%27/page:1/',
ss.query_string()
@@ -170,24 +186,92 @@ class SearchStateTests(AskbotTestCase):
def test_extract_tags(self):
ss = self._ss(query='#tag1 [tag: tag2] some text [tag3] query')
- self.assertEquals(set(ss.query_tags), set(['tag1', 'tag2', 'tag3']))
- self.assertEquals(ss.stripped_query, 'some text query')
+ self.assertEqual(set(ss.query_tags), set(['tag1', 'tag2', 'tag3']))
+ self.assertEqual(ss.stripped_query, 'some text query')
+
+ self.assertFalse(ss.deepcopy().query_tags is ss.query_tags)
+ self.assertEqual(set(ss.deepcopy().query_tags), set(ss.query_tags))
+ self.assertTrue(ss.deepcopy().stripped_query is ss.stripped_query)
+ self.assertEqual(ss.deepcopy().stripped_query, ss.stripped_query)
def test_extract_title1(self):
ss = self._ss(query='some text query [title: what is this?]')
- self.assertEquals(ss.query_title, 'what is this?')
- self.assertEquals(ss.stripped_query, 'some text query')
+ self.assertEqual(ss.query_title, 'what is this?')
+ self.assertEqual(ss.stripped_query, 'some text query')
def test_extract_title2(self):
ss = self._ss(query='some text query title:"what is this?"')
- self.assertEquals(ss.query_title, 'what is this?')
- self.assertEquals(ss.stripped_query, 'some text query')
+ self.assertEqual(ss.query_title, 'what is this?')
+ self.assertEqual(ss.stripped_query, 'some text query')
def test_extract_title3(self):
ss = self._ss(query='some text query title:\'what is this?\'')
- self.assertEquals(ss.query_title, 'what is this?')
- self.assertEquals(ss.stripped_query, 'some text query')
+ self.assertEqual(ss.query_title, 'what is this?')
+ self.assertEqual(ss.stripped_query, 'some text query')
+
+ def test_deep_copy_1(self):
+ # deepcopy() is tested in other tests as well, but this is a dedicated test
+ # just to make sure in one place that everything is ok:
+ # 1. immutable properties (strings, ints) are just assigned to the copy
+ # 2. lists are cloned so that change in the copy doesn't affect the original
+
+ ss = SearchState(
+ scope='unanswered',
+ sort='votes-desc',
+ query='hejho #tag1 [tag: tag2] @user @user2 title:"what is this?"',
+ tags='miki, mini',
+ author='12',
+ page='2',
+
+ user_logged_in=False
+ )
+ ss2 = ss.deepcopy()
+
+ self.assertEqual(ss.scope, 'unanswered')
+ self.assertTrue(ss.scope is ss2.scope)
+
+ self.assertEqual(ss.sort, 'votes-desc')
+ self.assertTrue(ss.sort is ss2.sort)
+
+ self.assertEqual(ss.query, 'hejho #tag1 [tag: tag2] @user @user2 title:"what is this?"')
+ self.assertTrue(ss.query is ss2.query)
+
+ self.assertFalse(ss.tags is ss2.tags)
+ self.assertItemsEqual(ss.tags, ss2.tags)
+
+ self.assertEqual(ss.author, 12)
+ self.assertTrue(ss.author is ss2.author)
+
+ self.assertEqual(ss.page, 2)
+ self.assertTrue(ss.page is ss2.page)
+
+ self.assertEqual(ss.stripped_query, 'hejho')
+ self.assertTrue(ss.stripped_query is ss2.stripped_query)
+
+ self.assertItemsEqual(ss.query_tags, ['tag1', 'tag2'])
+ self.assertFalse(ss.query_tags is ss2.query_tags)
+
+ self.assertItemsEqual(ss.query_users, ['user', 'user2'])
+ self.assertFalse(ss.query_users is ss2.query_users)
+
+ self.assertEqual(ss.query_title, 'what is this?')
+ self.assertTrue(ss.query_title is ss2.query_title)
+
+ self.assertEqual(ss._questions_url, urlresolvers.reverse('questions'))
+ self.assertTrue(ss._questions_url is ss2._questions_url)
+
+ def test_deep_copy_2(self):
+ # Regression test: a special case of deepcopy() when `tags` list is empty,
+ # there was a bug before where this empty list in original and copy pointed
+ # to the same list object
+ ss = SearchState.get_empty()
+ ss2 = ss.deepcopy()
+
+ self.assertFalse(ss.tags is ss2.tags)
+ self.assertItemsEqual(ss.tags, ss2.tags)
+ self.assertItemsEqual([], ss2.tags)
+
+ def test_cannot_add_already_added_tag(self):
+ ss = SearchState.get_empty().add_tag('double').add_tag('double')
+ self.assertListEqual(['double'], ss.tags)
- def test_negative_match(self):
- ss = self._ss(query='some query text')
- self.assertEquals(ss.stripped_query, 'some query text')