Пример #1
0
 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])
Пример #2
0
 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')
Пример #3
0
 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])
Пример #4
0
 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')
Пример #5
0
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])
Пример #6
0
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])