|
1 | 1 | const {expect, test} = require('@playwright/test');
|
2 | 2 | const {DateTime} = require('luxon');
|
3 |
| -const {createMember, createPostDraft} = require('../utils'); |
4 | 3 | const {slugify} = require('@tryghost/string');
|
| 4 | +const {createTier, createMember, createPostDraft, impersonateMember} = require('../utils'); |
5 | 5 |
|
6 | 6 | /**
|
7 | 7 | * Test the status of a post in the post editor.
|
@@ -163,6 +163,11 @@ const publishPost = async (page, {type = 'publish', time, date} = {}) => {
|
163 | 163 | // TODO: assert publish flow has expected completion details
|
164 | 164 | };
|
165 | 165 |
|
| 166 | +/** |
| 167 | + * When on the publish flow completed step, click the bookmark |
| 168 | + * @param {import('@playwright/test').Page} page |
| 169 | + * @returns {Promise<import('@playwright/test').Page>} |
| 170 | + */ |
166 | 171 | const openPublishedPostBookmark = async (page) => {
|
167 | 172 | // open the published post in a new tab
|
168 | 173 | const [frontendPage] = await Promise.all([
|
@@ -492,4 +497,56 @@ test.describe('Updating post access', () => {
|
492 | 497 | await expect(frontendPage.locator('.gh-content.gh-canvas > p')).toHaveText('This is my post body.');
|
493 | 498 | });
|
494 | 499 | });
|
| 500 | + |
| 501 | + test('specific tiers', async ({page}) => { |
| 502 | + await page.goto('/ghost'); |
| 503 | + |
| 504 | + // tiers and members are needed to test the access levels |
| 505 | + await createTier(page, {name: 'Silver', monthlyPrice: 5, yearlyPrice: 50}); |
| 506 | + await createTier(page, {name: 'Gold', monthlyPrice: 10, yearlyPrice: 100}); |
| 507 | + await createMember(page, {email: '[email protected]', compedPlan: 'Silver'}); |
| 508 | + const silverMember = await page.url(); |
| 509 | + await createMember(page, {email: '[email protected]', compedPlan: 'Gold'}); |
| 510 | + const goldMember = await page.url(); |
| 511 | + |
| 512 | + await createPostDraft(page, {body: 'Only gold members can see this'}); |
| 513 | + |
| 514 | + await openPostSettingsMenu(page); |
| 515 | + await setPostVisibility(page, 'tiers'); |
| 516 | + |
| 517 | + // backspace removes existing tiers |
| 518 | + expect(page.locator('[data-test-visibility-segment-select] [data-test-selected-token]')).toHaveCount(3); |
| 519 | + await page.locator('[data-test-visibility-segment-select] input').click(); |
| 520 | + await page.keyboard.press('Backspace'); |
| 521 | + await page.waitForTimeout(50); |
| 522 | + await page.keyboard.press('Backspace'); |
| 523 | + await page.waitForTimeout(50); |
| 524 | + await page.keyboard.press('Backspace'); |
| 525 | + expect(page.locator('[data-test-visibility-segment-select] [data-test-selected-token]')).toHaveCount(0); |
| 526 | + |
| 527 | + // specific tier can be added back on |
| 528 | + await page.keyboard.type('Go'); |
| 529 | + const goldOption = page.locator('[data-test-visibility-segment-option="Gold"]'); |
| 530 | + await goldOption.click(); |
| 531 | + |
| 532 | + // publish |
| 533 | + await publishPost(page); |
| 534 | + const frontendPage = await openPublishedPostBookmark(page); |
| 535 | + |
| 536 | + // non-member doesn't have access |
| 537 | + await expect(frontendPage.locator('.gh-post-upgrade-cta-content h2')).toContainText('on the Gold tier only'); |
| 538 | + |
| 539 | + // member on wrong tier doesn't have access |
| 540 | + await page.goto(silverMember); |
| 541 | + await impersonateMember(page); |
| 542 | + await frontendPage.reload(); |
| 543 | + await expect(frontendPage.locator('.gh-post-upgrade-cta-content h2')).toContainText('on the Gold tier only'); |
| 544 | + |
| 545 | + // member on selected tier has access |
| 546 | + await page.goto(goldMember); |
| 547 | + await impersonateMember(page); |
| 548 | + await frontendPage.reload(); |
| 549 | + await expect(frontendPage.locator('.gh-post-upgrade-cta-content')).not.toBeVisible(); |
| 550 | + await expect(frontendPage.locator('.gh-content.gh-canvas > p')).toHaveText('Only gold members can see this'); |
| 551 | + }); |
495 | 552 | });
|
0 commit comments