def test_thows_if_client_id_is_none(self): hit = False try: experiments = bernoulli.get_experiments() except: hit = True self.assertTrue(hit)
def test_handles_success(self): @urlmatch(netloc=r'(.*\.)?bernoulli.herokuapp.com$', path='/client/api/experiments/') def get_experiments_mock(url, request): return { 'status': 200, 'content': json.dumps({ 'status': 'ok', 'value': [{ 'id': 32, }], }) } with HTTMock(get_experiments_mock): experiments = bernoulli.get_experiments(client_id="1", experiment_ids=["1234"], user_id='s59') self.assertEqual(1, len(experiments)) self.assertEqual(32, experiments[0]['id'])
def test_handles_failure(self): @urlmatch(netloc=r'(.*\.)?bernoulli.herokuapp.com$', path='/client/api/experiments/') def get_experiments_mock(url, request): self.assertEqual(url[3], 'experimentIds=1234&bucketIfNecessary=True&userId=s59&clientId=1') return { 'status': 200, 'content': json.dumps({ 'status': 'error', 'message': 'invalid clientId', }) } with HTTMock(get_experiments_mock): threw = False try: experiments = bernoulli.get_experiments(client_id="1", experiment_ids=["1234"], user_id="s59") except: threw = True self.assertTrue(threw)
def render(self, context): #if self not in context.render_context: # Get variant from server request = self.request.resolve(context) is_a_bot = False user_id = request.session.get('bernoulli_id', None) if request.user.is_anonymous() else request.user.id experiment = None if not user_id: is_a_bot = self.is_bot(request.META['HTTP_USER_AGENT']) if not is_a_bot: experiments = bernoulli.get_experiments( client_id=settings.BERNOULLI_CLIENT_ID, experiment_ids=self.experiment_id, user_id=user_id, ) experiment = None for e in experiments: if e['id'] == self.experiment_id: experiment = e break if user_id is None and experiment is not None: # save user id to session for use later request.session['bernoulli_id'] = experiment['user_id'] output = '' for variant, nodelist, is_control in self.variant_nodelists: if variant is None: # Just render this, it is not in a variant block output += nodelist.render(context) elif is_control and is_a_bot: output += nodelist.render(context) elif experiment is not None and variant == experiment['variant']: output += nodelist.render(context) return output