Files
automaker/apps/ui/tests/context/delete-context-file.spec.ts
Tony Nekola b65fccbcf7 fix: add retry mechanisms to context test helpers for flaky test stability
Update waitForContextFile, selectContextFile, and waitForFileContentToLoad
helpers to use Playwright's expect().toPass() with retry intervals, handling
race conditions between API calls completing and UI re-rendering. Also add
waitForNetworkIdle after dialog closes in context-file-management test.
2025-12-27 15:09:08 +02:00

76 lines
2.1 KiB
TypeScript

/**
* Delete Context File E2E Test
*
* Happy path: Delete a context file via the UI
*/
import { test, expect } from '@playwright/test';
import * as fs from 'fs';
import * as path from 'path';
import {
resetContextDirectory,
setupProjectWithFixture,
getFixturePath,
navigateToContext,
waitForContextFile,
selectContextFile,
deleteSelectedContextFile,
clickElement,
fillInput,
waitForNetworkIdle,
} from '../utils';
test.describe('Delete Context File', () => {
test.beforeEach(async () => {
resetContextDirectory();
});
test.afterEach(async () => {
resetContextDirectory();
});
test('should delete a context file via the UI', async ({ page }) => {
const fileName = 'to-delete.md';
await setupProjectWithFixture(page, getFixturePath());
await page.goto('/');
await waitForNetworkIdle(page);
await navigateToContext(page);
// First create a context file to delete
await clickElement(page, 'create-markdown-button');
await page.waitForSelector('[data-testid="create-markdown-dialog"]', { timeout: 5000 });
await fillInput(page, 'new-markdown-name', fileName);
await fillInput(page, 'new-markdown-content', '# Test File\n\nThis file will be deleted.');
await clickElement(page, 'confirm-create-markdown');
await page.waitForFunction(
() => !document.querySelector('[data-testid="create-markdown-dialog"]'),
{ timeout: 5000 }
);
// Wait for the file to appear in the list
await waitForContextFile(page, fileName);
// Select the file
await selectContextFile(page, fileName);
// Delete the selected file
await deleteSelectedContextFile(page);
// Verify the file is no longer in the list
await expect(async () => {
const fileButton = page.locator(`[data-testid="context-file-${fileName}"]`);
expect(await fileButton.count()).toBe(0);
}).toPass({ timeout: 10000 });
// Verify the file is deleted from the filesystem
const fixturePath = getFixturePath();
const contextPath = path.join(fixturePath, '.automaker', 'context', fileName);
expect(fs.existsSync(contextPath)).toBe(false);
});
});