fix(tests): playwright mostly cooperates now?

This commit is contained in:
perf3ct 2025-06-19 02:07:31 +00:00
parent eae4044a01
commit 7e19323a1d
No known key found for this signature in database
GPG Key ID: 569C4EEC436F5232
3 changed files with 79 additions and 18 deletions

View File

@ -64,15 +64,13 @@ test.describe('Authentication', () => {
await page.waitForURL(/\/dashboard|\//, { timeout: TIMEOUTS.medium });
// Find and click logout button
const logoutButton = page.locator('button:has-text("Logout"), [data-testid="logout"]');
if (await logoutButton.isVisible()) {
await logoutButton.click();
} else {
// Try menu-based logout
await page.click('[data-testid="user-menu"], .user-menu, button:has([data-testid="user-avatar"])');
await page.click('button:has-text("Logout"), [data-testid="logout"]');
}
// Find and click profile/account button in the top app bar (has AccountIcon)
const profileButton = page.locator('button:has([data-testid="AccountCircleIcon"])');
await profileButton.click();
// Wait for profile menu to open and click logout
const logoutMenuItem = page.locator('li[role="menuitem"]:has-text("Logout")');
await logoutMenuItem.click();
// Should redirect back to login
await page.waitForURL(/\/login|\//, { timeout: TIMEOUTS.medium });
@ -91,7 +89,11 @@ test.describe('Authentication', () => {
// Reload the page
await page.reload();
// Should still be logged in
// Wait for page to load after reload
await page.waitForLoadState('networkidle');
// Should still be logged in (either on dashboard or main page, but not login)
await page.waitForURL(/\/dashboard|\/(?!login)/, { timeout: TIMEOUTS.medium });
await expect(page.locator('input[name="username"]')).not.toBeVisible();
});

View File

@ -8,16 +8,30 @@ test.describe('Document Management', () => {
test.beforeEach(async ({ authenticatedPage }) => {
helpers = new TestHelpers(authenticatedPage);
await helpers.navigateToPage('/documents');
// Ensure we have test documents for tests that need them
});
test('should display document list', async ({ authenticatedPage: page }) => {
// Check for document list components
await expect(page.locator('[data-testid="document-list"], .document-list, .documents-grid')).toBeVisible();
// The documents page should be visible with title and description
await expect(page.getByRole('heading', { name: 'Documents' })).toBeVisible();
await expect(page.locator('text=Manage and explore your document library')).toBeVisible();
// Check for document cards/items or empty state
const documentCards = page.locator('.MuiCard-root');
const hasDocuments = await documentCards.count() > 0;
if (hasDocuments) {
// Should show at least one document card
await expect(documentCards.first()).toBeVisible();
}
// Either way, the page should be functional - check for search bar
await expect(page.getByRole('main').getByRole('textbox', { name: 'Search documents...' })).toBeVisible();
});
test('should navigate to document details', async ({ authenticatedPage: page }) => {
// Click on first document if available
const firstDocument = page.locator('[data-testid="document-item"], .document-item, .document-card').first();
const firstDocument = page.locator('.MuiCard-root').first();
if (await firstDocument.isVisible()) {
await firstDocument.click();
@ -26,19 +40,23 @@ test.describe('Document Management', () => {
await page.waitForURL(/\/documents\/[^\/]+/, { timeout: TIMEOUTS.medium });
// Should show document details
await expect(page.locator('[data-testid="document-details"], .document-details')).toBeVisible();
await expect(page.locator('[data-testid="document-details"], .document-details, h1, h2')).toBeVisible();
} else {
test.skip();
}
});
test('should display document metadata', async ({ authenticatedPage: page }) => {
const firstDocument = page.locator('[data-testid="document-item"], .document-item, .document-card').first();
const firstDocument = page.locator('.MuiCard-root').first();
if (await firstDocument.isVisible()) {
await firstDocument.click();
await page.waitForURL(/\/documents\/[^\/]+/, { timeout: TIMEOUTS.medium });
// Should show various metadata fields
await expect(page.locator(':has-text("File size"), :has-text("Upload date"), :has-text("Modified")')).toBeVisible();
await expect(page.locator(':has-text("Bytes"), :has-text("OCR"), :has-text("Download")')).toBeVisible();
} else {
test.skip();
}
});
@ -118,7 +136,7 @@ test.describe('Document Management', () => {
});
test('should display OCR status', async ({ authenticatedPage: page }) => {
const firstDocument = page.locator('[data-testid="document-item"], .document-item, .document-card').first();
const firstDocument = page.locator('.MuiCard-root').first();
if (await firstDocument.isVisible()) {
await firstDocument.click();
@ -126,11 +144,14 @@ test.describe('Document Management', () => {
// Should show OCR status information
await expect(page.locator(':has-text("OCR"), [data-testid="ocr-status"], .ocr-status')).toBeVisible();
} else {
// Skip test if no documents
test.skip();
}
});
test('should search within document content', async ({ authenticatedPage: page }) => {
const firstDocument = page.locator('[data-testid="document-item"], .document-item, .document-card').first();
const firstDocument = page.locator('.MuiCard-root').first();
if (await firstDocument.isVisible()) {
await firstDocument.click();
@ -146,6 +167,9 @@ test.describe('Document Management', () => {
timeout: TIMEOUTS.short
});
}
} else {
// Skip test if no documents
test.skip();
}
});

View File

@ -51,4 +51,39 @@ export class TestHelpers {
fullPage: true
});
}
async uploadTestDocument(fileName: string) {
// Navigate to upload page
await this.page.goto('/upload');
// Look for file input
const fileInput = this.page.locator('input[type="file"]');
await expect(fileInput).toBeVisible();
// Upload the test file
await fileInput.setInputFiles(`../tests/test_images/${fileName}`);
// Wait for upload button and click it
const uploadButton = this.page.locator('button:has-text("Upload"), [data-testid="upload-button"]');
if (await uploadButton.isVisible()) {
await uploadButton.click();
}
// Wait for upload to complete
await this.page.waitForTimeout(2000);
// Return to documents page
await this.page.goto('/documents');
await this.waitForLoadingToComplete();
}
async ensureTestDocumentsExist() {
// Check if there are any documents
const documentCount = await this.page.locator('[data-testid="document-item"], .document-item, .document-card').count();
if (documentCount === 0) {
// Upload a test document
await this.uploadTestDocument('test1.png');
}
}
}