177 lines
6.8 KiB
TypeScript
177 lines
6.8 KiB
TypeScript
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!')
|
|
}
|
|
})
|
|
})
|