test(transcription): harden annotation-delete specs and e2e (#722)
- Fix a stale test title that still claimed a delete button is visible. - Strengthen the two "never renders a delete button" contract tests (AnnotationShape + AnnotationLayer specs) to assert the annotation element has zero descendant <button> elements, not just the absence of the removed testid (a near-tautology now that the testid is gone). - Harden the e2e delete test: guard countBefore > 0 so a missing seed fails clearly instead of asserting toHaveCount(-1), and capture the deleted annotation's testid to assert that specific element is gone (identity check) alongside the count drop. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -382,6 +382,9 @@ test.describe('PDF annotations — admin', () => {
|
||||
});
|
||||
// Record count now — the draw test may have created more than one annotation
|
||||
const countBefore = await page.locator('[data-testid^="annotation-"]').count();
|
||||
// Guard against a missing seed: without this, a count of 0 would turn the
|
||||
// post-delete assertion into toHaveCount(-1) and fail with a misleading timeout.
|
||||
expect(countBefore).toBeGreaterThan(0);
|
||||
|
||||
// Enable annotate mode — deletion is only available while annotating
|
||||
await page.getByRole('button', { name: /^annotieren$/i }).click();
|
||||
@@ -389,6 +392,10 @@ test.describe('PDF annotations — admin', () => {
|
||||
// The on-canvas delete button was removed (issue #722). Delete via the
|
||||
// kept keyboard shortcut: focus an annotation, press Delete, confirm.
|
||||
const annotation = page.locator('[data-testid^="annotation-"]').first();
|
||||
// Capture the identity of the specific annotation we delete so we can assert
|
||||
// that exact element is gone afterwards — a count drop alone is identity-blind.
|
||||
const deletedTestId = await annotation.getAttribute('data-testid');
|
||||
expect(deletedTestId).toBeTruthy();
|
||||
await annotation.click();
|
||||
await annotation.press('Delete');
|
||||
|
||||
@@ -397,6 +404,10 @@ test.describe('PDF annotations — admin', () => {
|
||||
await expect(page.locator('[data-testid^="annotation-"]')).toHaveCount(countBefore - 1, {
|
||||
timeout: 8000
|
||||
});
|
||||
// Identity check: the specific annotation we deleted must no longer exist.
|
||||
await expect(page.locator(`[data-testid="${deletedTestId}"]`)).toHaveCount(0, {
|
||||
timeout: 8000
|
||||
});
|
||||
|
||||
await page.screenshot({ path: 'test-results/e2e/annotation-deleted.png' });
|
||||
});
|
||||
|
||||
@@ -110,6 +110,10 @@ describe('AnnotationLayer', () => {
|
||||
});
|
||||
|
||||
await expect.element(page.getByTestId('annotation-ann-1')).toBeInTheDocument();
|
||||
// Positive control: the previously-removed testid must stay absent.
|
||||
await expect.element(page.getByTestId('annotation-delete-ann-1')).not.toBeInTheDocument();
|
||||
// Real invariant: the annotation must contain no clickable delete control at all.
|
||||
const annotationEl = page.getByTestId('annotation-ann-1').element() as HTMLElement;
|
||||
expect(annotationEl.querySelectorAll('button').length).toBe(0);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -240,7 +240,7 @@ describe('AnnotationLayer', () => {
|
||||
expect(document.querySelector('[data-testid="annotation-ann-1"]')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('renders without throwing when canDraw is true (delete button visible)', async () => {
|
||||
it('renders without throwing when canDraw is true (no delete button)', async () => {
|
||||
expect(() =>
|
||||
render(AnnotationLayer, {
|
||||
annotations: [annotation],
|
||||
|
||||
@@ -50,7 +50,11 @@ describe('AnnotationShape', () => {
|
||||
});
|
||||
|
||||
await expect.element(page.getByTestId('annotation-ann-1')).toBeInTheDocument();
|
||||
// Positive control: the previously-removed testid must stay absent.
|
||||
await expect.element(page.getByTestId('annotation-delete-ann-1')).not.toBeInTheDocument();
|
||||
// Real invariant: the annotation must contain no clickable delete control at all.
|
||||
const annotationEl = page.getByTestId('annotation-ann-1').element() as HTMLElement;
|
||||
expect(annotationEl.querySelectorAll('button').length).toBe(0);
|
||||
});
|
||||
|
||||
it('calls onDeleteRequest when Delete key is pressed on the annotation', async () => {
|
||||
|
||||
Reference in New Issue
Block a user