Skip to content

Commit

Permalink
revert: fix mls system message - WPB-15129 (#2459)
Browse files Browse the repository at this point in the history
  • Loading branch information
netbe authored Jan 30, 2025
1 parent 09172db commit 5f62cf8
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 88 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -169,8 +169,7 @@ struct OneOnOneResolver: OneOnOneResolverProtocol {

await switchLocalConversationToMLS(
mlsConversation: mlsConversation,
for: user,
userID: userID
for: user
)
}

Expand Down Expand Up @@ -220,38 +219,15 @@ struct OneOnOneResolver: OneOnOneResolverProtocol {

private func switchLocalConversationToMLS(
mlsConversation: ZMConversation,
for user: ZMUser,
userID: WireDataModel.QualifiedID
for user: ZMUser
) async {
await context.perform {

// Note on proteus, it's possible to have 2 duplicate 1-1 conversations, so we need to fetch both
// conversations here.
let proteusConversations: [ZMConversation] = fetchAllTeamOneOnOneProteusConversations(
otherUserID: userID,
in: context
)

var allProteusConversations = Set(proteusConversations)
if let existingConversation = user.oneOnOneConversation,
existingConversation.messageProtocol == .proteus {
allProteusConversations.insert(existingConversation)
}

// move local messages from proteus conversations if they exist
for proteusConversation in allProteusConversations {
// Since ZMMessages only have a single conversation connected,
// forming this union also removes the relationship to the proteus conversation.
/// Move local messages from proteus conversation if it exists
if let proteusConversation = user.oneOnOneConversation {
/// Since ZMMessages only have a single conversation connected,
/// forming this union also removes the relationship to the proteus conversation.
mlsConversation.mutableMessages.union(proteusConversation.allMessages)
}

// insert system message that we moved from proteus to MLS
let sender = ZMUser.selfUser(in: context)
mlsConversation.appendMLSMigrationFinalizedSystemMessage(sender: sender, at: .now)

if !allProteusConversations.isEmpty {
mlsConversation.isForcedReadOnly = false
// update just to be sure
mlsConversation.needsToBeUpdatedFromBackend = true
}

Expand All @@ -260,37 +236,6 @@ struct OneOnOneResolver: OneOnOneResolverProtocol {
}
}

private func fetchAllTeamOneOnOneProteusConversations(
otherUserID: WireDataModel.QualifiedID,
in context: NSManagedObjectContext
) -> [ZMConversation] {
guard let otherUser = ZMUser.fetch(with: otherUserID, in: context) else {
return []
}
let selfUser = ZMUser.selfUser(in: context)
guard selfUser.team != nil else {
return []
}

let request = NSFetchRequest<ZMConversation>(entityName: ZMConversation.entityName())
let teamOneOnOnePredicate = ZMConversation.predicateForTeamOneToOneConversation()

let sameParticipant = NSPredicate(
format: "ANY %K.user == %@ AND ANY %K.user == %@",
ZMConversationParticipantRolesKey,
otherUser,
ZMConversationParticipantRolesKey,
selfUser
)

request.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [
teamOneOnOnePredicate,
sameParticipant
])

return context.fetchOrAssert(request: request)
}

/// Resolves a Proteus 1:1 conversation.
/// - Parameter user: The user to resolve the conversation for.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,19 +178,8 @@ final class OneOnOneResolverTests: XCTestCase {

// Then

try await context.perform { [self] in
let allMessages = mlsOneOnOneConversation.allMessages

try XCTAssertCount(allMessages, count: 3)
let mlsSystemMessage = try XCTUnwrap(mlsOneOnOneConversation.lastMessage as? ZMSystemMessage)
XCTAssertEqual(
mlsSystemMessage.systemMessageType.rawValue,
ZMSystemMessageType.mlsMigrationFinalized.rawValue
)

XCTAssertEqual(mlsOneOnOneConversation.needsToBeUpdatedFromBackend, true)

let migratedMessagesTexts = allMessages
await context.perform {
let migratedMessagesTexts = mlsOneOnOneConversation.allMessages
.compactMap(\.textMessageData)
.compactMap(\.messageText)
.sorted()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ public struct OneOnOneMigrator: OneOnOneMigratorInterface {
)

await context.perform {

_ = context.saveOrRollback()
}

Expand Down Expand Up @@ -167,10 +166,6 @@ public struct OneOnOneMigrator: OneOnOneMigratorInterface {
mlsConversation.mutableMessages.union(proteusConversation.allMessages)
}

// insert system message that we moved from proteus to MLS
let sender = ZMUser.selfUser(in: context)
mlsConversation.appendMLSMigrationFinalizedSystemMessage(sender: sender, at: .now)

if !proteusConversations.isEmpty {
// update just to be sure
mlsConversation.needsToBeUpdatedFromBackend = true
Expand Down
13 changes: 4 additions & 9 deletions wire-ios-data-model/Tests/OneOnOne/OneOnOneMigratorTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -244,16 +244,13 @@ final class OneOnOneMigratorTests: XCTestCase {
)

// Then
try await syncContext.perform {
await syncContext.perform {
let mlsMessages = mlsConversation.allMessages.sortedAscendingPrependingNil(by: \.serverTimestamp)
XCTAssertEqual(mlsMessages.count, 4)
XCTAssertEqual(mlsMessages.count, 3)
XCTAssertEqual(mlsMessages[0].textMessageData?.messageText, "Hello World!")
XCTAssertTrue(mlsMessages[1].isKnock)
XCTAssertTrue(mlsMessages[2].isImage)

let systemMessage = try XCTUnwrap(mlsMessages[3] as? ZMSystemMessage)
XCTAssertEqual(systemMessage.systemMessageType, .mlsMigrationFinalized)

XCTAssertNil(proteusConversation.lastMessage)
}
withExtendedLifetime(handler) {}
Expand Down Expand Up @@ -354,15 +351,14 @@ final class OneOnOneMigratorTests: XCTestCase {
// Then
await syncContext.perform {
let mlsMessages = mlsConversation.allMessages.sortedAscendingPrependingNil(by: \.serverTimestamp)
let expectedMessagesCount = 7
let expectedMessagesCount = 6
if mlsMessages.count == expectedMessagesCount {
XCTAssertEqual(mlsMessages[0].textMessageData?.messageText, "Hello World!")
XCTAssertTrue(mlsMessages[1].isKnock)
XCTAssertTrue(mlsMessages[2].isImage)
XCTAssertEqual(mlsMessages[3].textMessageData?.messageText, "Hello World Dup!")
XCTAssertTrue(mlsMessages[4].isKnock)
XCTAssertTrue(mlsMessages[5].isImage)
XCTAssertTrue(mlsMessages[6].isSystem)
} else {
XCTFail("messages count is \(mlsMessages.count) instead of \(expectedMessagesCount)")
}
Expand Down Expand Up @@ -501,7 +497,7 @@ final class OneOnOneMigratorTests: XCTestCase {
// Then
await syncContext.perform {
let mlsMessages = mlsConversation.allMessages.sortedAscendingPrependingNil(by: \.serverTimestamp)
let expectedMessagesCount = 10
let expectedMessagesCount = 9
if mlsMessages.count == expectedMessagesCount {
XCTAssertEqual(mlsMessages[0].textMessageData?.messageText, "Hello World!")
XCTAssertTrue(mlsMessages[1].isKnock)
Expand All @@ -512,7 +508,6 @@ final class OneOnOneMigratorTests: XCTestCase {
XCTAssertEqual(mlsMessages[6].textMessageData?.messageText, "Hello World 1!")
XCTAssertEqual(mlsMessages[7].textMessageData?.messageText, "Hello World 2!")
XCTAssertEqual(mlsMessages[8].textMessageData?.messageText, "Hello World 3!")
XCTAssertTrue(mlsMessages[9].isSystem)
} else {
XCTFail("messages count is \(mlsMessages.count) instead of \(expectedMessagesCount)")
}
Expand Down

0 comments on commit 5f62cf8

Please sign in to comment.