@unifygtm/intent-client
Version:
JavaScript client for interacting with the Unify Intent API in the browser.
62 lines (54 loc) • 2.14 kB
text/typescript
import { DeepMockProxy, mockDeep, mockReset } from 'jest-mock-extended';
import Cookies from 'js-cookie';
import { CookieStorageService } from '../../../client/storage';
import {
encodeForStorage,
getCurrentTopLevelDomain,
} from '../../../client/storage/utils';
import { TEST_ANONYMOUS_USER_ID, TEST_WRITE_KEY } from '../../mocks/data';
jest.mock('js-cookie', () => ({
__esModule: true,
default: mockDeep<any>(),
}));
export const CookiesMock = Cookies as unknown as DeepMockProxy<typeof Cookies>;
describe('CookieStorageService', () => {
beforeEach(() => {
mockReset(CookiesMock);
});
describe('get', () => {
it('gets the value from underlying Cookies storage', () => {
const storageService = new CookieStorageService(TEST_WRITE_KEY);
storageService.get('anonymousUserId');
expect(CookiesMock.get).toHaveBeenCalledWith(
encodeForStorage(`${TEST_WRITE_KEY}_anonymousUserId`),
);
});
it('works with non-latin-1 characters', () => {
const storageService = new CookieStorageService('ő');
storageService.get('anonymousUserId');
expect(CookiesMock.get).toHaveBeenCalledWith(
encodeForStorage(`ő_anonymousUserId`),
);
});
});
describe('set', () => {
it('sets the value in the underlying Cookies storage', () => {
const storageService = new CookieStorageService(TEST_WRITE_KEY);
storageService.set('anonymousUserId', TEST_ANONYMOUS_USER_ID);
expect(CookiesMock.set).toHaveBeenCalledWith(
encodeForStorage(`${TEST_WRITE_KEY}_anonymousUserId`),
encodeForStorage(TEST_ANONYMOUS_USER_ID),
{ domain: `.${getCurrentTopLevelDomain()}`, expires: 365 },
);
});
it('works with non-latin-1 characters', () => {
const storageService = new CookieStorageService('ő');
storageService.set('anonymousUserId', TEST_ANONYMOUS_USER_ID);
expect(CookiesMock.set).toHaveBeenCalledWith(
encodeForStorage(`ő_anonymousUserId`),
encodeForStorage(TEST_ANONYMOUS_USER_ID),
{ domain: `.${getCurrentTopLevelDomain()}`, expires: 365 },
);
});
});
});