2021-03-22 17:08:59 -04:00
|
|
|
import { shallowMount } from '@vue/test-utils';
|
|
|
|
import { extendedWrapper } from 'helpers/vue_test_utils_helper';
|
2021-04-28 14:10:12 -04:00
|
|
|
import ExperimentComponent from '~/experimentation/components/gitlab_experiment.vue';
|
2021-03-22 17:08:59 -04:00
|
|
|
|
|
|
|
const defaultProps = { name: 'experiment_name' };
|
|
|
|
const defaultSlots = {
|
|
|
|
candidate: `<p>Candidate</p>`,
|
|
|
|
control: `<p>Control</p>`,
|
|
|
|
};
|
|
|
|
|
|
|
|
describe('ExperimentComponent', () => {
|
|
|
|
const oldGon = window.gon;
|
|
|
|
let wrapper;
|
|
|
|
|
|
|
|
const createComponent = (propsData = defaultProps, slots = defaultSlots) => {
|
|
|
|
wrapper = extendedWrapper(shallowMount(ExperimentComponent, { propsData, slots }));
|
|
|
|
};
|
|
|
|
|
|
|
|
const mockVariant = (expectedVariant) => {
|
|
|
|
window.gon = { experiment: { experiment_name: { variant: expectedVariant } } };
|
|
|
|
};
|
|
|
|
|
|
|
|
afterEach(() => {
|
|
|
|
wrapper.destroy();
|
|
|
|
wrapper = null;
|
|
|
|
window.gon = oldGon;
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('when variant and experiment is set', () => {
|
|
|
|
it('renders control when it is the active variant', () => {
|
|
|
|
mockVariant('control');
|
|
|
|
|
|
|
|
createComponent();
|
|
|
|
|
|
|
|
expect(wrapper.text()).toBe('Control');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('renders candidate when it is the active variant', () => {
|
|
|
|
mockVariant('candidate');
|
|
|
|
|
|
|
|
createComponent();
|
|
|
|
|
|
|
|
expect(wrapper.text()).toBe('Candidate');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('when variant or experiment is not set', () => {
|
|
|
|
it('renders the control slot when no variant is defined', () => {
|
|
|
|
mockVariant(undefined);
|
|
|
|
|
|
|
|
createComponent();
|
|
|
|
|
|
|
|
expect(wrapper.text()).toBe('Control');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('renders nothing when behavior is not set for variant', () => {
|
|
|
|
mockVariant('non-existing-variant');
|
|
|
|
|
|
|
|
createComponent(defaultProps, { control: `<p>First</p>`, other: `<p>Other</p>` });
|
|
|
|
|
|
|
|
expect(wrapper.text()).toBe('');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('renders nothing when there are no slots', () => {
|
|
|
|
mockVariant('control');
|
|
|
|
|
|
|
|
createComponent(defaultProps, {});
|
|
|
|
|
|
|
|
expect(wrapper.text()).toBe('');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|