1 | import React from 'react';
|
2 | import { render, cleanup } from '@testing-library/react';
|
3 | import useExperiment from './useExperiment';
|
4 | import { StaticRouter } from 'react-router';
|
5 | import { CookiesProvider } from 'react-cookie';
|
6 | import Cookies from 'universal-cookie';
|
7 | import ExperimentsProvider from './ExperimentsProvider';
|
8 | import AnalyticsProvider from '../analytics/AnalyticsProvider';
|
9 | import { ConfigProvider } from '../components/ConfigProvider';
|
10 | import { ChannelProvider } from '../components/ChannelContext';
|
11 | import { ChannelHandler } from '../ChannelHandler/ChannelHandler';
|
12 | import { channels, selectedChannel } from '../test-utils/variables';
|
13 | import { HelmetProvider } from 'react-helmet-async';
|
14 | afterEach(cleanup);
|
15 |
|
16 | const Experiment = () => {
|
17 | const first = useExperiment('test', 1);
|
18 | const second = useExperiment('test', 2);
|
19 |
|
20 | if (first) {
|
21 | return <div>First</div>;
|
22 | } else if (second) {
|
23 | return <div>Second</div>;
|
24 | } else {
|
25 | return <div>Original</div>;
|
26 | }
|
27 | };
|
28 |
|
29 | const setup = ({ cookies }) => {
|
30 | const channelHandler = new ChannelHandler({
|
31 | channels,
|
32 | selectedChannel
|
33 | });
|
34 | return render(
|
35 | <StaticRouter>
|
36 | <CookiesProvider cookies={cookies}>
|
37 | <HelmetProvider context={{}}>
|
38 | <ChannelProvider channelHandler={channelHandler}>
|
39 | <ConfigProvider config={{}}>
|
40 | <AnalyticsProvider config={{}}>
|
41 | <ExperimentsProvider>
|
42 | <Experiment />
|
43 | </ExperimentsProvider>
|
44 | </AnalyticsProvider>
|
45 | </ConfigProvider>
|
46 | </ChannelProvider>
|
47 | </HelmetProvider>
|
48 | </CookiesProvider>
|
49 | </StaticRouter>
|
50 | );
|
51 | };
|
52 |
|
53 | describe('experiments', () => {
|
54 | describe('a/b testing', () => {
|
55 | it('renders original if no cookie was set', () => {
|
56 | const cookies = new Cookies({});
|
57 | const { getByText } = setup({ cookies });
|
58 | expect(getByText('Original')).toBeTruthy();
|
59 | });
|
60 |
|
61 | it('renders a specific variant if that variant was selected', () => {
|
62 | const cookies = new Cookies({
|
63 | optimizeExperiment: 'test.2'
|
64 | });
|
65 | const { getByText } = setup({ cookies });
|
66 | expect(getByText('Second')).toBeTruthy();
|
67 | });
|
68 | });
|
69 | });
|