diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9069bf150..9211c52d6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -246,6 +246,7 @@ jobs: - fields__collections__Lexical - live-preview - localization + - plugin-cloud-storage - plugin-form-builder - plugin-nested-docs - plugin-seo diff --git a/test/plugin-cloud-storage/config.ts b/test/plugin-cloud-storage/config.ts index 118e0d471..245227f3c 100644 --- a/test/plugin-cloud-storage/config.ts +++ b/test/plugin-cloud-storage/config.ts @@ -5,6 +5,7 @@ import { azureBlobStorageAdapter } from '@payloadcms/plugin-cloud-storage/azure' import { gcsAdapter } from '@payloadcms/plugin-cloud-storage/gcs' import { s3Adapter } from '@payloadcms/plugin-cloud-storage/s3' import dotenv from 'dotenv' +import { fileURLToPath } from 'node:url' import path from 'path' import { buildConfigWithDefaults } from '../buildConfigWithDefaults.js' @@ -14,13 +15,15 @@ import { MediaWithPrefix } from './collections/MediaWithPrefix.js' import { Users } from './collections/Users.js' import { mediaSlug, mediaWithPrefixSlug, prefix } from './shared.js' import { createTestBucket } from './utils.js' +const filename = fileURLToPath(import.meta.url) +const dirname = path.dirname(filename) let adapter: Adapter let uploadOptions // Load config to work with emulated services dotenv.config({ - path: path.resolve(process.cwd(), './test/plugin-cloud-storage/.env.emulated'), + path: path.resolve(dirname, './.env.emulated'), }) if (process.env.PAYLOAD_PUBLIC_CLOUD_STORAGE_ADAPTER === 'azure') { diff --git a/test/plugin-cloud-storage/e2e.spec.ts b/test/plugin-cloud-storage/e2e.spec.ts new file mode 100644 index 000000000..f6f4cd7f7 --- /dev/null +++ b/test/plugin-cloud-storage/e2e.spec.ts @@ -0,0 +1,54 @@ +import type { Page } from '@playwright/test' + +import { expect, test } from '@playwright/test' +import * as path from 'path' +import { fileURLToPath } from 'url' + +import { saveDocAndAssert } from '../helpers.js' +import { AdminUrlUtil } from '../helpers/adminUrlUtil.js' +import { initPayloadE2ENoConfig } from '../helpers/initPayloadE2ENoConfig.js' +import { mediaSlug } from './shared.js' + +const filename = fileURLToPath(import.meta.url) +const dirname = path.dirname(filename) + +test.describe('Admin Panel', () => { + let page: Page + let mediaURL: AdminUrlUtil + + test.beforeAll(async ({ browser }) => { + const { serverURL } = await initPayloadE2ENoConfig({ dirname }) + mediaURL = new AdminUrlUtil(serverURL, mediaSlug) + + const context = await browser.newContext() + page = await context.newPage() + }) + + test('should create file upload', async () => { + await page.goto(mediaURL.create) + await page.setInputFiles('input[type="file"]', path.resolve(dirname, './image.png')) + + const filename = page.locator('.file-field__filename') + + await expect(filename).toHaveValue('image.png') + + await saveDocAndAssert(page) + }) + + test('should update an existing upload', async () => { + await page.goto(mediaURL.create) + await page.setInputFiles('input[type="file"]', path.resolve(dirname, './image.png')) + + const filename = page.locator('.file-field__filename') + + await expect(filename).toHaveValue('image.png') + + await saveDocAndAssert(page) + + // Update alt text + await page.locator('#field-alt').fill('updated text') + + // Save again + await saveDocAndAssert(page) + }) +}) diff --git a/test/plugin-cloud-storage/image.png b/test/plugin-cloud-storage/image.png new file mode 100644 index 000000000..23787ee3d Binary files /dev/null and b/test/plugin-cloud-storage/image.png differ