fix(e2e): match note-card locator on exact title, not substring content

noteCard() filtered on hasText, matching against a card's *entire*
rendered text — with note-linking, a card's content preview can now
render a linked note's title as plain text (a stripped note-link), so
a substring match against the whole card ambiguously resolves to more
than one card whenever one note's title happens to appear inside
another's preview. Scoped the match to the card's <h3> title element
with an anchored exact-match regex instead.

This was failing CI on two tests: the note-linking suite's own
backlink scenario, and — since test note titles aren't otherwise
isolated across files in the same run — an unrelated notes-crud test
whose note title happened to collide with a leftover "Linker Note"
card's rendered preview.

Verified: full e2e suite (114/114) passes locally against this fix.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Frederic Cabassut
2026-08-05 10:51:08 +02:00
committed by Fred Cabassut
co-authored by Claude Sonnet 5
parent 3eb8d2eeab
commit 1ced23033e
+11 -2
View File
@@ -13,9 +13,18 @@ const COLLAB_EMAIL = 'collab@test.com';
const COLLAB_PASSWORD = collabPassword;
const COLLAB_NAME = 'Collaborator User';
/** Find a specific note card by its title text */
/**
* Find a specific note card by its exact title text. Matches only the
* card's <h3> title, not its full text content — with note-linking, a
* card's content preview can render another note's title as plain text
* (e.g. a stripped note-link), so a substring match against the whole
* card can ambiguously resolve to more than one card.
*/
export function noteCard(page: Page, title: string): Locator {
return page.locator('[data-testid="note-card"]', { hasText: title });
const escaped = title.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
return page.locator('[data-testid="note-card"]').filter({
has: page.locator('h3', { hasText: new RegExp(`^${escaped}$`) })
});
}
/**