145 lines
4.2 KiB
JavaScript
145 lines
4.2 KiB
JavaScript
import helperObject, { AnalyticsHelper } from '../';
|
|
|
|
vi.mock('@amplitude/analytics-browser', () => ({
|
|
init: vi.fn(),
|
|
setUserId: vi.fn(),
|
|
identify: vi.fn(),
|
|
setGroup: vi.fn(),
|
|
groupIdentify: vi.fn(),
|
|
track: vi.fn(),
|
|
Identify: vi.fn(() => ({
|
|
set: vi.fn(),
|
|
})),
|
|
}));
|
|
|
|
describe('helperObject', () => {
|
|
it('should return an instance of AnalyticsHelper', () => {
|
|
expect(helperObject).toBeInstanceOf(AnalyticsHelper);
|
|
});
|
|
});
|
|
|
|
describe('AnalyticsHelper', () => {
|
|
let analyticsHelper;
|
|
beforeEach(() => {
|
|
analyticsHelper = new AnalyticsHelper({ token: 'test_token' });
|
|
});
|
|
|
|
describe('init', () => {
|
|
it('should initialize amplitude with the correct token', async () => {
|
|
await analyticsHelper.init();
|
|
expect(analyticsHelper.analytics).not.toBe(null);
|
|
});
|
|
|
|
it('should not initialize amplitude if token is not provided', async () => {
|
|
analyticsHelper = new AnalyticsHelper();
|
|
await analyticsHelper.init();
|
|
expect(analyticsHelper.analytics).toBe(null);
|
|
});
|
|
});
|
|
|
|
describe('identify', () => {
|
|
beforeEach(() => {
|
|
analyticsHelper.analytics = {
|
|
setUserId: vi.fn(),
|
|
identify: vi.fn(),
|
|
setGroup: vi.fn(),
|
|
groupIdentify: vi.fn(),
|
|
};
|
|
});
|
|
|
|
it('should call setUserId and identify on amplitude with correct arguments', () => {
|
|
analyticsHelper.identify({
|
|
id: 123,
|
|
email: 'test@example.com',
|
|
name: 'Test User',
|
|
avatar_url: 'avatar_url',
|
|
accounts: [{ id: 1, name: 'Account 1' }],
|
|
account_id: 1,
|
|
});
|
|
|
|
expect(analyticsHelper.analytics.setUserId).toHaveBeenCalledWith(
|
|
'user-123'
|
|
);
|
|
expect(analyticsHelper.analytics.identify).toHaveBeenCalled();
|
|
expect(analyticsHelper.analytics.setGroup).toHaveBeenCalledWith(
|
|
'company',
|
|
'account-1'
|
|
);
|
|
expect(analyticsHelper.analytics.groupIdentify).toHaveBeenCalled();
|
|
});
|
|
|
|
it('should call identify on amplitude without group', () => {
|
|
analyticsHelper.identify({
|
|
id: 123,
|
|
email: 'test@example.com',
|
|
name: 'Test User',
|
|
avatar_url: 'avatar_url',
|
|
accounts: [{ id: 1, name: 'Account 1' }],
|
|
account_id: 5,
|
|
});
|
|
|
|
expect(analyticsHelper.analytics.setGroup).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('should not call analytics methods if analytics is null', () => {
|
|
analyticsHelper.analytics = null;
|
|
analyticsHelper.identify({});
|
|
expect(analyticsHelper.analytics).toBe(null);
|
|
});
|
|
});
|
|
|
|
describe('track', () => {
|
|
beforeEach(() => {
|
|
analyticsHelper.analytics = { track: vi.fn() };
|
|
analyticsHelper.user = { id: 123 };
|
|
});
|
|
|
|
it('should call track on amplitude with correct arguments', () => {
|
|
analyticsHelper.track('Test Event', { prop1: 'value1', prop2: 'value2' });
|
|
expect(analyticsHelper.analytics.track).toHaveBeenCalledWith(
|
|
'Test Event',
|
|
{ prop1: 'value1', prop2: 'value2' }
|
|
);
|
|
});
|
|
|
|
it('should call track on amplitude with default properties', () => {
|
|
analyticsHelper.track('Test Event');
|
|
expect(analyticsHelper.analytics.track).toHaveBeenCalledWith(
|
|
'Test Event',
|
|
{}
|
|
);
|
|
});
|
|
|
|
it('should not call track on amplitude if analytics is not initialized', () => {
|
|
analyticsHelper.analytics = null;
|
|
analyticsHelper.track('Test Event', { prop1: 'value1', prop2: 'value2' });
|
|
expect(analyticsHelper.analytics).toBe(null);
|
|
});
|
|
});
|
|
|
|
describe('page', () => {
|
|
beforeEach(() => {
|
|
analyticsHelper.analytics = { track: vi.fn() };
|
|
});
|
|
|
|
it('should call the track method for pageview with the correct arguments', () => {
|
|
const pageName = 'home';
|
|
const properties = {
|
|
path: '/test',
|
|
name: 'home',
|
|
};
|
|
analyticsHelper.page(pageName, properties);
|
|
expect(analyticsHelper.analytics.track).toHaveBeenCalledWith(
|
|
'$pageview',
|
|
{ pageName: 'home', path: '/test', name: 'home' }
|
|
);
|
|
});
|
|
|
|
it('should not call analytics.track if analytics is null', () => {
|
|
analyticsHelper.analytics = null;
|
|
analyticsHelper.page('home');
|
|
expect(analyticsHelper.analytics).toBe(null);
|
|
});
|
|
});
|
|
});
|