import Foundation import Testing @testable import Peered @Suite struct NotesStorageTests { private func makeStorage(root: URL = URL(filePath: "/test")) -> ( NotesStorage, InMemoryStorageProvider ) { let provider = InMemoryStorageProvider() let storage = NotesStorage(storageProvider: provider, rootDirectory: root) return (storage, provider) } @Test func loadNotesReturnsEmptyArrayWhenNoFiles() { let (storage, _) = makeStorage() let notes = storage.loadNotes() #expect(notes.isEmpty) } @Test func createNoteCreatesFile() { let root = URL(filePath: "/test") let (storage, provider) = makeStorage(root: root) storage.createNote(name: "My note") #expect(!provider.files.isEmpty) } @Test func loadNotesReturnCreatedNote() { let root = URL(filePath: "/test") let (storage, provider) = makeStorage(root: root) let filePath = root.appendingPathComponent("Note").path provider.createFile(atPath: filePath, contents: Data(), attributes: nil) let notes = storage.loadNotes() #expect(notes.count == 1) #expect(notes.first?.name == "Note") } @Test func createNoteDeduplicatesNames() { let root = URL(filePath: "/test") let (storage, provider) = makeStorage(root: root) let existingPath = root.appendingPathComponent("Note").path provider.createFile(atPath: existingPath, contents: Data(), attributes: nil) storage.createNote(name: "Note") #expect(provider.files.count == 2) let paths = provider.files.keys #expect(paths.contains(where: { $0.contains("Note 1") })) } @Test func createNoteTwiceCreatesTwoFiles() { let root = URL(filePath: "/test") let (storage, _) = makeStorage(root: root) storage.createNote(name: "Note") storage.createNote(name: "Note") let notes = storage.loadNotes() #expect(notes.count == 2) } }