def test_exclusions(self): condition_set = 'gargoyle.builtins.UserConditionSet(auth.user)' switch = Switch.objects.create( key='test', status=SELECTIVE, ) switch = gargoyle['test'] switch.add_condition( condition_set=condition_set, field_name='percent', condition='0-50', exclude=True, ) switch.add_condition( condition_set=condition_set, field_name='username', condition='foo', ) user = User(pk=5, username='******') self.assertFalse(gargoyle.is_active('test', user)) user = User(pk=8771, username='******') self.assertTrue(gargoyle.is_active('test', user))
def test_disable(self): switch = Switch.objects.create(key='test') switch = gargoyle['test'] switch.status = DISABLED switch.save() self.assertFalse(gargoyle.is_active('test')) self.assertFalse(gargoyle.is_active('test', self.user))
def test_global(self): condition_set = 'gargoyle.builtins.UserConditionSet(auth.user)' switch = Switch.objects.create( key='test', status=SELECTIVE, ) switch = gargoyle['test'] self.assertTrue(gargoyle.is_active('test')) self.assertTrue(gargoyle.is_active('test', self.user)) switch.status = GLOBAL switch.save() self.assertTrue(gargoyle.is_active('test')) self.assertTrue(gargoyle.is_active('test', self.user))
def test_anonymous_user(self): condition_set = 'gargoyle.builtins.UserConditionSet(auth.user)' switch = Switch.objects.create(key='test') switch = gargoyle['test'] switch.status = SELECTIVE switch.save() user = AnonymousUser() self.assertTrue(gargoyle.is_active('test', user)) switch.add_condition( condition_set=condition_set, field_name='percent', condition='1-10', ) self.assertFalse(gargoyle.is_active('test', user)) switch.clear_conditions(condition_set=condition_set) self.assertTrue(gargoyle.is_active('test', user)) switch.add_condition( condition_set=condition_set, field_name='is_anonymous', condition='1', ) self.assertTrue(gargoyle.is_active('test', user)) switch.add_condition( condition_set=condition_set, field_name='percent', condition='1-10', ) self.assertTrue(gargoyle.is_active('test', user))
def test_user(self): condition_set = 'gargoyle.builtins.UserConditionSet(auth.user)' # we need a better API for this (model dict isnt cutting it) switch = Switch.objects.create( key='test', status=SELECTIVE, ) switch = gargoyle['test'] switch.add_condition( condition_set=condition_set, field_name='percent', condition='0-50', ) user = User(pk=5) self.assertTrue(gargoyle.is_active('test', user)) user = User(pk=8771) self.assertFalse(gargoyle.is_active('test', user))
def test_expiration(self): switch = Switch.objects.create(key='test') switch = gargoyle['test'] switch.status = DISABLED switch.save() self.assertFalse(gargoyle.is_active('test')) Switch.objects.filter(key='test').update(value={}, status=SELECTIVE) # cache shouldn't have expired self.assertFalse(gargoyle.is_active('test')) # in memory cache shouldnt have expired cache.delete(gargoyle.cache_key) self.assertFalse(gargoyle.is_active('test')) # any request should expire the in memory cache self.client.get('/') self.assertTrue(gargoyle.is_active('test'))
def test_ip_address(self): condition_set = 'gargoyle.builtins.IPAddressConditionSet' switch = Switch.objects.create( key='test', status=SELECTIVE, ) switch = gargoyle['test'] request = HttpRequest() request.META['REMOTE_ADDR'] = '192.168.1.1' self.assertTrue(gargoyle.is_active('test', request)) switch.add_condition( condition_set=condition_set, field_name='ip_address', condition='192.168.1.1', ) self.assertTrue(gargoyle.is_active('test', request)) switch.clear_conditions(condition_set=condition_set) switch.add_condition( condition_set=condition_set, field_name='ip_address', condition='127.0.0.1', ) self.assertFalse(gargoyle.is_active('test', request)) switch.clear_conditions(condition_set=condition_set) self.assertTrue(gargoyle.is_active('test', request)) switch.add_condition( condition_set=condition_set, field_name='percent', condition='50-100', ) self.assertTrue(gargoyle.is_active('test', request)) switch.clear_conditions(condition_set=condition_set) switch.add_condition( condition_set=condition_set, field_name='percent', condition='0-50', ) self.assertFalse(gargoyle.is_active('test', request))
def wrapped(request, *args, **kwargs): if not gargoyle.is_active(key, request): raise Http404('Switch \'%s\' is not active' % key) return func(request, *args, **kwargs)