Invalidate media deletion callbacks during panic

This commit is contained in:
jack
2026-07-25 20:43:07 +02:00
parent 62e9a1d83d
commit 4bd6e3d445
8 changed files with 236 additions and 10 deletions
+62
View File
@@ -1864,6 +1864,68 @@ struct ChatViewModelPrivateMediaDeletionTests {
#expect((viewModel.privateChats[aliasPeerID] ?? []).isEmpty)
}
@Test @MainActor
func panicInvalidatesActiveAndQueuedPrivateChatClears() {
let (viewModel, transport) = makeTestableViewModel()
transport.deferDeletedPrivateMediaPersistence = true
let firstPeerID = PeerID(str: String(repeating: "4", count: 64))
let secondPeerID = PeerID(str: String(repeating: "5", count: 64))
let firstID = "media-\(String(repeating: "6", count: 32))"
let secondID = "media-\(String(repeating: "7", count: 32))"
viewModel.seedPrivateChat([
privateMediaMessage(
id: firstID,
sender: "First",
senderPeerID: firstPeerID,
recipient: viewModel.nickname,
filename: "first-pre-panic.jpg"
)
], for: firstPeerID)
viewModel.seedPrivateChat([
privateMediaMessage(
id: secondID,
sender: "Second",
senderPeerID: secondPeerID,
recipient: viewModel.nickname,
filename: "second-pre-panic.jpg"
)
], for: secondPeerID)
viewModel.clearPrivateChat(firstPeerID)
viewModel.clearPrivateChat(secondPeerID)
#expect(
transport.deletedPrivateMediaMessageIDBatches == [[firstID]]
)
_ = viewModel.panicClearAllData(restartServices: false)
viewModel.seedPrivateChat([
privateMediaMessage(
id: firstID,
sender: "First",
senderPeerID: firstPeerID,
recipient: viewModel.nickname,
filename: "first-post-panic.jpg"
)
], for: firstPeerID)
viewModel.seedPrivateChat([
privateMediaMessage(
id: secondID,
sender: "Second",
senderPeerID: secondPeerID,
recipient: viewModel.nickname,
filename: "second-post-panic.jpg"
)
], for: secondPeerID)
transport.resolveNextDeletedPrivateMediaPersistence(true)
#expect(
transport.deletedPrivateMediaMessageIDBatches == [[firstID]]
)
#expect(viewModel.privateChats[firstPeerID]?.map(\.id) == [firstID])
#expect(viewModel.privateChats[secondPeerID]?.map(\.id) == [secondID])
}
private func privateMediaMessage(
id: String,
sender: String,