Tests/Unit/ItemValueTests.swift (2241B)
1import Foundation
2import 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
12struct 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}