def test_negative_filter(self): following = RelationshipStatus.objects.following() blocking = RelationshipStatus.objects.blocking() # create some groups to filter from django.contrib.auth.models import Group beatles = Group.objects.create(name='beatles') john_yoko = Group.objects.create(name='john_yoko') characters = Group.objects.create(name='characters') self.walrus.groups.add(characters) self.john.groups.add(beatles) self.john.groups.add(john_yoko) self.paul.groups.add(beatles) self.yoko.groups.add(john_yoko) self.yoko.groups.add(characters) group_qs = Group.objects.all().order_by('name') # groups people paul blocks are *not* in (yoko & walrus) # since john is in the john_yoko group, just characters will show up paul_blocking_groups = negative_filter( group_qs, self.paul.relationships.blocking(), 'user') self.assertQuerysetEqual(paul_blocking_groups, [characters]) # block yoko and no groups self.paul.relationships.add(self.yoko, blocking) paul_blocking_groups = negative_filter( group_qs, self.paul.relationships.blocking(), 'user') self.assertQuerysetEqual(paul_blocking_groups, []) # block walrus - everyone is blocked, no groups self.paul.relationships.add(self.walrus, blocking) paul_blocking_groups = negative_filter( group_qs, self.paul.relationships.blocking(), 'user') self.assertQuerysetEqual(paul_blocking_groups, []) # unblock john and we'll get beatles self.paul.relationships.remove(self.john, blocking) paul_blocking_groups = negative_filter( group_qs, self.paul.relationships.blocking(), 'user') self.assertQuerysetEqual(paul_blocking_groups, [beatles]) # unblock yoko self.paul.relationships.remove(self.yoko, blocking) paul_blocking_groups = negative_filter( group_qs, self.paul.relationships.blocking(), 'user') self.assertQuerysetEqual(paul_blocking_groups, [beatles, john_yoko]) # unblock walrus and we have them all self.paul.relationships.remove(self.walrus, blocking) paul_blocking_groups = negative_filter( group_qs, self.paul.relationships.blocking(), 'user') self.assertQuerysetEqual(paul_blocking_groups, [beatles, characters, john_yoko])
def unblocked_content(qs, user): return negative_filter(qs, user.relationships.blocking())