feat: add reminders page, BMad skills upgrade, MCP server refactor
- Add reminders page with navigation support - Upgrade BMad builder module to skills-based architecture - Refactor MCP server: extract tools and auth into separate modules - Add connections cache, custom AI provider support - Update prisma schema and generated client - Various UI/UX improvements and i18n updates - Add service worker for PWA support Made-with: Cursor
This commit is contained in:
62
keep-notes/tests/bug-repro-recent-notes.spec.ts
Normal file
62
keep-notes/tests/bug-repro-recent-notes.spec.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
|
||||
import { test, expect } from '@playwright/test'
|
||||
|
||||
test.describe('Recent Notes Dismissal Bug', () => {
|
||||
test('should not replace dismissed note immediately', async ({ page }) => {
|
||||
// 1. Create 4 notes to ensure we have enough to fill the list (limit is 3) + 1 extra
|
||||
await page.goto('/')
|
||||
await page.waitForLoadState('networkidle')
|
||||
|
||||
// Create 4 notes
|
||||
for (let i = 1; i <= 4; i++) {
|
||||
const noteInput = page.locator('[data-testid="note-input-textarea"]')
|
||||
if (await noteInput.isVisible()) {
|
||||
await noteInput.fill(`Recent Note Test ${i} - ${Date.now()}`)
|
||||
await page.locator('button[type="submit"]').click()
|
||||
// Wait for creation
|
||||
await page.waitForTimeout(500)
|
||||
} else {
|
||||
// If input not visible, click "New Note" or "Add Note" button first?
|
||||
// Assuming input is visible or toggleable.
|
||||
// Let's try to just open it if needed.
|
||||
const addBtn = page.locator('button:has-text("New Note")').first()
|
||||
if (await addBtn.isVisible()) {
|
||||
await addBtn.click()
|
||||
}
|
||||
await page.locator('[data-testid="note-input-textarea"]').fill(`Recent Note Test ${i} - ${Date.now()}`)
|
||||
await page.locator('button[type="submit"]').click()
|
||||
await page.waitForTimeout(500)
|
||||
}
|
||||
}
|
||||
|
||||
// Refresh to update recent list
|
||||
await page.reload()
|
||||
await page.waitForLoadState('networkidle')
|
||||
|
||||
const recentSection = page.locator('[data-testid="recent-notes-section"]')
|
||||
await expect(recentSection).toBeVisible()
|
||||
|
||||
// Should see 3 notes
|
||||
const noteCards = recentSection.locator('[data-testid^="note-card-"]')
|
||||
await expect(noteCards).toHaveCount(3)
|
||||
|
||||
// 2. Dismiss one note
|
||||
const firstNote = noteCards.first()
|
||||
// Hover to see the dismiss button
|
||||
await firstNote.hover()
|
||||
const dismissBtn = firstNote.locator('button[title*="Dismiss"], button[title*="Fermer"]') // Trying both EN and FR just in case
|
||||
|
||||
// We might need to force click if hover doesn't work perfectly in test
|
||||
await dismissBtn.click({ force: true })
|
||||
|
||||
// 3. Verify behavior
|
||||
// PRE-FIX: The list refreshes and shows 3 notes (the 4th one pops in)
|
||||
// POST-FIX: The list should show 2 notes
|
||||
|
||||
// We expect 2 notes if the fix works.
|
||||
// If the bug is present, this assertion might fail (it will see 3).
|
||||
// For reproduction, we might want to assert failure or just see what happens.
|
||||
// Let's assert the DESIRED behavior (2 notes).
|
||||
await expect(noteCards).toHaveCount(2)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user