import { describe, expect, test } from 'bun:test' import { computeIsDirty, createQuickNoteModalState, markSaveFailed, markSaveSucceeded, updateDraftContent, } from './quick-note-modal-state' describe('quick-note modal state', () => { test('draft differs from saved => dirty', () => { expect(computeIsDirty({ savedContent: 'a', draftContent: 'b' })).toBe(true) expect(computeIsDirty({ savedContent: 'a', draftContent: 'a' })).toBe(false) }) test('saving success marks state clean', () => { const initial = createQuickNoteModalState('hello') const editing = updateDraftContent(initial, 'hello world') expect(editing.isDirty).toBe(true) const saved = markSaveSucceeded(editing) expect(saved.savedContent).toBe('hello world') expect(saved.draftContent).toBe('hello world') expect(saved.isDirty).toBe(false) expect(saved.lastSaveFailed).toBe(false) }) test('saving failure keeps draft dirty', () => { const initial = createQuickNoteModalState('hello') const editing = updateDraftContent(initial, 'draft changed') const failed = markSaveFailed(editing) expect(failed.savedContent).toBe('hello') expect(failed.draftContent).toBe('draft changed') expect(failed.isDirty).toBe(true) expect(failed.lastSaveFailed).toBe(true) }) test('input after failed save resets lastSaveFailed', () => { const initial = createQuickNoteModalState('hello') const editing = updateDraftContent(initial, 'draft changed') const failed = markSaveFailed(editing) expect(failed.lastSaveFailed).toBe(true) const editedAgain = updateDraftContent(failed, 'draft changed again') expect(editedAgain.lastSaveFailed).toBe(false) expect(editedAgain.isDirty).toBe(true) }) test('save success after a failure clears lastSaveFailed', () => { const initial = createQuickNoteModalState('hello') const failed = markSaveFailed(updateDraftContent(initial, 'draft changed')) const saved = markSaveSucceeded(failed) expect(saved.lastSaveFailed).toBe(false) expect(saved.isDirty).toBe(false) }) })