import pytest from pocketbook.store import NoteStore from pocketbook.note import Note class TestNoteStoreCreate: def test_create_note(self, notes_dir): store = NoteStore(notes_dir) filename = store.create("My Title", "My Body") assert (notes_dir / filename).exists() content = (notes_dir / filename).read_text() assert content == "My Title\n\nMy Body" def test_create_assigns_incrementing_order(self, notes_dir): store = NoteStore(notes_dir) f1 = store.create("First", "") f2 = store.create("Second", "") assert Note.parse_order(f1) == 1 assert Note.parse_order(f2) == 2 def test_create_auto_creates_directory(self, tmp_path): d = tmp_path / "nonexistent" / "pocketbook" store = NoteStore(d) filename = store.create("Test", "body") assert d.exists() assert (d / filename).exists() class TestNoteStoreList: def test_list_empty(self, notes_dir): # Remove the sample file if any fixture created one for f in notes_dir.iterdir(): f.unlink() store = NoteStore(notes_dir) assert store.list_notes() == [] def test_list_returns_sorted_by_order(self, notes_dir): (notes_dir / "0002-20260101-120000-abc12.txt").write_text("B\n\nbody b") (notes_dir / "0001-20260101-120000-def34.txt").write_text("A\n\nbody a") (notes_dir / "0003-20260101-120000-ghi56.txt").write_text("C\n\nbody c") store = NoteStore(notes_dir) notes = store.list_notes() assert len(notes) == 3 assert notes[0][1].title == "A" assert notes[1][1].title == "B" assert notes[2][1].title == "C" def test_list_skips_non_txt_files(self, notes_dir): (notes_dir / "0001-20260101-120000-abc12.txt").write_text("Note\n\nbody") (notes_dir / "README.md").write_text("not a note") store = NoteStore(notes_dir) assert len(store.list_notes()) == 1 def test_list_skips_corrupted_filenames(self, notes_dir): (notes_dir / "0001-20260101-120000-abc12.txt").write_text("Good\n\nbody") (notes_dir / "bad-name.txt").write_text("Bad\n\nbody") store = NoteStore(notes_dir) notes = store.list_notes() assert len(notes) == 1 assert notes[0][1].title == "Good" class TestNoteStoreUpdate: def test_update_note(self, notes_dir): fname = "0001-20260101-120000-abc12.txt" (notes_dir / fname).write_text("Old Title\n\nOld body") store = NoteStore(notes_dir) store.update(fname, "New Title", "New body") content = (notes_dir / fname).read_text() assert content == "New Title\n\nNew body" def test_update_nonexistent_raises(self, notes_dir): store = NoteStore(notes_dir) with pytest.raises(FileNotFoundError): store.update("0099-20260101-120000-nope0.txt", "T", "B") class TestNoteStoreDelete: def test_delete_note(self, notes_dir): fname = "0001-20260101-120000-abc12.txt" (notes_dir / fname).write_text("Delete me\n\nbody") store = NoteStore(notes_dir) store.delete(fname) assert not (notes_dir / fname).exists() def test_delete_nonexistent_raises(self, notes_dir): store = NoteStore(notes_dir) with pytest.raises(FileNotFoundError): store.delete("0099-20260101-120000-nope0.txt") class TestNoteStoreReorder: def test_reorder_renumbers_files(self, notes_dir): # Create files with gaps in ordering (notes_dir / "0001-20260101-120000-aaa11.txt").write_text("A\n\na") (notes_dir / "0005-20260101-120000-bbb22.txt").write_text("B\n\nb") (notes_dir / "0010-20260101-120000-ccc33.txt").write_text("C\n\nc") store = NoteStore(notes_dir) store.reorder() notes = store.list_notes() assert Note.parse_order(notes[0][0]) == 1 assert Note.parse_order(notes[1][0]) == 2 assert Note.parse_order(notes[2][0]) == 3