← All repositories

listless

A simple list app for Apple platforms

git clone https://code.inqk.net/listless.git


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}