Repository URL to install this package:
|
Version:
8.0.0 ▾
|
@doodle/components
/
src
/
components
/
structure
/
CreatePollMenuDropdown
/
CreatePollMenuDropdown.spec.js
|
|---|
import React from 'react';
import { render, screen, fireEvent, cleanup } from '@testing-library/react';
import CreatePollMenuDropdown from './CreatePollMenuDropdown';
const windowLocationBackup = window.location;
const userData = {
data: {
name: 'Rebecca Black',
email: 'rebecca.black@friday.com',
avatarSmallUrl:
'https://i.auto-bild.de/ir_img/2/4/6/9/0/2/3/FRIDAY-Kfz-Versicherung-Logo-474x316-505dbcedca2fd865.jpg',
accessToken: 'abc123',
premium: {
active: {
domain: 'myCustomDomain',
},
},
},
loading: false,
isEligibleForFreeTrial: true,
};
describe('CreatePollMenuDropdown', () => {
const onClickCreatePoll = jest.fn();
const onClickCreateOneOnOne = jest.fn();
const onClickCreateSurvey = jest.fn();
const onClickCreateBookableCalendar = jest.fn();
const trackingClient = { track: jest.fn() };
afterEach(cleanup);
beforeAll(() => {
delete window.location;
window.location = {
assign: jest.fn(),
};
});
beforeEach(() => {
jest.resetAllMocks();
window.location.assign.mockReset();
trackingClient.track.mockReset();
});
afterAll(() => {
window.location = windowLocationBackup;
});
it('should only render a create button (no dropdown menu) if the user is not logged in', () => {
render(<CreatePollMenuDropdown user={null} />);
const anchor = screen.getByTestId('navigation-menu-create-date-poll');
expect(anchor.href).toContain('/create');
});
it('should call onClickCreatePoll', () => {
render(<CreatePollMenuDropdown onClickCreatePoll={onClickCreatePoll} user={userData} />);
fireEvent.click(screen.getByRole('button'));
fireEvent.click(screen.getByTestId('navigation-menu-create-date-poll'));
expect(onClickCreatePoll).toHaveBeenCalledTimes(1);
});
it('should call onClickCreateOneOnOne', () => {
render(<CreatePollMenuDropdown onClickCreateOneOnOne={onClickCreateOneOnOne} user={userData} />);
fireEvent.click(screen.getByRole('button'));
fireEvent.click(screen.getByTestId('navigation-menu-create-d11'));
expect(onClickCreateOneOnOne).toHaveBeenCalledTimes(1);
});
it('should call onClickCreateSurvey', () => {
render(<CreatePollMenuDropdown onClickCreateSurvey={onClickCreateSurvey} user={userData} />);
fireEvent.click(screen.getByRole('button'));
fireEvent.click(screen.getByTestId('navigation-menu-create-text-poll'));
expect(onClickCreateSurvey).toHaveBeenCalledTimes(1);
});
it('should call onClickCreateBookableCalendar', () => {
render(<CreatePollMenuDropdown onClickCreateBookableCalendar={onClickCreateBookableCalendar} user={userData} />);
fireEvent.click(screen.getByRole('button'));
fireEvent.click(screen.getByTestId('navigation-menu-create-bookable-calendar'));
expect(onClickCreateBookableCalendar).toHaveBeenCalledTimes(1);
});
it('should use target _blank when an absolute url is supplied as baseUrl', () => {
render(<CreatePollMenuDropdown user={userData} baseUrl="https://staging.doodle-test.com" />);
fireEvent.click(screen.getByRole('button'));
expect(screen.getByTestId('navigation-menu-create-date-poll').target).toBe('_blank');
expect(screen.getByTestId('navigation-menu-create-d11').target).toBe('_blank');
expect(screen.getByTestId('navigation-menu-create-text-poll').target).toBe('_blank');
expect(screen.getByTestId('navigation-menu-create-bookable-calendar').target).toBe('_blank');
});
it('should not use target _blank when there is an empty baseUrl (allowing relative navigation)', () => {
render(<CreatePollMenuDropdown user={userData} baseUrl="" />);
fireEvent.click(screen.getByRole('button'));
expect(screen.getByTestId('navigation-menu-create-date-poll').target).toBeFalsy();
expect(screen.getByTestId('navigation-menu-create-d11').target).toBeFalsy();
expect(screen.getByTestId('navigation-menu-create-text-poll').target).toBeFalsy();
expect(screen.getByTestId('navigation-menu-create-bookable-calendar').target).toBeFalsy();
});
it('should call trackingClient.track on BC click', () => {
render(
<CreatePollMenuDropdown
user={userData}
trackingClient={trackingClient}
onClickCreatePoll={onClickCreatePoll}
onClickCreateOneOnOne={onClickCreateOneOnOne}
onClickCreateSurvey={onClickCreateSurvey}
onClickCreateBookableCalendar={onClickCreateBookableCalendar}
/>
);
fireEvent.click(screen.getByRole('button'));
fireEvent.click(screen.getByTestId('navigation-menu-create-bookable-calendar'));
expect(trackingClient.track).toHaveBeenCalledWith({
trackingIntent: {
track: {
event: 'Click Create Bookable Calendar',
properties: { category: 'Global Header' },
type: 'user Interaction',
},
},
});
});
it('should call trackingClient.track on 1:1 click', () => {
render(
<CreatePollMenuDropdown
user={userData}
trackingClient={trackingClient}
onClickCreatePoll={onClickCreatePoll}
onClickCreateOneOnOne={onClickCreateOneOnOne}
onClickCreateSurvey={onClickCreateSurvey}
onClickCreateBookableCalendar={onClickCreateBookableCalendar}
/>
);
fireEvent.click(screen.getByRole('button'));
fireEvent.click(screen.getByTestId('navigation-menu-create-d11'));
expect(trackingClient.track).toHaveBeenCalledWith({
trackingIntent: {
track: {
event: 'Click Create D11',
properties: { category: 'Global Header' },
type: 'user Interaction',
},
},
});
});
it('should call trackingClient.track on survey click', () => {
render(
<CreatePollMenuDropdown
user={userData}
trackingClient={trackingClient}
onClickCreatePoll={onClickCreatePoll}
onClickCreateOneOnOne={onClickCreateOneOnOne}
onClickCreateSurvey={onClickCreateSurvey}
onClickCreateBookableCalendar={onClickCreateBookableCalendar}
/>
);
fireEvent.click(screen.getByRole('button'));
fireEvent.click(screen.getByTestId('navigation-menu-create-text-poll'));
expect(trackingClient.track).toHaveBeenCalledWith({
trackingIntent: {
track: {
event: 'Click Create Text Poll',
properties: { category: 'Global Header' },
type: 'user Interaction',
},
},
});
});
it('should call trackingClient.track on date click', () => {
render(
<CreatePollMenuDropdown
user={userData}
trackingClient={trackingClient}
onClickCreatePoll={onClickCreatePoll}
onClickCreateOneOnOne={onClickCreateOneOnOne}
onClickCreateSurvey={onClickCreateSurvey}
onClickCreateBookableCalendar={onClickCreateBookableCalendar}
/>
);
fireEvent.click(screen.getByRole('button'));
fireEvent.click(screen.getByTestId('navigation-menu-create-date-poll'));
expect(trackingClient.track).toHaveBeenCalledWith({
trackingIntent: {
track: {
event: 'Click Create Date Poll',
properties: { category: 'Global Header' },
type: 'user Interaction',
},
},
});
});
});