WIP: Améliorations UX et corrections de bugs avant création des épiques
This commit is contained in:
194
keep-notes/tests/bug-note-visibility.spec.ts
Normal file
194
keep-notes/tests/bug-note-visibility.spec.ts
Normal file
@@ -0,0 +1,194 @@
|
||||
import { test, expect } from '@playwright/test'
|
||||
|
||||
test.describe('Bug: Note visibility after creation', () => {
|
||||
test('should display note immediately after creation in inbox WITHOUT page refresh', async ({ page }) => {
|
||||
const timestamp = Date.now()
|
||||
|
||||
// Step 1: Go to homepage
|
||||
await page.goto('/')
|
||||
await page.waitForLoadState('networkidle')
|
||||
await page.waitForTimeout(2000)
|
||||
|
||||
// Step 2: Count notes before creation
|
||||
const notesBefore = await page.locator('[data-draggable="true"]').count()
|
||||
console.log('[TEST] Notes count before creation:', notesBefore)
|
||||
|
||||
// Step 3: Create a test note in inbox
|
||||
const testNoteTitle = `TEST-${timestamp}-Visibility Inbox`
|
||||
const testNoteContent = `This is a test note to verify visibility bug. Timestamp: ${timestamp}`
|
||||
|
||||
console.log('[TEST] Creating test note in inbox:', testNoteTitle)
|
||||
|
||||
// Click the note input
|
||||
const noteInput = page.locator('input[placeholder*="Take a note"], textarea[placeholder*="Take a note"]').first()
|
||||
await noteInput.click()
|
||||
await page.waitForTimeout(500)
|
||||
|
||||
// Fill title if input exists
|
||||
const titleInput = page.locator('input[placeholder*="Title"], input[name="title"]').first()
|
||||
if (await titleInput.count() > 0) {
|
||||
await titleInput.fill(testNoteTitle)
|
||||
await page.waitForTimeout(300)
|
||||
}
|
||||
|
||||
// Fill content
|
||||
const contentInput = page.locator('textarea[placeholder*="Take a note"], textarea').first()
|
||||
await contentInput.fill(testNoteContent)
|
||||
await page.waitForTimeout(300)
|
||||
|
||||
// Submit note
|
||||
const submitBtn = page.locator('button:has-text("Add"), button:has-text("Ajouter"), button[type="submit"]').first()
|
||||
await submitBtn.click()
|
||||
await page.waitForTimeout(2000)
|
||||
|
||||
// Step 4: Verify note appears immediately WITHOUT refresh
|
||||
const notesAfter = await page.locator('[data-draggable="true"]').count()
|
||||
console.log('[TEST] Notes count after creation (NO REFRESH):', notesAfter)
|
||||
|
||||
// Note count should increase
|
||||
expect(notesAfter).toBeGreaterThan(notesBefore)
|
||||
|
||||
// Verify the note is visible with the correct title
|
||||
const noteCards = page.locator('[data-draggable="true"]')
|
||||
let noteFound = false
|
||||
const noteCount = await noteCards.count()
|
||||
|
||||
for (let i = 0; i < noteCount; i++) {
|
||||
const noteText = await noteCards.nth(i).textContent()
|
||||
if (noteText?.includes(testNoteTitle) || noteText?.includes(testNoteContent.substring(0, 20))) {
|
||||
noteFound = true
|
||||
console.log('[SUCCESS] Note found immediately after creation!')
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
expect(noteFound).toBe(true)
|
||||
})
|
||||
|
||||
test('should display note immediately after creation in notebook WITHOUT page refresh', async ({ page }) => {
|
||||
const timestamp = Date.now()
|
||||
|
||||
// Step 1: Go to homepage
|
||||
await page.goto('/')
|
||||
await page.waitForLoadState('networkidle')
|
||||
await page.waitForTimeout(2000)
|
||||
|
||||
// Step 2: Create a test notebook
|
||||
const testNotebookName = `TEST-NOTEBOOK-${timestamp}`
|
||||
console.log('[TEST] Creating test notebook:', testNotebookName)
|
||||
|
||||
const createNotebookBtn = page.locator('button:has-text("Créer"), button:has-text("Create"), button:has-text("+")').first()
|
||||
await createNotebookBtn.click()
|
||||
await page.waitForTimeout(500)
|
||||
|
||||
const notebookInput = page.locator('input[name="name"], input[placeholder*="notebook"], input[placeholder*="nom"]').first()
|
||||
await notebookInput.fill(testNotebookName)
|
||||
|
||||
const submitNotebookBtn = page.locator('button:has-text("Créer"), button:has-text("Create"), button[type="submit"]').first()
|
||||
await submitNotebookBtn.click()
|
||||
await page.waitForTimeout(2000)
|
||||
|
||||
// Step 3: Select the notebook
|
||||
const notebooksList = page.locator('[class*="notebook"], [class*="sidebar"]')
|
||||
const notebookItem = notebooksList.locator(`text=${testNotebookName}`).first()
|
||||
await notebookItem.click()
|
||||
await page.waitForTimeout(2000)
|
||||
|
||||
// Step 4: Count notes in notebook before creation
|
||||
const notesBefore = await page.locator('[data-draggable="true"]').count()
|
||||
console.log('[TEST] Notes count in notebook before creation:', notesBefore)
|
||||
|
||||
// Step 5: Create a test note in the notebook
|
||||
const testNoteTitle = `TEST-${timestamp}-Visibility Notebook`
|
||||
const testNoteContent = `This is a test note in notebook. Timestamp: ${timestamp}`
|
||||
|
||||
console.log('[TEST] Creating test note in notebook:', testNoteTitle)
|
||||
|
||||
// Click the note input
|
||||
const noteInput = page.locator('input[placeholder*="Take a note"], textarea[placeholder*="Take a note"]').first()
|
||||
await noteInput.click()
|
||||
await page.waitForTimeout(500)
|
||||
|
||||
// Fill title if input exists
|
||||
const titleInput = page.locator('input[placeholder*="Title"], input[name="title"]').first()
|
||||
if (await titleInput.count() > 0) {
|
||||
await titleInput.fill(testNoteTitle)
|
||||
await page.waitForTimeout(300)
|
||||
}
|
||||
|
||||
// Fill content
|
||||
const contentInput = page.locator('textarea[placeholder*="Take a note"], textarea').first()
|
||||
await contentInput.fill(testNoteContent)
|
||||
await page.waitForTimeout(300)
|
||||
|
||||
// Submit note
|
||||
const submitBtn = page.locator('button:has-text("Add"), button:has-text("Ajouter"), button[type="submit"]').first()
|
||||
await submitBtn.click()
|
||||
await page.waitForTimeout(2000)
|
||||
|
||||
// Step 6: Verify note appears immediately WITHOUT refresh
|
||||
const notesAfter = await page.locator('[data-draggable="true"]').count()
|
||||
console.log('[TEST] Notes count in notebook after creation (NO REFRESH):', notesAfter)
|
||||
|
||||
// Note count should increase
|
||||
expect(notesAfter).toBeGreaterThan(notesBefore)
|
||||
|
||||
// Verify the note is visible with the correct title
|
||||
const noteCards = page.locator('[data-draggable="true"]')
|
||||
let noteFound = false
|
||||
const noteCount = await noteCards.count()
|
||||
|
||||
for (let i = 0; i < noteCount; i++) {
|
||||
const noteText = await noteCards.nth(i).textContent()
|
||||
if (noteText?.includes(testNoteTitle) || noteText?.includes(testNoteContent.substring(0, 20))) {
|
||||
noteFound = true
|
||||
console.log('[SUCCESS] Note found immediately after creation in notebook!')
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
expect(noteFound).toBe(true)
|
||||
})
|
||||
|
||||
test('should maintain scroll position after note creation', async ({ page }) => {
|
||||
const timestamp = Date.now()
|
||||
|
||||
// Step 1: Go to homepage
|
||||
await page.goto('/')
|
||||
await page.waitForLoadState('networkidle')
|
||||
await page.waitForTimeout(2000)
|
||||
|
||||
// Step 2: Scroll down a bit
|
||||
await page.evaluate(() => window.scrollTo(0, 300))
|
||||
await page.waitForTimeout(500)
|
||||
|
||||
// Get scroll position before
|
||||
const scrollBefore = await page.evaluate(() => window.scrollY)
|
||||
console.log('[TEST] Scroll position before creation:', scrollBefore)
|
||||
|
||||
// Step 3: Create a test note
|
||||
const testNoteContent = `TEST-${timestamp}-Scroll Position`
|
||||
|
||||
console.log('[TEST] Creating test note...')
|
||||
|
||||
const noteInput = page.locator('input[placeholder*="Take a note"], textarea[placeholder*="Take a note"]').first()
|
||||
await noteInput.click()
|
||||
await page.waitForTimeout(500)
|
||||
|
||||
const contentInput = page.locator('textarea[placeholder*="Take a note"], textarea').first()
|
||||
await contentInput.fill(testNoteContent)
|
||||
await page.waitForTimeout(300)
|
||||
|
||||
const submitBtn = page.locator('button:has-text("Add"), button:has-text("Ajouter"), button[type="submit"]').first()
|
||||
await submitBtn.click()
|
||||
await page.waitForTimeout(2000)
|
||||
|
||||
// Step 4: Verify scroll position is maintained (should be similar, not reset to 0)
|
||||
const scrollAfter = await page.evaluate(() => window.scrollY)
|
||||
console.log('[TEST] Scroll position after creation:', scrollAfter)
|
||||
|
||||
// Scroll position should be maintained (not reset to 0)
|
||||
// Allow some tolerance for UI updates
|
||||
expect(Math.abs(scrollAfter - scrollBefore)).toBeLessThan(100)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user