WIP: Améliorations UX et corrections de bugs avant création des épiques
This commit is contained in:
176
keep-notes/tests/bug-move-direct.spec.ts
Normal file
176
keep-notes/tests/bug-move-direct.spec.ts
Normal file
@@ -0,0 +1,176 @@
|
||||
import { test, expect } from '@playwright/test'
|
||||
|
||||
test.describe('Bug: Move note to notebook - DIRECT TEST', () => {
|
||||
test('BUG: Note should disappear from main page after moving to notebook', async ({ page }) => {
|
||||
const timestamp = Date.now()
|
||||
|
||||
// Step 1: Go to homepage
|
||||
await page.goto('/')
|
||||
await page.waitForLoadState('networkidle')
|
||||
await page.waitForTimeout(2000)
|
||||
|
||||
// Get initial note count
|
||||
const notesBefore = await page.locator('[data-draggable="true"]').count()
|
||||
console.log('[TEST] Initial notes count:', notesBefore)
|
||||
|
||||
// Step 2: Create a test note
|
||||
const testNoteTitle = `TEST-BUG-${timestamp}`
|
||||
const testNoteContent = `Test content ${timestamp}`
|
||||
|
||||
console.log('[TEST] Creating note:', testNoteTitle)
|
||||
|
||||
await page.click('input[placeholder="Take a note..."]')
|
||||
await page.fill('input[placeholder="Title"]', testNoteTitle)
|
||||
await page.fill('textarea[placeholder="Take a note..."]', testNoteContent)
|
||||
await page.click('button:has-text("Add")')
|
||||
await page.waitForTimeout(2000)
|
||||
|
||||
const notesAfterCreation = await page.locator('[data-draggable="true"]').count()
|
||||
console.log('[TEST] Notes after creation:', notesAfterCreation)
|
||||
expect(notesAfterCreation).toBe(notesBefore + 1)
|
||||
|
||||
// Step 3: Create a test notebook
|
||||
console.log('[TEST] Creating notebook')
|
||||
|
||||
// Try to find and click "Create Notebook" button
|
||||
const createNotebookButtons = page.locator('button')
|
||||
const createButtonsCount = await createNotebookButtons.count()
|
||||
console.log('[TEST] Total buttons found:', createButtonsCount)
|
||||
|
||||
// List all button texts for debugging
|
||||
for (let i = 0; i < Math.min(createButtonsCount, 10); i++) {
|
||||
const btn = createNotebookButtons.nth(i)
|
||||
const btnText = await btn.textContent()
|
||||
console.log(`[TEST] Button ${i}: "${btnText?.trim()}"`)
|
||||
}
|
||||
|
||||
// Look for a "+" button or "Créer" button
|
||||
let createBtn = page.locator('button').filter({ hasText: '+' }).first()
|
||||
if (await createBtn.count() === 0) {
|
||||
createBtn = page.locator('button').filter({ hasText: 'Créer' }).first()
|
||||
}
|
||||
|
||||
if (await createBtn.count() > 0) {
|
||||
await createBtn.click()
|
||||
await page.waitForTimeout(500)
|
||||
|
||||
// Try to fill notebook name
|
||||
const testNotebookName = `TEST-NOTEBOOK-${timestamp}`
|
||||
|
||||
// Look for any input field
|
||||
const inputs = page.locator('input')
|
||||
const inputCount = await inputs.count()
|
||||
console.log('[TEST] Input fields found:', inputCount)
|
||||
|
||||
// Fill first input with notebook name
|
||||
if (inputCount > 0) {
|
||||
const firstInput = inputs.first()
|
||||
await firstInput.fill(testNotebookName)
|
||||
|
||||
// Submit the form
|
||||
await page.keyboard.press('Enter')
|
||||
await page.waitForTimeout(2000)
|
||||
|
||||
console.log('[TEST] Notebook created (or attempted)')
|
||||
}
|
||||
} else {
|
||||
console.log('[TEST] No create button found!')
|
||||
}
|
||||
|
||||
// Take screenshot to see current state
|
||||
await page.screenshot({ path: `playwright-report/after-notebook-creation-${timestamp}.png` })
|
||||
console.log('[TEST] Screenshot saved')
|
||||
|
||||
// Step 4: Try to move the note to the notebook using UI
|
||||
console.log('[TEST] Attempting to move note...')
|
||||
|
||||
// Find the note we just created
|
||||
const ourNote = page.locator('[data-draggable="true"]').filter({ hasText: testNoteTitle })
|
||||
const ourNoteCount = await ourNote.count()
|
||||
console.log('[TEST] Our note found:', ourNoteCount)
|
||||
|
||||
if (ourNoteCount > 0) {
|
||||
console.log('[TEST] Found our note, trying to move it')
|
||||
|
||||
// Try to find any button/element in the note card
|
||||
const noteElement = await ourNote.innerHTML()
|
||||
console.log('[TEST] Note HTML:', noteElement.substring(0, 500))
|
||||
|
||||
// Look for any clickable elements in the note
|
||||
const allButtonsInNote = await ourNote.locator('button').all()
|
||||
console.log('[TEST] Buttons in note:', allButtonsInNote.length)
|
||||
|
||||
for (let i = 0; i < allButtonsInNote.length; i++) {
|
||||
const btn = allButtonsInNote[i]
|
||||
const btnText = await btn.textContent()
|
||||
const btnAriaLabel = await btn.getAttribute('aria-label')
|
||||
console.log(`[TEST] Note button ${i}: text="${btnText}" aria-label="${btnAriaLabel}"`)
|
||||
}
|
||||
|
||||
// Take screenshot before move attempt
|
||||
await page.screenshot({ path: `playwright-report/before-move-${timestamp}.png` })
|
||||
|
||||
// Try to click any button that might be related to notebooks
|
||||
if (allButtonsInNote.length > 0) {
|
||||
// Try clicking the first few buttons
|
||||
for (let i = 0; i < Math.min(allButtonsInNote.length, 3); i++) {
|
||||
const btn = allButtonsInNote[i]
|
||||
const btnText = await btn.textContent()
|
||||
|
||||
console.log(`[TEST] Clicking button ${i}: "${btnText}"`)
|
||||
await btn.click()
|
||||
await page.waitForTimeout(1000)
|
||||
|
||||
// Take screenshot after each click
|
||||
await page.screenshot({ path: `playwright-report/after-click-${i}-${timestamp}.png` })
|
||||
|
||||
// Check if a menu opened
|
||||
const menuItems = page.locator('[role="menuitem"], [role="option"]')
|
||||
const menuItemCount = await menuItems.count()
|
||||
console.log(`[TEST] Menu items after click ${i}:`, menuItemCount)
|
||||
|
||||
if (menuItemCount > 0) {
|
||||
// List menu items
|
||||
for (let j = 0; j < Math.min(menuItemCount, 5); j++) {
|
||||
const item = menuItems.nth(j)
|
||||
const itemText = await item.textContent()
|
||||
console.log(`[TEST] Menu item ${j}: "${itemText}"`)
|
||||
}
|
||||
|
||||
// Try to click the first menu item (likely our notebook)
|
||||
const firstMenuItem = menuItems.first()
|
||||
await firstMenuItem.click()
|
||||
await page.waitForTimeout(2000)
|
||||
break
|
||||
}
|
||||
|
||||
// Close menu if any (press Escape)
|
||||
await page.keyboard.press('Escape')
|
||||
await page.waitForTimeout(500)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// CRITICAL: Check if note is still visible WITHOUT refresh
|
||||
await page.waitForTimeout(2000)
|
||||
|
||||
const ourNoteAfterMove = await page.locator('[data-draggable="true"]').filter({ hasText: testNoteTitle }).count()
|
||||
const allNotesAfterMove = await page.locator('[data-draggable="true"]').count()
|
||||
|
||||
console.log('[TEST] ===== RESULTS =====')
|
||||
console.log('[TEST] Our note still visible in main page:', ourNoteAfterMove)
|
||||
console.log('[TEST] Total notes in main page:', allNotesAfterMove)
|
||||
|
||||
// Take final screenshot
|
||||
await page.screenshot({ path: `playwright-report/final-state-${timestamp}.png` })
|
||||
console.log('[TEST] Final screenshot saved')
|
||||
|
||||
// THE BUG: If ourNoteAfterMove === 1, the note is still visible - triggerRefresh() didn't work!
|
||||
if (ourNoteAfterMove === 1) {
|
||||
console.log('[BUG CONFIRMED] triggerRefresh() is NOT working - note still visible!')
|
||||
console.log('[BUG CONFIRMED] This is the exact bug the user reported')
|
||||
} else {
|
||||
console.log('[SUCCESS] Note disappeared from main page - triggerRefresh() worked!')
|
||||
}
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user