UNPKG

2.67 kBJavaScriptView Raw
1import React from 'react';
2import { render, cleanup } from '@testing-library/react';
3import useExperiment from './useExperiment';
4import { StaticRouter } from 'react-router';
5import { CookiesProvider } from 'react-cookie';
6import Cookies from 'universal-cookie';
7import ExperimentsProvider from './ExperimentsProvider';
8import AnalyticsProvider from '../analytics/AnalyticsProvider';
9import { ConfigProvider } from '../components/ConfigProvider';
10import { ChannelProvider } from '../components/ChannelContext';
11import { ChannelHandler } from '../ChannelHandler/ChannelHandler';
12import { selectedChannel, channels } from '../test-utils/variables';
13import { HelmetProvider } from 'react-helmet-async';
14afterEach(cleanup);
15
16const Collector = ({ report, id, variant }) => {
17 const data = useExperiment(id, variant);
18 report(data);
19 return null;
20};
21
22const setup = ({ report, id, variant, cookies }) => {
23 const channelHandler = new ChannelHandler({
24 selectedChannel,
25 channels
26 });
27 return render(
28 <StaticRouter>
29 <CookiesProvider cookies={cookies}>
30 <HelmetProvider context={{}}>
31 <ChannelProvider channelHandler={channelHandler}>
32 <ConfigProvider config={{}}>
33 <AnalyticsProvider config={{}}>
34 <ExperimentsProvider>
35 <Collector report={report} id={id} variant={variant} />
36 </ExperimentsProvider>
37 </AnalyticsProvider>
38 </ConfigProvider>
39 </ChannelProvider>
40 </HelmetProvider>
41 </CookiesProvider>
42 </StaticRouter>
43 );
44};
45
46describe('useExperiment', () => {
47 it('returns false if no cookie is set', () => {
48 const cookies = new Cookies({});
49
50 const report = jest.fn();
51 setup({
52 cookies,
53 report,
54 id: null,
55 variant: null
56 });
57
58 expect(report).toHaveBeenCalledTimes(1);
59 expect(report).toHaveBeenCalledWith(false);
60 });
61
62 it('returns false if cookie does not match provided experiment and variant', () => {
63 const cookies = new Cookies({
64 optimizeExperiment: 'test.0'
65 });
66 const report = jest.fn();
67 setup({
68 cookies,
69 report,
70 id: 'test',
71 variant: 1
72 });
73
74 expect(report).toHaveBeenCalledTimes(1);
75 expect(report).toHaveBeenCalledWith(false);
76 });
77
78 it('returns true if cookie matches provided experiment and variant', () => {
79 const cookies = new Cookies({
80 optimizeExperiment: 'test.0'
81 });
82 const report = jest.fn();
83 setup({
84 cookies,
85 report,
86 id: 'test',
87 variant: 0
88 });
89
90 expect(report).toHaveBeenCalledTimes(1);
91 expect(report).toHaveBeenCalledWith(true);
92 });
93});