from django.http import QueryDict from django.test import TestCase from bookmarks.models import BookmarkSearch class BookmarkSearchModelTest(TestCase): def test_from_request(self): # no params query_dict = QueryDict() search = BookmarkSearch.from_request(query_dict) self.assertEqual(search.q, '') self.assertEqual(search.user, '') self.assertEqual(search.sort, BookmarkSearch.SORT_ADDED_DESC) self.assertEqual(search.shared, BookmarkSearch.FILTER_SHARED_OFF) self.assertEqual(search.unread, BookmarkSearch.FILTER_UNREAD_OFF) # some params query_dict = QueryDict('q=search query&user=user123') bookmark_search = BookmarkSearch.from_request(query_dict) self.assertEqual(bookmark_search.q, 'search query') self.assertEqual(bookmark_search.user, 'user123') self.assertEqual(bookmark_search.sort, BookmarkSearch.SORT_ADDED_DESC) self.assertEqual(search.shared, BookmarkSearch.FILTER_SHARED_OFF) self.assertEqual(search.unread, BookmarkSearch.FILTER_UNREAD_OFF) # all params query_dict = QueryDict('q=search query&sort=title_asc&user=user123&shared=yes&unread=yes') search = BookmarkSearch.from_request(query_dict) self.assertEqual(search.q, 'search query') self.assertEqual(search.user, 'user123') self.assertEqual(search.sort, BookmarkSearch.SORT_TITLE_ASC) self.assertEqual(search.shared, BookmarkSearch.FILTER_SHARED_SHARED) self.assertEqual(search.unread, BookmarkSearch.FILTER_UNREAD_YES) # respects preferences preferences = { 'sort': BookmarkSearch.SORT_TITLE_ASC, 'unread': BookmarkSearch.FILTER_UNREAD_YES, } query_dict = QueryDict('q=search query') search = BookmarkSearch.from_request(query_dict, preferences) self.assertEqual(search.q, 'search query') self.assertEqual(search.user, '') self.assertEqual(search.sort, BookmarkSearch.SORT_TITLE_ASC) self.assertEqual(search.shared, BookmarkSearch.FILTER_SHARED_OFF) self.assertEqual(search.unread, BookmarkSearch.FILTER_UNREAD_YES) # query overrides preferences preferences = { 'sort': BookmarkSearch.SORT_TITLE_ASC, 'shared': BookmarkSearch.FILTER_SHARED_SHARED, 'unread': BookmarkSearch.FILTER_UNREAD_YES, } query_dict = QueryDict('sort=title_desc&shared=no&unread=off') search = BookmarkSearch.from_request(query_dict, preferences) self.assertEqual(search.q, '') self.assertEqual(search.user, '') self.assertEqual(search.sort, BookmarkSearch.SORT_TITLE_DESC) self.assertEqual(search.shared, BookmarkSearch.FILTER_SHARED_UNSHARED) self.assertEqual(search.unread, BookmarkSearch.FILTER_UNREAD_OFF) def test_modified_params(self): # no params bookmark_search = BookmarkSearch() modified_params = bookmark_search.modified_params self.assertEqual(len(modified_params), 0) # params are default values bookmark_search = BookmarkSearch(q='', sort=BookmarkSearch.SORT_ADDED_DESC, user='', shared='') modified_params = bookmark_search.modified_params self.assertEqual(len(modified_params), 0) # some modified params bookmark_search = BookmarkSearch(q='search query', sort=BookmarkSearch.SORT_ADDED_ASC) modified_params = bookmark_search.modified_params self.assertCountEqual(modified_params, ['q', 'sort']) # all modified params bookmark_search = BookmarkSearch(q='search query', sort=BookmarkSearch.SORT_ADDED_ASC, user='user123', shared=BookmarkSearch.FILTER_SHARED_SHARED, unread=BookmarkSearch.FILTER_UNREAD_YES) modified_params = bookmark_search.modified_params self.assertCountEqual(modified_params, ['q', 'sort', 'user', 'shared', 'unread']) # preferences are not modified params preferences = { 'sort': BookmarkSearch.SORT_TITLE_ASC, 'unread': BookmarkSearch.FILTER_UNREAD_YES, } bookmark_search = BookmarkSearch(preferences=preferences) modified_params = bookmark_search.modified_params self.assertEqual(len(modified_params), 0) # param is not modified if it matches the preference preferences = { 'sort': BookmarkSearch.SORT_TITLE_ASC, 'unread': BookmarkSearch.FILTER_UNREAD_YES, } bookmark_search = BookmarkSearch(sort=BookmarkSearch.SORT_TITLE_ASC, unread=BookmarkSearch.FILTER_UNREAD_YES, preferences=preferences) modified_params = bookmark_search.modified_params self.assertEqual(len(modified_params), 0) # overriding preferences is a modified param preferences = { 'sort': BookmarkSearch.SORT_TITLE_ASC, 'shared': BookmarkSearch.FILTER_SHARED_SHARED, 'unread': BookmarkSearch.FILTER_UNREAD_YES, } bookmark_search = BookmarkSearch(sort=BookmarkSearch.SORT_TITLE_DESC, shared=BookmarkSearch.FILTER_SHARED_UNSHARED, unread=BookmarkSearch.FILTER_UNREAD_OFF, preferences=preferences) modified_params = bookmark_search.modified_params self.assertCountEqual(modified_params, ['sort', 'shared', 'unread']) def test_has_modifications(self): # no params bookmark_search = BookmarkSearch() self.assertFalse(bookmark_search.has_modifications) # params are default values bookmark_search = BookmarkSearch(q='', sort=BookmarkSearch.SORT_ADDED_DESC, user='', shared='') self.assertFalse(bookmark_search.has_modifications) # modified params bookmark_search = BookmarkSearch(q='search query', sort=BookmarkSearch.SORT_ADDED_ASC) self.assertTrue(bookmark_search.has_modifications) def test_preferences_dict(self): # no params bookmark_search = BookmarkSearch() self.assertEqual(bookmark_search.preferences_dict, { 'sort': BookmarkSearch.SORT_ADDED_DESC, 'shared': BookmarkSearch.FILTER_SHARED_OFF, 'unread': BookmarkSearch.FILTER_UNREAD_OFF, }) # with params bookmark_search = BookmarkSearch(sort=BookmarkSearch.SORT_TITLE_DESC, unread=BookmarkSearch.FILTER_UNREAD_YES) self.assertEqual(bookmark_search.preferences_dict, { 'sort': BookmarkSearch.SORT_TITLE_DESC, 'shared': BookmarkSearch.FILTER_SHARED_OFF, 'unread': BookmarkSearch.FILTER_UNREAD_YES, }) # only returns preferences bookmark_search = BookmarkSearch(q='search query', user='user123') self.assertEqual(bookmark_search.preferences_dict, { 'sort': BookmarkSearch.SORT_ADDED_DESC, 'shared': BookmarkSearch.FILTER_SHARED_OFF, 'unread': BookmarkSearch.FILTER_UNREAD_OFF, })