chore: setup payload 3 + next 16 foundation with ipal-kit
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
import { test, expect, Page } from '@playwright/test'
|
||||
import { login } from '../helpers/login'
|
||||
import { seedTestUser, cleanupTestUser, testUser } from '../helpers/seedUser'
|
||||
|
||||
test.describe('Admin Panel', () => {
|
||||
let page: Page
|
||||
|
||||
test.beforeAll(async ({ browser }, testInfo) => {
|
||||
await seedTestUser()
|
||||
|
||||
const context = await browser.newContext()
|
||||
page = await context.newPage()
|
||||
|
||||
await login({ page, user: testUser })
|
||||
})
|
||||
|
||||
test.afterAll(async () => {
|
||||
await cleanupTestUser()
|
||||
})
|
||||
|
||||
test('can navigate to dashboard', async () => {
|
||||
await page.goto('http://localhost:3000/admin')
|
||||
await expect(page).toHaveURL('http://localhost:3000/admin')
|
||||
const dashboardArtifact = page.locator('.step-nav__first').first()
|
||||
await expect(dashboardArtifact).toBeVisible()
|
||||
})
|
||||
|
||||
test('can navigate to list view', async () => {
|
||||
await page.goto('http://localhost:3000/admin/collections/users')
|
||||
await expect(page).toHaveURL('http://localhost:3000/admin/collections/users')
|
||||
const listViewArtifact = page.locator('h1', { hasText: 'Users' }).first()
|
||||
await expect(listViewArtifact).toBeVisible()
|
||||
})
|
||||
|
||||
test('can navigate to edit view', async () => {
|
||||
await page.goto('http://localhost:3000/admin/collections/users/create')
|
||||
await expect(page).toHaveURL(/\/admin\/collections\/users\/[a-zA-Z0-9-_]+/)
|
||||
const editViewArtifact = page.locator('input[name="email"]')
|
||||
await expect(editViewArtifact).toBeVisible()
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,20 @@
|
||||
import { test, expect, Page } from '@playwright/test'
|
||||
|
||||
test.describe('Frontend', () => {
|
||||
let page: Page
|
||||
|
||||
test.beforeAll(async ({ browser }, testInfo) => {
|
||||
const context = await browser.newContext()
|
||||
page = await context.newPage()
|
||||
})
|
||||
|
||||
test('can go on homepage', async ({ page }) => {
|
||||
await page.goto('http://localhost:3000')
|
||||
|
||||
await expect(page).toHaveTitle(/Payload Blank Template/)
|
||||
|
||||
const heading = page.locator('h1').first()
|
||||
|
||||
await expect(heading).toHaveText('Welcome to your new project.')
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,31 @@
|
||||
import type { Page } from '@playwright/test'
|
||||
import { expect } from '@playwright/test'
|
||||
|
||||
export interface LoginOptions {
|
||||
page: Page
|
||||
serverURL?: string
|
||||
user: {
|
||||
email: string
|
||||
password: string
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs the user into the admin panel via the login page.
|
||||
*/
|
||||
export async function login({
|
||||
page,
|
||||
serverURL = 'http://localhost:3000',
|
||||
user,
|
||||
}: LoginOptions): Promise<void> {
|
||||
await page.goto(`${serverURL}/admin/login`)
|
||||
|
||||
await page.fill('#field-email', user.email)
|
||||
await page.fill('#field-password', user.password)
|
||||
await page.click('button[type="submit"]')
|
||||
|
||||
await page.waitForURL(`${serverURL}/admin`)
|
||||
|
||||
const dashboardArtifact = page.locator('.step-nav__first')
|
||||
await expect(dashboardArtifact).toBeVisible()
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
import { getPayload } from 'payload'
|
||||
import config from '../../src/payload.config.js'
|
||||
|
||||
export const testUser = {
|
||||
email: '[email protected]',
|
||||
password: 'test',
|
||||
}
|
||||
|
||||
/**
|
||||
* Seeds a test user for e2e admin tests.
|
||||
*/
|
||||
export async function seedTestUser(): Promise<void> {
|
||||
const payload = await getPayload({ config })
|
||||
|
||||
// Delete existing test user if any
|
||||
await payload.delete({
|
||||
collection: 'users',
|
||||
where: {
|
||||
email: {
|
||||
equals: testUser.email,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
// Create fresh test user
|
||||
await payload.create({
|
||||
collection: 'users',
|
||||
data: testUser,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleans up test user after tests
|
||||
*/
|
||||
export async function cleanupTestUser(): Promise<void> {
|
||||
const payload = await getPayload({ config })
|
||||
|
||||
await payload.delete({
|
||||
collection: 'users',
|
||||
where: {
|
||||
email: {
|
||||
equals: testUser.email,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
import { getPayload, Payload } from 'payload'
|
||||
import config from '@/payload.config'
|
||||
|
||||
import { describe, it, beforeAll, expect } from 'vitest'
|
||||
|
||||
let payload: Payload
|
||||
|
||||
describe('API', () => {
|
||||
beforeAll(async () => {
|
||||
const payloadConfig = await config
|
||||
payload = await getPayload({ config: payloadConfig })
|
||||
})
|
||||
|
||||
it('fetches users', async () => {
|
||||
const users = await payload.find({
|
||||
collection: 'users',
|
||||
})
|
||||
expect(users).toBeDefined()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user