Ghost/ghost/admin/tests/acceptance/editor/post-email-preview-test.js

115 lines
4.8 KiB
JavaScript

import loginAsRole from '../../helpers/login-as-role';
import {click, find, findAll} from '@ember/test-helpers';
import {clickTrigger, selectChoose} from 'ember-power-select/test-support/helpers';
import {enableMailgun} from '../../helpers/mailgun';
import {expect} from 'chai';
import {setupApplicationTest} from 'ember-mocha';
import {setupMirage} from 'ember-cli-mirage/test-support';
import {visit} from '../../helpers/visit';
describe('Acceptance: Post email preview', function () {
let hooks = setupApplicationTest();
setupMirage(hooks);
beforeEach(async function () {
this.server.loadFixtures();
});
it('should hide newsletters list and paid/free select by default', async function () {
await loginAsRole('Administrator', this.server);
const post = this.server.create('post', {status: 'draft'});
await visit(`/editor/post/${post.id}`);
// go to email preview modal
expect(find('[data-test-button="publish-preview"]'), 'Preview').to.exist;
await click('[data-test-button="publish-preview"]');
expect(find('[data-test-button="email-preview"]')).to.exist;
await click('[data-test-button="email-preview"]');
expect(find('[data-test-email-preview-newsletter-select]')).not.to.exist;
expect(find('[data-test-email-preview-segment-select]')).not.to.exist;
});
it('can select newsletter and paid/free member for preview', async function () {
enableMailgun(this.server);
await loginAsRole('Administrator', this.server);
const post = this.server.create('post', {status: 'draft'});
this.server.create('newsletter', {
name: 'Awesome newsletter',
slug: 'awesome-newsletter'
});
await visit(`/editor/post/${post.id}`);
// go to email preview modal
expect(find('[data-test-button="publish-preview"]'), 'Preview').to.exist;
await click('[data-test-button="publish-preview"]');
expect(find('[data-test-button="email-preview"]')).to.exist;
await click('[data-test-button="email-preview"]');
expect(find('[data-test-email-preview-newsletter-select]')).to.exist;
expect(find('[data-test-email-preview-segment-select]')).not.to.exist;
// check newsletters options
await clickTrigger('[data-test-email-preview-newsletter-select-section]');
const options = findAll('.ember-power-select-option');
expect(options.length).to.equal(2);
expect(options[0].textContent.trim()).to.equal('Default newsletter');
expect(options[1].textContent.trim()).to.equal('Awesome newsletter');
await selectChoose('[data-test-email-preview-newsletter-select]', 'Awesome newsletter');
// send chosen newsletter type on backend
await click(find('[data-test-button="post-preview-test-email"]'));
await click(find('[data-test-button="send-test-email"]'));
const [lastRequest] = this.server.pretender.handledRequests.slice(-1);
const requestBody = JSON.parse(lastRequest.requestBody);
expect(requestBody.newsletter).to.equal('awesome-newsletter');
expect(requestBody.memberSegment).to.equal('status:free');
});
it('can select paid/free member for preview', async function () {
enableMailgun(this.server);
await loginAsRole('Administrator', this.server);
const post = this.server.create('post', {status: 'draft'});
this.server.create('setting', {
group: 'site',
key: 'paid_members_enabled',
value: true
});
await visit(`/editor/post/${post.id}`);
// go to email preview modal
await click('[data-test-button="publish-preview"]');
await click('[data-test-button="email-preview"]');
expect(find('[data-test-email-preview-newsletter-select]')).not.to.exist;
expect(find('[data-test-email-preview-segment-select]')).to.exist;
// check segments options
await clickTrigger('[data-test-email-preview-segment-select-section]');
const options = findAll('.ember-power-select-option');
expect(options.length).to.equal(2);
expect(options[0].textContent.trim()).to.equal('Free member');
expect(options[1].textContent.trim()).to.equal('Paid member');
// can switch free/paid member in preview
await selectChoose('[data-test-email-preview-segment-select]', 'Paid member');
// send chosen segment on backend
await click(find('[data-test-button="post-preview-test-email"]'));
await click(find('[data-test-button="send-test-email"]'));
const [lastRequest] = this.server.pretender.handledRequests.slice(-1);
const requestBody = JSON.parse(lastRequest.requestBody);
expect(requestBody.memberSegment).to.equal('status:-free');
});
});