ItemValueTests.swift (2241B)
1 import Foundation 2 import Testing 3 4 #if os(macOS) 5 @testable import Listless 6 #else 7 @testable import Listless_iOS 8 #endif 9 10 @Suite("ItemValue Snapshot", .serialized) 11 @MainActor 12 struct ItemValueTests { 13 14 @Test("ItemValue copies all fields from active ItemEntity") 15 func snapshotActiveItem() async throws { 16 let store = makeTestStore() 17 let entity = try store.createItem(title: "Buy milk") 18 try store.save() 19 20 let value = ItemValue(entity) 21 22 #expect(value.id == entity.id) 23 #expect(value.title == entity.title) 24 #expect(value.isCompleted == false) 25 #expect(value.sortOrder == entity.sortOrder) 26 #expect(value.completedOrder == 0) 27 } 28 29 @Test("ItemValue copies completed state correctly") 30 func snapshotCompletedItem() async throws { 31 let store = makeTestStore() 32 let entity = try store.createItem(title: "Done task") 33 try store.save() 34 try store.complete(itemID: entity.id) 35 36 let items = try store.fetchItems() 37 let completed = items.first { $0.id == entity.id }! 38 let value = ItemValue(completed) 39 40 #expect(value.isCompleted == true) 41 #expect(value.completedOrder > 0) 42 #expect(value.completedOrder == completed.completedOrder) 43 } 44 45 @Test("ItemValue is independent of entity mutations") 46 func snapshotIndependence() async throws { 47 let store = makeTestStore() 48 let entity = try store.createItem(title: "Original") 49 try store.save() 50 51 let value = ItemValue(entity) 52 try store.update(itemID: entity.id, title: "Changed") 53 54 #expect(value.title == "Original") 55 #expect(entity.title == "Changed") 56 } 57 58 @Test("ItemValue preserves sort order from entity") 59 func snapshotSortOrder() async throws { 60 let (store, ids) = try makeTestStoreWithItems(count: 3) 61 let items = try store.fetchItems() 62 63 let values = items.filter { !$0.isCompleted }.map { ItemValue($0) } 64 65 #expect(values.count == 3) 66 for (i, value) in values.enumerated() { 67 #expect(value.id == ids[i]) 68 } 69 #expect(values[0].sortOrder < values[1].sortOrder) 70 #expect(values[1].sortOrder < values[2].sortOrder) 71 } 72 }