def test_ab_current_experiments_dnt(self): """Check if calculating current experiments respects DNT""" cookie = 'exp=ui-change-v1; Path=/' with webcompat.app.test_request_context('/', method='GET', environ_base={ 'HTTP_COOKIE': cookie, 'HTTP_DNT': '1' }): user = mock.Mock() user.user_id = 'user_id' flask.g.user = user webcompat.app.config['AB_EXPERIMENTS'] = { 'exp': { 'variations': { 'ui-change-v1': (0, 100) }, 'max-age': 86400 } } c = ab_current_experiments() self.assertEqual(c, {})
def test_ab_current_experiments_selector(self): """Check if current experiments selects the expected variations""" with webcompat.app.test_request_context('/', method='GET'): user = mock.Mock() user.user_id = 'user_id' flask.g.user = user webcompat.app.config['AB_EXPERIMENTS'] = { 'exp-1': { 'variations': { 'ui-change-v1': (0, 20), 'ui-change-v2': (20, 60), 'ui-change-v3': (60, 100) }, 'max-age': 604800 }, 'exp-2': { 'variations': { 'backend-change-v1': (0, 50), 'novariation': (50, 100) }, 'max-age': 86400 } } with mock.patch('webcompat.helpers.random.random') as mock_random: mock_random.return_value = 0.4 expected_experiments = { 'exp-1': 'ui-change-v2', 'exp-2': 'backend-change-v1' } self.assertEqual(ab_current_experiments(), expected_experiments)
def before_request(): """Set parameters in g before each request.""" g.user = None if 'user_id' in session: g.user = User.query.get(session['user_id']) g.referer = get_referer(request) or url_for('index') g.request_headers = request.headers request.nonce = secrets.token_hex(20) # Set AB testing values g.current_experiments = ab_current_experiments()