Skip to content

Commit 8f10aee

Browse files
Fixed an issue where the datastore root would be lost when loading a persistence from disk
1 parent 5a9ba8d commit 8f10aee

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

Sources/CodableDatastore/Persistence/Disk Persistence/Snapshot/Snapshot.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,6 @@ extension Snapshot {
329329
let datastore = DiskPersistence<AccessMode>.Datastore(id: datastoreInfo.id, snapshot: self)
330330
datastores[datastoreInfo.id] = datastore
331331

332-
return (datastore, nil)
332+
return (datastore, datastoreInfo.root)
333333
}
334334
}

Tests/CodableDatastoreTests/DiskPersistenceDatastoreTests.swift

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,59 @@ final class DiskPersistenceDatastoreTests: XCTestCase {
5151
XCTAssertEqual(count, 3)
5252
}
5353

54+
func testLoadingEntriesFromDisk() async throws {
55+
enum Version: Int, CaseIterable {
56+
case zero
57+
}
58+
59+
struct TestStruct: Codable, Identifiable {
60+
var id: String
61+
var value: String
62+
}
63+
64+
do {
65+
let persistence = try DiskPersistence(readWriteURL: temporaryStoreURL)
66+
67+
let datastore = Datastore.JSONStore(
68+
persistence: persistence,
69+
key: "test",
70+
version: Version.zero,
71+
migrations: [
72+
.zero: { data, decoder in
73+
try decoder.decode(TestStruct.self, from: data)
74+
}
75+
]
76+
)
77+
78+
try await datastore.persist(TestStruct(id: "3", value: "My name is Dimitri"))
79+
try await datastore.persist(TestStruct(id: "1", value: "Hello, World!"))
80+
try await datastore.persist(TestStruct(id: "2", value: "Twenty Three is Number One"))
81+
} catch { throw error }
82+
83+
/// Create a brand new persistence and load the entries we saved
84+
let persistence = try DiskPersistence(readWriteURL: temporaryStoreURL)
85+
86+
let datastore = Datastore.JSONStore(
87+
persistence: persistence,
88+
key: "test",
89+
version: Version.zero,
90+
migrations: [
91+
.zero: { data, decoder in
92+
try decoder.decode(TestStruct.self, from: data)
93+
}
94+
]
95+
)
96+
let count = try await datastore.count
97+
XCTAssertEqual(count, 3)
98+
99+
let entry1 = try await datastore.load("1")
100+
XCTAssertEqual(entry1?.value, "Hello, World!")
101+
let entry2 = try await datastore.load("2")
102+
XCTAssertEqual(entry2?.value, "Twenty Three is Number One")
103+
let entry3 = try await datastore.load("3")
104+
XCTAssertEqual(entry3?.value, "My name is Dimitri")
105+
}
106+
54107
func testWritingEntryWithIndex() async throws {
55108
enum Version: Int, CaseIterable {
56109
case zero

0 commit comments

Comments
 (0)