Ghost/apps/comments-ui/test/e2e/cta.test.ts

102 lines
3.2 KiB
TypeScript

import {MockedApi, initialize} from '../utils/e2e';
import {expect, test} from '@playwright/test';
test.describe('CTA', async () => {
test('Shows CTA when not logged in', async ({page}) => {
const mockedApi = new MockedApi({});
mockedApi.addComments(2);
const {frame} = await initialize({
mockedApi,
page,
publication: 'Publisher Weekly'
});
const ctaBox = await frame.getByTestId('cta-box');
await expect(ctaBox).toBeVisible();
await expect(ctaBox).toContainText('Join the discussion');
await expect(ctaBox).toContainText('Become a member of Publisher Weekly to start commenting');
await expect(ctaBox).toContainText('Sign in');
// Does not show the reply buttons if not logged in
const replyButton = frame.getByTestId('reply-button');
await expect(replyButton).toHaveCount(0);
// Does not show the main form
const form = frame.getByTestId('form');
await expect(form).toHaveCount(0);
});
test('Shows different CTA if no comments', async ({page}) => {
const mockedApi = new MockedApi({});
const {frame} = await initialize({
mockedApi,
page,
publication: 'Publisher Weekly'
});
const ctaBox = await frame.getByTestId('cta-box');
await expect(ctaBox).toBeVisible();
await expect(ctaBox).toContainText('Start the conversation');
});
test('Shows CTA when logged in, but not a paid member and comments are paid only', async ({page}) => {
const mockedApi = new MockedApi({});
mockedApi.addComments(2);
mockedApi.setMember({
status: 'free'
});
const {frame} = await initialize({
mockedApi,
page,
publication: 'Publisher Weekly',
commentsEnabled: 'paid'
});
const ctaBox = await frame.getByTestId('cta-box');
await expect(ctaBox).toBeVisible();
await expect(ctaBox).toContainText('Join the discussion');
await expect(ctaBox).toContainText('Become a paid member of Publisher Weekly to start commenting');
// Don't show sign in button
await expect(ctaBox).not.toContainText('Sign in');
// No replies or comments possible
const replyButton = frame.getByTestId('reply-button');
await expect(replyButton).toHaveCount(0);
const form = frame.getByTestId('form');
await expect(form).toHaveCount(0);
});
test('No CTA when logged in', async ({page}) => {
const mockedApi = new MockedApi({});
mockedApi.addComments(2);
mockedApi.setMember({
status: 'free'
});
const {frame} = await initialize({
mockedApi,
page,
publication: 'Publisher Weekly'
});
const ctaBox = await frame.getByTestId('cta-box');
await expect(ctaBox).not.toBeVisible();
// No replies or comments possible
const replyButton = frame.getByTestId('reply-button');
await expect(replyButton).toHaveCount(2);
const form = frame.getByTestId('form');
await expect(form).toHaveCount(1);
});
});