Notes editor: integration test checklist
The notes editor prototype is frontend-only. It keeps notes in localStorage and fakes saving and sharing. Use this list when it is wired to the Testpress Python backend. Section A is what the backend must supply. The other sections are things to re-verify in the real UI.
A. Backend and data requirements (faked in the prototype)
Notes
Create, read, update and delete (move to trash) a note, per user.
Autosave is debounced, runs in the background, and never loses text typed while a save is in flight.
Saves survive offline or a failed request. Show "Saving...", "Saved" and "Couldn't save" states and retry.
Concurrent edits in two tabs: define conflict behaviour. The prototype has none.
Note content is stored as TipTap JSON or HTML. Decide which, and sanitise it server-side.
Round-trip fidelity: headings, lists, tasks, quote, code, divider, callout, toggle, table, bold, italic, highlight, strike, inline code and links all reload exactly as saved.
The title is the first line of the note. The list shows the title plus a preview.
Recency ordering and the date groups (Today, Yesterday, Previous 7 days, months) use server time and the user's timezone, not the browser clock.
Trash and undo: deleted notes can be restored. Decide retention and permanent deletion. Bulk delete must be one call.
Folders and tags
Shared with me (read-only)
Search
General
B. Integration with the real Testpress page
C. Editor behaviour to re-test
Title and focus
Slash menu
/ opens the menu. Filtering by typing works, including keywords.
Up/down moves the highlight and scrolls it into view, Enter inserts, Esc closes.
Page scroll is locked while the menu is open.
The menu stays in the viewport and flips or clamps near the bottom of the screen.
The preview card shows the right sample for every block, in light and dark mode.
Every block inserts correctly: text, H1-H3, bullet, numbered, checklist, quote, code, divider, callout, toggle, table, and the advanced blocks.
There are no "undefined" labels or empty groups.
No matching blocks shows the empty state and the "Close menu" footer.
Bubble menu (desktop)
Formatting and shortcuts
Bold, italic, strike, code, highlight and link work by keyboard and by button.
Markdown shortcuts work: #, -, 1., [], >, three backticks, ---.
Task checkboxes toggle with click and keyboard and show the strike-through style.
Nested lists and tasks indent and outdent correctly.
Undo and redo work across every block type and across table operations.
Paste: plain text, rich text from the web, links, tables from Sheets or Excel, and images (decide whether images are supported).
Tables
Insert a table. The default is 3x3 with a header row.
The row and column grips appear on hover only, with the thin strips as designed.
Add row and add column strips appear near the edge and add at the correct position.
Click a grip for the menu: insert before/after, delete, move, header toggle. Delete is clearly marked as dangerous.
Multi-select rows or columns and delete, using drag selection, Shift+arrows or Shift-click.
Drag a grip to reorder. A ghost and a drop line show, and the order changes on drop.
Keyboard-only: delete row, delete column, insert row below, plus the F10 menu route. Shortcut hints are visible in the menu and the help text.
The last remaining row or column can't be deleted by accident.
A wide table scrolls horizontally with a visible scrollbar, and the cursor over the scrollbar is a pointer rather than a text cursor.
The strips don't grow outside the scroll area.
The active-cell outline and selected-cell tint show correctly.
Tables are not editable in the shared read-only view.
Callout and toggle
Read-only mode
Keyboard help
D. Library, nav and list
Layouts
Nav pane
Folder and tag popovers
Note list
Meta line (under the title)
E. Mobile and touch (needs real iOS and Android devices)
The prototype was only tested with browser emulation.
iOS Safari and Android Chrome: the soft keyboard doesn't cover the format bar. The bar tracks visualViewport.
The format bar and block tray ("Aa") work. Active-state buttons show correctly.
Tapping places the caret without scrolling the page unexpectedly.
Tap targets are at least 44px.
Selecting text shows the mobile selection bar (Turn into, Link and others), not the desktop bubble.
The link row accepts input, and the 16px input font prevents iOS zoom.
The Notes back button, the list/editor transition and the browser Back gesture work. A swipe-back doesn't lose edits.
Long-press, text selection handles and the native context menu don't clash with the app's controls.
Table controls are intentionally hidden on phones. Confirm tables can still be read, scrolled and edited by typing.
Drag and drop and hover-only features have a touch alternative, or are consciously dropped.
The slash menu on mobile: width, scroll and no preview card (the preview is hidden under 1024px).
The virtual-keyboard shortcut toggle works. Hardware keyboard shortcuts work on iPad.
Safe areas and notch handling, landscape orientation and 100dvh behaviour.
IME and composition input (Hindi, Tamil, Japanese and others): the slash menu, markdown shortcuts and title Tab/Enter must not break while composing. The prototype couldn't test this.
Autocorrect, autocapitalisation and spellcheck behave sensibly. Spellcheck is on in the editor.
F. Accessibility
Everything works with keyboard only: nav, list, editor, popovers, tables and bulk select.
Visible focus rings everywhere, and logical tab order (title to body).
Screen reader roles and labels: listbox/option for the slash menu and popovers, aria-activedescendant, aria-expanded, aria-pressed, a labelled editor ("Note editor"), and the dialogs.
Live-region announcements for save state, undo toasts and menu results.
Colour contrast in light and dark mode for muted text such as placeholders, the meta line, hints and disabled buttons. Several greys are quite light.
prefers-reduced-motion is respected.
Zoom to 200% and large text don't break the layout.
Focus is restored to the right place after a popover, a dialog or a delete.
G. Visual and theming
Light and dark mode for every surface: editor, nav, list, popovers, tables, callout, code block, highlight, chips, the preview card, and the mobile bar and tray.
Dark mode with the real Testpress theme switch (the prototype toggles the dark class on <html>).
Each institute colour theme: primary-50 to primary-900 are used for accents, selection and active states.
Long text: very long titles, folder names, tag names, words without spaces and long links wrap or truncate cleanly.
Large content: hundreds of notes, a 50x20 table, long documents. Check scroll performance and render time.
Empty and first-run experience, with a seed or onboarding note decided.
Print layout, if needed.
H. Security and robustness
I. Known gaps and decisions to settle before integration
Images and attachments in notes are not built.
Real sharing, comments and collaboration aren't built. Shared notes in the prototype are fixed seed data.
No real conflict resolution or multi-device sync.
The simulated panels (sim-shortcuts and the prototype panel) must be removed.
Search is a client-side substring match over local data.
The pin limit, trash retention and tag and folder naming rules need product decisions.
iOS and Android behaviour and IME input are untested on real hardware.
Not checked after the Tailwind conversion: dark mode on the mobile "Turn into" menu and the slash-menu sample blocks (checklist, callout, toggle, table), plus small leftover mobile screenshot shifts.