- When autoLogin is enabled, it will no longer flash an unresponsive "login" screen. Instead, it will straight up open the admin panel. That's because, on the server, we will now always & immediately see the user as authenticated, thus no initial login view is pushed to the client until the client component sends the auth request anymore. Less useless requests. Additionally, jwt verification is now completely skipped - No more auto-login related frontend code. autoLogin handling has been removed from the frontend `Auth` component - less code to maintain, this is way simpler now **For reviewers:** - The new logic for autoFill without prefillOnly is here: [jwt auth strategy](https://github.com/payloadcms/payload/pull/7224/files#diff-7d40839079a8b2abb58233e5904513ab321023a70538229dfaf1dfee067dc8bfR21) - The new logic for autoFill with prefillOnly is here: [Server Login View](https://github.com/payloadcms/payload/pull/7224/files#diff-683770104f196196743398a698fbf8987f00e4426ca1c0ace3658d18ab80e82dL72) => [Client Login Form](https://github.com/payloadcms/payload/pull/7224/files#diff-ac3504d3b3b0489455245663649bef9e84477bf0c1185da5a4d3a612450f01eeL20) **BREAKING** `autoLogin` without `prefillOnly` set now also affects graphQL/Rest operations. Only the user specified in `autoLogin` will be returned. Within the graphQL/Rest/Local API, this should still allow you to authenticate with a different user, as the autoLogin user is only used if no token is set.
142 lines
4.2 KiB
TypeScript
142 lines
4.2 KiB
TypeScript
import type { Page } from '@playwright/test'
|
|
|
|
import { expect, test } from '@playwright/test'
|
|
import * as path from 'path'
|
|
import { fileURLToPath } from 'url'
|
|
|
|
import type { PayloadTestSDK } from '../helpers/sdk/index.js'
|
|
import type { Config } from './payload-types.js'
|
|
|
|
import { ensureCompilationIsDone, initPageConsoleErrorCatch } from '../helpers.js'
|
|
import { AdminUrlUtil } from '../helpers/adminUrlUtil.js'
|
|
import { initPayloadE2ENoConfig } from '../helpers/initPayloadE2ENoConfig.js'
|
|
import { POLL_TOPASS_TIMEOUT, TEST_TIMEOUT_LONG } from '../playwright.config.js'
|
|
|
|
const filename = fileURLToPath(import.meta.url)
|
|
const dirname = path.dirname(filename)
|
|
|
|
test.describe('Form Builder', () => {
|
|
let page: Page
|
|
let formsUrl: AdminUrlUtil
|
|
let submissionsUrl: AdminUrlUtil
|
|
let payload: PayloadTestSDK<Config>
|
|
|
|
test.beforeAll(async ({ browser }, testInfo) => {
|
|
testInfo.setTimeout(TEST_TIMEOUT_LONG)
|
|
const { payload: payloadFromInit, serverURL } = await initPayloadE2ENoConfig<Config>({
|
|
dirname,
|
|
})
|
|
formsUrl = new AdminUrlUtil(serverURL, 'forms')
|
|
submissionsUrl = new AdminUrlUtil(serverURL, 'form-submissions')
|
|
|
|
payload = payloadFromInit
|
|
|
|
const context = await browser.newContext()
|
|
page = await context.newPage()
|
|
initPageConsoleErrorCatch(page)
|
|
|
|
await ensureCompilationIsDone({ page, serverURL })
|
|
})
|
|
|
|
test.describe('Forms collection', () => {
|
|
test('has contact form', async () => {
|
|
await page.goto(formsUrl.list)
|
|
|
|
await expect(() => expect(page.url()).toContain('forms')).toPass({
|
|
timeout: POLL_TOPASS_TIMEOUT,
|
|
})
|
|
|
|
const titleCell = page.locator('.row-1 .cell-title a')
|
|
await expect(titleCell).toHaveText('Contact Form')
|
|
const href = await titleCell.getAttribute('href')
|
|
|
|
await titleCell.click()
|
|
await expect(() => expect(page.url()).toContain(href)).toPass({
|
|
timeout: POLL_TOPASS_TIMEOUT,
|
|
})
|
|
|
|
const nameField = page.locator('#field-fields__0__name')
|
|
await expect(nameField).toHaveValue('name')
|
|
|
|
const addFieldsButton = page.locator('.blocks-field__drawer-toggler')
|
|
|
|
await addFieldsButton.click()
|
|
|
|
await expect(() => expect(page.locator('.drawer__header__title')).toBeVisible()).toPass({
|
|
timeout: POLL_TOPASS_TIMEOUT,
|
|
})
|
|
|
|
await page
|
|
.locator('button.thumbnail-card', {
|
|
hasText: 'Text Area',
|
|
})
|
|
.click()
|
|
|
|
await expect(() =>
|
|
expect(
|
|
page.locator('.pill__label', {
|
|
hasText: 'Text Area',
|
|
}),
|
|
).toBeVisible(),
|
|
).toPass({
|
|
timeout: POLL_TOPASS_TIMEOUT,
|
|
})
|
|
})
|
|
})
|
|
|
|
test.describe('Form submissions collection', () => {
|
|
test('has form submissions', async () => {
|
|
await page.goto(submissionsUrl.list)
|
|
|
|
await expect(() => expect(page.url()).toContain('form-submissions')).toPass({
|
|
timeout: POLL_TOPASS_TIMEOUT,
|
|
})
|
|
|
|
const idCell = page.locator('.row-1 .cell-id a')
|
|
const href = await idCell.getAttribute('href')
|
|
|
|
await idCell.click()
|
|
await expect(() => expect(page.url()).toContain(href)).toPass({
|
|
timeout: POLL_TOPASS_TIMEOUT,
|
|
})
|
|
|
|
await expect(page.locator('#field-submissionData__0__value')).toHaveValue('Test Submission')
|
|
await expect(page.locator('#field-submissionData__1__value')).toHaveValue(
|
|
'tester@example.com',
|
|
)
|
|
})
|
|
|
|
test('can create form submission', async () => {
|
|
const { docs } = await payload.find({
|
|
collection: 'forms',
|
|
})
|
|
|
|
const createdSubmission = await payload.create({
|
|
collection: 'form-submissions',
|
|
data: {
|
|
form: docs[0].id,
|
|
submissionData: [
|
|
{
|
|
field: 'name',
|
|
value: 'New tester',
|
|
},
|
|
{
|
|
field: 'email',
|
|
value: 'new@example.com',
|
|
},
|
|
],
|
|
},
|
|
})
|
|
|
|
await page.goto(submissionsUrl.edit(createdSubmission.id))
|
|
|
|
await expect(() => expect(page.url()).toContain(createdSubmission.id)).toPass({
|
|
timeout: POLL_TOPASS_TIMEOUT,
|
|
})
|
|
|
|
await expect(page.locator('#field-submissionData__0__value')).toHaveValue('New tester')
|
|
await expect(page.locator('#field-submissionData__1__value')).toHaveValue('new@example.com')
|
|
})
|
|
})
|
|
})
|