test(10-05): Wave 0 skeleton + dropdown stubs (UX-02, UX-03, UX-04, UX-13, UX-14)

- StorageBrowser.skeleton.test.js: 7 it.todo stubs for UX-02 skeleton rows + UX-13 Teleport dropdown
- AppSidebar.empty.test.js: 10 it.todo stubs for UX-03 skeleton, UX-01 micro empty states, UX-14 inline-New removal
- AdminAuditView.skeleton.test.js: 5 it.todo stubs for UX-04 audit skeleton + UX-01 empty state
- AdminUsersView.skeleton.test.js: 3 it.todo stubs for UX-04 users skeleton
- dropdown.test.js: 4 it.todo stubs for UX-13 Teleport+getBoundingClientRect pattern
This commit is contained in:
curo1305
2026-06-15 20:11:40 +02:00
parent d3d3f711eb
commit 75970352fc
5 changed files with 61 additions and 0 deletions
@@ -0,0 +1,20 @@
import { describe, it } from 'vitest'
describe('UX-03: AppSidebar shows skeleton placeholders while loading', () => {
it.todo('renders skeleton rows in folder section when loadingRoots=true')
it.todo('renders skeleton rows in topics section when topicsStore.loading=true')
it.todo('renders skeleton rows in cloud section when loadingCloudConnections=true')
it.todo('Loading… text is removed from all three sections')
})
describe('UX-01 (sidebar micro): EmptyState size=sm appears when each section is empty', () => {
it.todo('folders empty: EmptyState size=sm with icon=folder')
it.todo('topics empty: EmptyState size=sm with icon=tag')
it.todo('cloud empty: EmptyState size=sm with icon=cloud and a Settings link in #cta')
})
describe('UX-14: AppSidebar no longer renders an inline "New" folder button', () => {
it.todo('no <button> with text "New" exists in the rendered template')
it.todo('startNewFolder/cancelNewFolder/submitNewFolder methods are removed')
it.todo('newFolderName/showNewFolderInput state is removed')
})
@@ -0,0 +1,14 @@
import { describe, it } from 'vitest'
describe('UX-02: StorageBrowser shows skeleton rows during loading', () => {
it.todo('renders 5+ skeleton rows when loading=true (replaces Loading… text)')
it.todo('skeleton rows use grid-cols-[2rem_1fr_6rem_8rem_6rem] matching real row grid')
it.todo('skeleton rows use animate-pulse')
it.todo('Loading… text is absent when loading=true (skeleton replaces it)')
})
describe('UX-13: StorageBrowser folder picker uses Teleport + getBoundingClientRect', () => {
it.todo('folder picker dropdown is teleported to body (escapes overflow container)')
it.todo('dropdown position reflects getBoundingClientRect of the trigger button')
it.todo('window scroll while open recalculates position')
})
@@ -0,0 +1,8 @@
import { describe, it } from 'vitest'
describe('UX-13: Teleport + getBoundingClientRect dropdown pattern across components', () => {
it.todo('DocumentCard folder picker uses Teleport to body')
it.todo('DocumentCard folder picker position matches trigger getBoundingClientRect')
it.todo('FolderRow three-dot menu uses Teleport to body')
it.todo('FolderRow three-dot menu repositions on window scroll')
})
@@ -0,0 +1,12 @@
import { describe, it } from 'vitest'
describe('UX-04: AdminAuditView shows skeleton table rows during loading', () => {
it.todo('renders 5+ skeleton <tr> rows when loading=true')
it.todo('skeleton rows have 5 columns matching the real table header')
it.todo('animated spinner Loading audit log… text is removed')
})
describe('UX-01 (audit empty): EmptyState renders when entries is empty after load', () => {
it.todo('EmptyState icon=clipboardList headline="No entries found" appears when entries.length===0 and not loading')
it.todo('clear-filters button rendered in #cta slot')
})
@@ -0,0 +1,7 @@
import { describe, it } from 'vitest'
describe('UX-04: AdminUsersView shows skeleton table rows during loading', () => {
it.todo('renders 5+ skeleton <tr> rows when loading=true')
it.todo('skeleton rows have 6 columns matching the real table header')
it.todo('animated spinner Loading users… text is removed')
})