mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-10 23:36:14 -05:00
Added Playwright member's actions tests (#15968)
refs TryGhost/Team#2371 - check that members can unsubscribe from newsletters by toggling preferences in their account settings - check that member can log out
This commit is contained in:
parent
aa706bc569
commit
88b056dc86
5 changed files with 137 additions and 3 deletions
|
@ -66,7 +66,7 @@
|
|||
</GhFormGroup>
|
||||
{{#if this.canShowSingleNewsletter}}
|
||||
<GhFormGroup class="gh-members-subscribed-checkbox mb0">
|
||||
<div class="flex justify-between items-center">
|
||||
<div class="flex justify-between items-center" data-test-member-settings-switch>
|
||||
<div>
|
||||
<h4 class="gh-setting-title m">Subscribed to newsletter</h4>
|
||||
<p class="gh-setting-desc">If disabled, member will <em>not</em> receive newsletter emails</p>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
{{#unless this.suppressionData.suppressed}}
|
||||
<div class="gh-member-newsletters">
|
||||
{{#each this.newsletters as |newsletter|}}
|
||||
<div class="gh-member-newsletter-row">
|
||||
<div class="gh-member-newsletter-row" data-test-member-settings-switch>
|
||||
<div>
|
||||
<h4 class="gh-member-newsletter-title">{{newsletter.name}}</h4>
|
||||
</div>
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
class="gh-input miw-100 form-text"
|
||||
value={{@data.newsletter.name}}
|
||||
placeholder="Weekly Roundup"
|
||||
data-test-newsletter-title-input
|
||||
{{on "input" (fn this.onInput "name")}}
|
||||
/>
|
||||
<GhErrorMessage @errors={{@data.newsletter.errors}} @property="name" />
|
||||
|
|
|
@ -68,7 +68,7 @@
|
|||
</div>
|
||||
</LinkTo>
|
||||
{{#if (feature 'sourceAttribution')}}
|
||||
<LinkTo class="gh-setting-group" @route="settings.analytics" data-test-nav="members-email">
|
||||
<LinkTo class="gh-setting-group" @route="settings.analytics" data-test-nav="members-analytics">
|
||||
<span class="green">{{svg-jar "chart"}}</span>
|
||||
<div>
|
||||
<h4>Analytics</h4>
|
||||
|
|
133
ghost/core/test/e2e-browser/portal/member-actions.spec.js
Normal file
133
ghost/core/test/e2e-browser/portal/member-actions.spec.js
Normal file
|
@ -0,0 +1,133 @@
|
|||
const {expect, test} = require('@playwright/test');
|
||||
const {createMember, impersonateMember} = require('../utils');
|
||||
|
||||
const addNewsletter = async (page) => {
|
||||
// go to email settings
|
||||
await page.goto('/ghost');
|
||||
await page.locator('[data-test-nav="settings"]').click();
|
||||
await page.locator('[data-test-nav="members-email"]').click();
|
||||
|
||||
// create newsletter
|
||||
await page.locator('[data-test-button="add-newsletter"]').click();
|
||||
await page.locator('[data-test-newsletter-title-input]').click();
|
||||
await page.locator('[data-test-newsletter-title-input]').fill('One more newsletter');
|
||||
await page.locator('[data-test-button="save-newsletter"]').click();
|
||||
|
||||
// check that newsletter was added
|
||||
await page.waitForSelector('[data-test-newsletter="one-more-newsletter"]');
|
||||
};
|
||||
|
||||
test.describe('Portal', () => {
|
||||
test.describe('Member actions', () => {
|
||||
test('can log out', async ({page}) => {
|
||||
// create a new free member
|
||||
await createMember(page, {
|
||||
name: 'Test Member Signout',
|
||||
email: 'test.member.signout@example.com',
|
||||
note: 'Test Member'
|
||||
});
|
||||
|
||||
// impersonate the member on frontend
|
||||
impersonateMember(page);
|
||||
|
||||
const portalTriggerButton = page.frameLocator('#ghost-portal-root iframe.gh-portal-triggerbtn-iframe').locator('div').nth(1);
|
||||
const portalFrame = page.frameLocator('#ghost-portal-root div iframe');
|
||||
|
||||
// sign out
|
||||
await portalTriggerButton.click();
|
||||
await portalFrame.locator('[data-test-button="footer-signout"]').click();
|
||||
|
||||
// check that sign out was successful and 'Sign in' button is available
|
||||
await portalTriggerButton.click();
|
||||
await expect(portalFrame.locator('[data-test-button="signin-switch"]')).toBeVisible();
|
||||
});
|
||||
|
||||
test('can unsubscribe from newsletter from account settings', async ({page}) => {
|
||||
// create a new free member
|
||||
await createMember(page, {
|
||||
name: 'Test Member',
|
||||
email: 'test.member@example.com',
|
||||
note: 'Test Member'
|
||||
});
|
||||
//get the url of the current member on admin
|
||||
const memberUrl = page.url();
|
||||
|
||||
// impersonate the member on frontend
|
||||
impersonateMember(page);
|
||||
|
||||
const portalTriggerButton = await page.locator('#gh-head').getByRole('link', {name: 'Account'});
|
||||
const portalFrame = page.frameLocator('#ghost-portal-root div iframe');
|
||||
|
||||
// open portal and turn off newsletter
|
||||
await portalTriggerButton.click();
|
||||
|
||||
// todo: replace on data attr
|
||||
expect(await portalFrame.locator('#default-newsletter-toggle').isChecked()).toBeTruthy();
|
||||
await portalFrame.locator('.gh-portal-for-switch .switch').click();
|
||||
expect(await portalFrame.locator('#default-newsletter-toggle').isChecked()).not.toBeTruthy();
|
||||
|
||||
// check that member's newsletters was updated in Admin
|
||||
await page.goto(memberUrl);
|
||||
expect(await page.locator('[data-test-member-settings-switch] input[type=checkbox]').first().isChecked()).not.toBeTruthy();
|
||||
});
|
||||
|
||||
test('can unsubscribe from all newsletters from account settings', async ({page}) => {
|
||||
// create a new free member
|
||||
await createMember(page, {
|
||||
name: 'Test Member All Unsubscribe',
|
||||
email: 'test.member2@example.com',
|
||||
note: 'Test Member'
|
||||
});
|
||||
// get the url of the current member on admin
|
||||
const memberUrl = page.url();
|
||||
|
||||
await addNewsletter(page);
|
||||
|
||||
// impersonate the member on frontend
|
||||
await page.goto(memberUrl);
|
||||
impersonateMember(page);
|
||||
|
||||
const portalTriggerButton = await page.locator('#gh-head').getByRole('link', {name: 'Account'});
|
||||
const portalFrame = page.frameLocator('#ghost-portal-root div iframe');
|
||||
|
||||
// open portal
|
||||
await portalTriggerButton.click();
|
||||
await portalFrame.locator('[data-test-button="manage-newsletters"]').click();
|
||||
|
||||
// check amount of newsletters
|
||||
|
||||
// todo: replace on data attr
|
||||
const newsletters = await portalFrame.locator('.gh-portal-list-toggle-wrapper');
|
||||
const count = await newsletters.count();
|
||||
expect(count).toEqual(2);
|
||||
|
||||
// all newsletters should be activated
|
||||
for (let i = 0; i < count; i++) {
|
||||
expect(await newsletters.nth(i).locator('input[type="checkbox"]').isChecked()).toBeTruthy();
|
||||
}
|
||||
|
||||
// unsubscribe from all emails
|
||||
// todo: replace on data attr
|
||||
await portalFrame.getByRole('button', {name: 'Unsubscribe from all emails'}).click();
|
||||
|
||||
// all newsletters should be disabled
|
||||
for (let i = 0; i < count; i++) {
|
||||
expect(await newsletters.nth(i).locator('input[type="checkbox"]').isChecked()).not.toBeTruthy();
|
||||
}
|
||||
|
||||
// check that member's newsletters was updated in Admin
|
||||
await page.goto(memberUrl);
|
||||
|
||||
// check amount of newsletters in member's profile in Admin
|
||||
await page.waitForSelector('[data-test-member-settings-switch]');
|
||||
const membersNewsletters = await page.locator('[data-test-member-settings-switch]');
|
||||
const newslettersCount = await membersNewsletters.count();
|
||||
expect(newslettersCount).toEqual(2);
|
||||
|
||||
// all newsletters should be disabled
|
||||
for (let i = 0; i < newslettersCount; i++) {
|
||||
expect(await membersNewsletters.nth(i).locator('input[type="checkbox"]').isChecked()).not.toBeTruthy();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Add table
Reference in a new issue