Ghost/ghost/core/test/e2e-browser/admin/private-site.spec.js
Sam Lord ccbcba0969
Switched to a shared page for each playwright worker
refs: https://github.com/TryGhost/DevOps/issues/78

This speeds up the tests by another 30 seconds on my local machine, and
hopefully takes some time off in CI too
2023-10-16 15:32:13 +00:00

61 lines
2.8 KiB
JavaScript

const {expect} = require('@playwright/test');
const test = require('../fixtures/ghost-test');
test.describe('Site Settings', () => {
test.describe('Privacy setting', () => {
test('A site set to private should require a password to access it', async ({sharedPage, browser}) => {
// set private mode in admin "on"
await sharedPage.goto('/ghost');
await sharedPage.locator('[data-test-nav="settings"]').click();
const section = sharedPage.getByTestId('locksite');
await section.getByRole('button', {name: 'Edit'}).click();
await section.getByLabel(/Enable password protection/).check();
await section.getByLabel('Site password').fill('password');
// save changes
await section.getByRole('button', {name: 'Save'}).click();
await expect(section.getByLabel('Site password')).toHaveCount(0);
// copy site password
//const passwordInput = await page.locator('[data-test-password-input]');
//const sitePassword = await passwordInput.inputValue();
// frontend needs new context to store cookies
const frontendContext = await browser.newContext();
const frontendPage = await frontendContext.newPage();
// check the site is protected by a password
await frontendPage.goto('/');
await expect(frontendPage.getByRole('button', {name: 'Access site →'})).toBeVisible();
// @NOTE: site access doesn't not work because Playwright ignores cookies set
// during the redirect response. Possibly related to https://github.com/microsoft/playwright/issues/5236
// assert /private/?r=%2F
// assert should not see the site front page
// await frontendPage.getByPlaceholder('Password').fill(sitePassword);
// await frontendPage.getByRole('button', {name: 'Access site →'}).click();
// await frontendPage.waitForSelector('.site-title');
// await expect(frontendPage.locator('.site-title')).toHaveText('The Local Test');
// set private mode in admin "off"
await section.getByRole('button', {name: 'Edit'}).click();
await section.getByLabel(/Enable password protection/).uncheck();
// save changes
await section.getByRole('button', {name: 'Save'}).click();
await expect(section.getByLabel('Site password')).toHaveCount(0);
// check the site is publicly accessible
await expect(async () => {
await frontendPage.goto('/');
await expect(frontendPage.locator('.gh-navigation-brand')).toHaveText('The Local Test');
}).toPass();
});
});
});