listless

A simple list app for Apple platforms
Log | Files | Refs | README | LICENSE

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 }