Files
pn-new-crm/tests/e2e/smoke/04-documents.spec.ts
Matt 67d7e6e3d5
Some checks failed
Build & Push Docker Images / build-and-push (push) Has been cancelled
Build & Push Docker Images / deploy (push) Has been cancelled
Build & Push Docker Images / lint (push) Has been cancelled
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00

51 lines
1.9 KiB
TypeScript

import { test, expect } from '@playwright/test';
import { login, navigateTo, PORT_SLUG } from './helpers';
import path from 'path';
test.describe('Document Management', () => {
test.beforeEach(async ({ page }) => {
await login(page, 'super_admin');
});
test('navigate to documents page', async ({ page }) => {
await navigateTo(page, '/documents');
await page.waitForLoadState('networkidle');
const heading = page.getByText(/documents|files/i).first();
await expect(heading).toBeVisible({ timeout: 10_000 });
});
test('upload a test file via files page', async ({ page }) => {
// Try the files sub-page which may have a file browser
await navigateTo(page, '/documents');
await page.waitForLoadState('networkidle');
await page.waitForTimeout(2000);
// Look for an upload button
const uploadBtn = page.getByRole('button', { name: /upload|add/i }).first();
if (await uploadBtn.isVisible({ timeout: 5_000 }).catch(() => false)) {
// Check for a file input (may be hidden)
const fileInput = page.locator('input[type="file"]').first();
if (await fileInput.count() > 0) {
const testFilePath = path.resolve('tests/e2e/fixtures/test-document.txt');
await fileInput.setInputFiles(testFilePath);
await page.waitForTimeout(5000);
} else {
// Click the upload button and then look for the input
await uploadBtn.click();
await page.waitForTimeout(1000);
const fileInput2 = page.locator('input[type="file"]').first();
if (await fileInput2.count() > 0) {
const testFilePath = path.resolve('tests/e2e/fixtures/test-document.txt');
await fileInput2.setInputFiles(testFilePath);
await page.waitForTimeout(5000);
}
}
}
// Verify page didn't crash
const pageContent = page.getByText(/documents|files/i).first();
await expect(pageContent).toBeVisible({ timeout: 5_000 });
});
});