| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import {assert} from 'chai'; |
| import {isExperimentEnabled, SLO_EXPERIMENT} from './experiments.js'; |
| |
| |
| describe('isExperimentEnabled', () => { |
| it('throws error for unknown experiment', () => { |
| assert.throws(() => |
| isExperimentEnabled('unknown-exp', {displayName: 'jessan@google.com'})); |
| }); |
| |
| it('returns false if user not in experiment', () => { |
| const ineligibleUser = {displayName: 'example@example.com'}; |
| assert.isFalse(isExperimentEnabled(SLO_EXPERIMENT, ineligibleUser, {})); |
| }); |
| |
| it('returns false if no user provided', () => { |
| assert.isFalse(isExperimentEnabled(SLO_EXPERIMENT, undefined, {})); |
| }); |
| |
| it('returns true if user in experiment', () => { |
| const eligibleUser = {displayName: 'jessan@google.com'}; |
| assert.isTrue(isExperimentEnabled(SLO_EXPERIMENT, eligibleUser, {})); |
| }); |
| |
| it('is false if user in experiment has disabled it with URL', () => { |
| const eligibleUser = {displayName: 'jessan@google.com'}; |
| assert.isFalse(isExperimentEnabled( |
| SLO_EXPERIMENT, eligibleUser, {'e': '-slo'})); |
| }); |
| |
| it('ignores enabling experiments with URL', () => { |
| const ineligibleUser = {displayName: 'example@example.com'}; |
| assert.isFalse(isExperimentEnabled( |
| SLO_EXPERIMENT, ineligibleUser, {'e': 'slo'})); |
| }); |
| |
| it('ignores ineligible users disabling experiment with URL', () => { |
| const ineligibleUser = {displayName: 'example@example.com'}; |
| assert.isFalse(isExperimentEnabled( |
| SLO_EXPERIMENT, ineligibleUser, {'e': '-slo'})); |
| }); |
| |
| it('ignores invalid experiments in URL', () => { |
| const eligibleUser = {displayName: 'jessan@google.com'}; |
| // Leading comma, unknown experiment str, empty experiment str in |
| // middle, disable_str with no experiment, trailing comma |
| assert.isFalse(isExperimentEnabled( |
| SLO_EXPERIMENT, eligibleUser, {'e': ',unknown,-slo,,-,'})); |
| }); |
| |
| it('respects last instance when experiment repeated in URL', () => { |
| const eligibleUser = {displayName: 'jessan@google.com'}; |
| assert.isFalse(isExperimentEnabled( |
| SLO_EXPERIMENT, eligibleUser, {'e': 'slo,-slo'})); |
| assert.isTrue(isExperimentEnabled( |
| SLO_EXPERIMENT, eligibleUser, {'e': '-slo,slo'})); |
| }); |
| }); |