def test_initial_list(self): # try with no search just to see self.check_initial_list_filter([self.info1, self.info2], [self.info1, self.info2]) # try again with a search set self.filterer = SearchFilter() self.filterer.set_search("two") self.check_initial_list_filter([self.info1, self.info2], [self.info2])
def setUp(self): MiroTestCase.setUp(self) self.feed = models.Feed(u'http://example.com/') self.initial_list = [] self.added_objects = [] self.changed_objects = [] self.removed_objects = [] self.filterer = SearchFilter() self.info1 = self.make_info(u'info one') self.info2 = self.make_info(u'info two') self.info3 = self.make_info(u'info three') self.info4 = self.make_info(u'info four')
class SearchFilterTest(MiroTestCase): def setUp(self): MiroTestCase.setUp(self) self.feed = models.Feed(u'http://example.com/') self.initial_list = [] self.added_objects = [] self.changed_objects = [] self.removed_objects = [] self.filterer = SearchFilter() self.info1 = self.make_info(u'info one') self.info2 = self.make_info(u'info two') self.info3 = self.make_info(u'info three') self.info4 = self.make_info(u'info four') def make_info(self, title): additional = {'title': title} url = u'http://example.com/' entry = _build_entry(url, 'video/x-unknown', additional) item = models.Item(FeedParserValues(entry), feed_id=self.feed.id) return itemsource.DatabaseItemSource._item_info_for(item) def check_initial_list_filter(self, initial_list, filtered_list): self.assertEquals(self.filterer.filter_initial_list(initial_list), filtered_list) def check_changed_filter(self, added, changed, removed, filtered_added, filtered_changed, filtered_removed): removed_ids = [i.id for i in removed] filtered_removed_ids = [i.id for i in filtered_removed] results = self.filterer.filter_changes(added, changed, removed_ids) self.assertSameSet(results[0], filtered_added) self.assertSameSet(results[1], filtered_changed) self.assertSameSet(results[2], filtered_removed_ids) def check_search_change(self, query, filtered_added, filtered_removed): filtered_removed_ids = [i.id for i in filtered_removed] results = self.filterer.set_search(query) self.assertSameSet(results[0], filtered_added) self.assertSameSet(results[1], filtered_removed_ids) def send_items_changed_message(self, added, changed, removed): removed = [i.id for i in removed] message = messages.ItemsChanged('mytpe', 123, added, changed, removed) self.filterer.handle_items_changed(message) def update_info(self, info, name): info.name = name info.search_terms = search.calc_search_terms(info) def test_initial_list(self): # try with no search just to see self.check_initial_list_filter([self.info1, self.info2], [self.info1, self.info2]) # try again with a search set self.filterer = SearchFilter() self.filterer.set_search("two") self.check_initial_list_filter([self.info1, self.info2], [self.info2]) def test_change_search(self): self.filterer.filter_initial_list([self.info1, self.info2]) # info1 doesn't matches the search, it should be removed self.check_search_change("two", [], [self.info1]) # info1 matches now, item2 doesn't self.check_search_change("one", [self.info1], [self.info2]) def test_add(self): # setup initial state self.filterer.filter_initial_list([self.info1, self.info2]) self.filterer.set_search("three") # only info3 matches the search, it should be the only one added self.check_changed_filter([self.info3, self.info4], [], [], [self.info3], [], []) def test_update(self): # setup initial state infos = [self.info1, self.info2, self.info3] self.filterer.filter_initial_list(infos) self.filterer.set_search("three") # info1 now matches the search, it should be added # info3 matched the search before and now, so it should be changed self.update_info(self.info1, u'three') self.check_changed_filter([], infos, [], [self.info1], [self.info3], []) # info1 no longer matches the search, it should be removed # info3 matched the search before and now, so it should be changed self.update_info(self.info1, u'one') self.check_changed_filter([], infos, [], [], [self.info3], [self.info1]) def test_remove(self): self.filterer.filter_initial_list([self.info1, self.info2]) self.filterer.set_search("two") # only info2 matches the search, so removed should only include it self.check_changed_filter([], [], [self.info1, self.info2], [], [], [self.info2])
class SearchFilterTest(MiroTestCase): def setUp(self): MiroTestCase.setUp(self) self.feed = models.Feed(u'http://example.com/') self.initial_list = [] self.added_objects = [] self.changed_objects = [] self.removed_objects = [] self.filterer = SearchFilter() self.info1 = self.make_info(u'info one') self.info2 = self.make_info(u'info two') self.info3 = self.make_info(u'info three') self.info4 = self.make_info(u'info four') def make_info(self, title): additional = {'title': title} url = u'http://example.com/' entry = _build_entry(url, 'video/x-unknown', additional) item = models.Item(FeedParserValues(entry), feed_id=self.feed.id) return itemsource.DatabaseItemSource._item_info_for(item) def check_initial_list_filter(self, initial_list, filtered_list): self.assertEquals(self.filterer.filter_initial_list(initial_list), filtered_list) def check_changed_filter(self, added, changed, removed, filtered_added, filtered_changed, filtered_removed): removed_ids = [i.id for i in removed] filtered_removed_ids = [i.id for i in filtered_removed] results = self.filterer.filter_changes(added, changed, removed_ids) self.assertSameSet(results[0], filtered_added) self.assertSameSet(results[1], filtered_changed) self.assertSameSet(results[2], filtered_removed_ids) def check_search_change(self, query, filtered_added, filtered_removed): filtered_removed_ids = [i.id for i in filtered_removed] results = self.filterer.set_search(query) self.assertSameSet(results[0], filtered_added) self.assertSameSet(results[1], filtered_removed_ids) def send_items_changed_message(self, added, changed, removed): removed = [i.id for i in removed] message = messages.ItemsChanged('mytpe', 123, added, changed, removed) self.filterer.handle_items_changed(message) def update_info(self, info, name): info.name = name info.search_ngrams = search.calc_ngrams(info) def test_initial_list(self): # try with no search just to see self.check_initial_list_filter([self.info1, self.info2], [self.info1, self.info2]) # try again with a search set self.filterer = SearchFilter() self.filterer.set_search("two") self.check_initial_list_filter([self.info1, self.info2], [self.info2]) def test_change_search(self): self.filterer.filter_initial_list([self.info1, self.info2]) # info1 doesn't matches the search, it should be removed self.check_search_change("two", [], [self.info1]) # info1 matches now, item2 doesn't self.check_search_change("one", [self.info1], [self.info2]) def test_add(self): # setup initial state self.filterer.filter_initial_list([self.info1, self.info2]) self.filterer.set_search("three") # only info3 matches the search, it should be the only one added self.check_changed_filter([self.info3, self.info4], [], [], [self.info3], [], []) def test_update(self): # setup initial state infos = [self.info1, self.info2, self.info3] self.filterer.filter_initial_list(infos) self.filterer.set_search("three") # info1 now matches the search, it should be added # info3 matched the search before and now, so it should be changed self.update_info(self.info1, u'three') self.check_changed_filter([], infos, [], [self.info1], [self.info3], []) # info1 no longer matches the search, it should be removed # info3 matched the search before and now, so it should be changed self.update_info(self.info1, u'one') self.check_changed_filter([], infos, [], [], [self.info3], [self.info1]) def test_remove(self): self.filterer.filter_initial_list([self.info1, self.info2]) self.filterer.set_search("two") # only info2 matches the search, so removed should only include it self.check_changed_filter([], [], [self.info1, self.info2], [], [], [self.info2])