fix(tests): playwright mostly cooperates now?
This commit is contained in:
parent
b8891f47a8
commit
0c2875e35d
|
|
@ -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();
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue