Skip to content

Commit 5de1889

Browse files
Rspoon3mbrandonw
andauthored
Fix mock CKAsset temp path in previews (#392)
* Fix preview temp directory for CKAsset * reverted last commit * forgot the foundation import from the revision * fix * added tests * Use InMemoryDataManager for previews and fixed tests. * Update inline snapshots. * Delete Tests/SQLiteDataTests/Internal/TemporaryDirectoryDataManager.swift --------- Co-authored-by: Brandon Williams <mbrandonw@hey.com> Co-authored-by: Brandon Williams <135203+mbrandonw@users.noreply.github.com>
1 parent 9847686 commit 5de1889

5 files changed

Lines changed: 35 additions & 8 deletions

File tree

Package.resolved

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/SQLiteData/CloudKit/Internal/DataManager.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
}
7878

7979
package var temporaryDirectory: URL {
80-
URL(fileURLWithPath: "/")
80+
URL(fileURLWithPath: "/tmp")
8181
}
8282
}
8383

@@ -86,6 +86,9 @@
8686
static var liveValue: any DataManager {
8787
LiveDataManager()
8888
}
89+
static var previewValue: any DataManager {
90+
InMemoryDataManager()
91+
}
8992
static var testValue: any DataManager {
9093
InMemoryDataManager()
9194
}

Sources/SQLiteData/CloudKit/Internal/MockCloudDatabase.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
for key in record.allKeys() {
6161
guard let assetData = state.assets[AssetID(recordID: record.recordID, key: key)]
6262
else { continue }
63-
let url = URL(filePath: UUID().uuidString.lowercased())
63+
let url = dataManager.wrappedValue.temporaryDirectory.appending(path: UUID().uuidString)
6464
try dataManager.wrappedValue.save(assetData, to: url)
6565
record[key] = CKAsset(fileURL: url)
6666
}

Tests/SQLiteDataTests/CloudKitTests/AssetsTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
coverImage_hash: Data(32 bytes),
3838
remindersListID: 1,
3939
coverImage: CKAsset(
40-
fileURL: URL(file:///6105d6cc76af400325e94d588ce511be5bfdbb73b437dc51eca43917d7a43e3d),
40+
fileURL: URL(file:///tmp/6105d6cc76af400325e94d588ce511be5bfdbb73b437dc51eca43917d7a43e3d),
4141
dataString: "image"
4242
)
4343
),
@@ -61,7 +61,7 @@
6161

6262
inMemoryDataManager.storage.withValue { storage in
6363
let url = URL(
64-
string: "file:///6105d6cc76af400325e94d588ce511be5bfdbb73b437dc51eca43917d7a43e3d"
64+
string: "file:///tmp/6105d6cc76af400325e94d588ce511be5bfdbb73b437dc51eca43917d7a43e3d"
6565
)!
6666
#expect(storage[url] == Data("image".utf8))
6767
}
@@ -93,7 +93,7 @@
9393
coverImage_hash: Data(32 bytes),
9494
remindersListID: 1,
9595
coverImage: CKAsset(
96-
fileURL: URL(file:///97e67a5645969953f1a4cfe2ea75649864ff99789189cdd3f6db03e59f8a8ebf),
96+
fileURL: URL(file:///tmp/97e67a5645969953f1a4cfe2ea75649864ff99789189cdd3f6db03e59f8a8ebf),
9797
dataString: "new-image"
9898
)
9999
),
@@ -117,7 +117,7 @@
117117

118118
inMemoryDataManager.storage.withValue { storage in
119119
let url = URL(
120-
string: "file:///97e67a5645969953f1a4cfe2ea75649864ff99789189cdd3f6db03e59f8a8ebf"
120+
string: "file:///tmp/97e67a5645969953f1a4cfe2ea75649864ff99789189cdd3f6db03e59f8a8ebf"
121121
)!
122122
#expect(storage[url] == Data("new-image".utf8))
123123
}

Tests/SQLiteDataTests/CloudKitTests/MockCloudDatabaseTests.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,30 @@
4646
#expect(error == CKError(.unknownItem))
4747
}
4848

49+
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
50+
@Test func assetsUseTemporaryDirectory() async throws {
51+
let recordID = CKRecord.ID(recordName: "record")
52+
let record = CKRecord(recordType: "Record", recordID: recordID)
53+
let sourceURL = URL(fileURLWithPath: "/sqlite-data-test-assets/asset.jpg")
54+
try inMemoryDataManager.save(Data("image".utf8), to: sourceURL)
55+
record["asset"] = CKAsset(fileURL: sourceURL)
56+
57+
let database = syncEngine.private.database
58+
let (saveResults, _) = try database.modifyRecords(
59+
saving: [record],
60+
deleting: []
61+
)
62+
_ = try saveResults[recordID]?.get()
63+
64+
let fetched = try database.record(for: recordID)
65+
let asset = fetched["asset"] as? CKAsset
66+
let assetDirectory = try #require(asset?.fileURL?.path())
67+
#expect(
68+
assetDirectory
69+
.hasPrefix(inMemoryDataManager.temporaryDirectory.path())
70+
)
71+
}
72+
4973
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
5074
@Test func saveTransaction_ChildBeforeParent() async throws {
5175
let parent = CKRecord(recordType: "A", recordID: CKRecord.ID(recordName: "A"))

0 commit comments

Comments
 (0)