import type { RefObject } from 'react';
import { render, waitFor } from '@testing-library/react';
import { vi } from 'vitest';
import { withAccess } from '~/tests/utils';
import type { RestrictedContentRef } from '../RestrictedContent';
import Paywall from './index';
describe('', () => {
afterEach(() => {
vi.clearAllMocks();
});
it('should create paywall at start', () => {
const createPaywallMock = vi.fn();
const createFactoryMock = vi.fn().mockReturnValue({
createPaywall: createPaywallMock,
once: vi.fn(),
off: vi.fn(),
});
render(withAccess(, {
createFactory: createFactoryMock,
}));
expect(createFactoryMock).toHaveBeenCalled();
expect(createPaywallMock).toHaveBeenCalled();
});
it('should set listener on identityAvailable event', () => {
const onceMock = vi.fn();
const createFactoryMock = vi.fn().mockReturnValue({
createPaywall: vi.fn(),
once: onceMock,
off: vi.fn(),
});
render(withAccess(, {
createFactory: createFactoryMock,
}));
expect(createFactoryMock).toHaveBeenCalled();
expect(onceMock)
.toHaveBeenCalledWith('identityAvailable', expect.any(Function));
});
it('should create paywall with given properties', () => {
const contentRef = {
current: {
contentRef: { current: 'blabla' } as RefObject,
mode: 'excerpt',
percent: 96,
},
} as RefObject;
const createPaywallMock = vi.fn();
const createFactoryMock = vi.fn().mockReturnValue({
createPaywall: createPaywallMock,
once: vi.fn(),
off: vi.fn(),
});
render(withAccess(, {
createFactory: createFactoryMock,
}));
expect(createFactoryMock).toHaveBeenCalled();
expect(createPaywallMock).toHaveBeenCalledWith({
pageType: 'premium',
target: expect.anything(),
content: 'blabla',
mode: 'excerpt',
percent: 96,
});
});
it('should recreate paywall if cookies_enabled has changed', async () => {
const createPaywallMock = vi.fn();
const config = { cookies_enabled: false };
const createFactoryMock = vi.fn().mockReturnValue({
createPaywall: createPaywallMock,
once: vi.fn(),
off: vi.fn(),
});
const { rerender } = render(withAccess(, {
createFactory: createFactoryMock,
config,
}));
expect(createFactoryMock).toHaveBeenCalled();
expect(createPaywallMock).toHaveBeenCalled();
config.cookies_enabled = true;
rerender(withAccess(, {
createFactory: createFactoryMock,
config,
}));
await waitFor(() => expect(createPaywallMock).toHaveBeenCalledTimes(2));
await waitFor(() => expect(createFactoryMock).toHaveBeenCalledTimes(2));
});
describe('Premium content', () => {
it('should render', () => {
const { container } = render();
expect(container.querySelectorAll('#test').length).toBe(1);
});
it('should render without an id set', () => {
const { container } = render();
expect(container.querySelectorAll('.poool-widget').length).toBe(1);
});
});
});