def test_foreignkey_remove_link(self): """ Ensure that a ForeignKey Filter will turn into a 'remove' link when an item has been selected. """ qs = Book.objects.all() data = MultiValueDict() filter1 = ForeignKeyFilter('genre', Book, data) choices = filter1.get_choices(qs) choice = choices[0] filter2 = ForeignKeyFilter('genre', Book, choice.params) qs_filtered = filter2.apply_filter(qs) choices2 = filter2.get_choices(qs_filtered) # Should have one item self.assertEqual(1, len(choices2)) self.assertEqual(choices2[0].link_type, FILTER_REMOVE) self.assertEqual(choices2[0].label, choice.label) # 'Clicking' should remove filtering filter3 = ForeignKeyFilter('genre', Book, choices2[0].params) qs_reverted = filter3.apply_filter(qs) self.assertEqual(qs, qs_reverted)
def test_foreignkey_remove_link(self): """ Ensure that a ForeignKey Filter will turn into a 'remove' link when an item has been selected. """ qs = Book.objects.all() data = MultiValueDict() filter1 = ForeignKeyFilter('genre', Book, data) choices = filter1.get_choices(qs) choice = choices[0] filter2 = ForeignKeyFilter('genre', Book, choice.params) qs_filtered = filter2.apply_filter(qs) choices2 = filter2.get_choices(qs_filtered) # Should have one item self.assertEqual(1, len(choices2)) self.assertEqual(choices2[0].link_type, FILTER_REMOVE) self.assertEqual(choices2[0].label, choice.label) # 'Clicking' should remove filtering filter3 = ForeignKeyFilter('genre', Book, choices2[0].params) qs_reverted = filter3.apply_filter(qs) self.assertEqual(qs, qs_reverted)
def test_foreignkey_params_produced(self): """ A ForeignKey filter shoud produce params that cause the query to be limited by that filter. """ qs = Book.objects.all() data = MultiValueDict() filter1 = ForeignKeyFilter('genre', Book, data) choices = filter1.get_choices(qs) # If we use the params from e.g. the first choice, that should produce a # filtered qs when fed back in (i.e. when we 'click' on that option we # should get a filter on it). reached = False for choice in choices: reached = True filter2 = ForeignKeyFilter('genre', Book, choice.params) qs_filtered = filter2.apply_filter(qs) self.assertEqual(len(qs_filtered), choice.count) for book in qs_filtered: self.assertEqual(text_type(book.genre), choice.label) self.assertTrue(reached)
def test_foreignkey_params_produced(self): """ A ForeignKey filter shoud produce params that cause the query to be limited by that filter. """ qs = Book.objects.all() data = MultiValueDict() filter1 = ForeignKeyFilter('genre', Book, data) choices = filter1.get_choices(qs) # If we use the params from e.g. the first choice, that should produce a # filtered qs when fed back in (i.e. when we 'click' on that option we # should get a filter on it). reached = False for choice in choices: reached = True filter2 = ForeignKeyFilter('genre', Book, choice.params) qs_filtered = filter2.apply_filter(qs) self.assertEqual(len(qs_filtered), choice.count) for book in qs_filtered: self.assertEqual(unicode(book.genre), choice.label) self.assertTrue(reached)