diff options
author | Tomasz Zielinski <tomasz.zielinski@pyconsultant.eu> | 2012-01-19 18:22:01 +0100 |
---|---|---|
committer | Tomasz Zielinski <tomasz.zielinski@pyconsultant.eu> | 2012-01-19 20:53:05 +0100 |
commit | d49ceb5b144356865d2566336f2e90283de9d029 (patch) | |
tree | 52f4b9ad0816cc4639ff45cb6e3074cb0d06168f /askbot/tests/search_state_tests.py | |
parent | 4f0f77ca945a43bfd70767a30cd6819af1741cb8 (diff) | |
download | askbot-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.py | 120 |
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') |