mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 10:33:45 +00:00
Bump the RustSDK to v1.0.53: adopt latest record based timeline item APIs (#3356)
This commit is contained in:
@@ -41,14 +41,14 @@ class ComposerToolbarViewModelTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testComposerFocus() {
|
||||
viewModel.process(timelineAction: .setMode(mode: .edit(originalItemId: TimelineItemIdentifier(timelineID: "mock"))))
|
||||
viewModel.process(timelineAction: .setMode(mode: .edit(originalItemId: TimelineItemIdentifier(uniqueID: "mock"))))
|
||||
XCTAssertTrue(viewModel.state.bindings.composerFocused)
|
||||
viewModel.process(timelineAction: .removeFocus)
|
||||
XCTAssertFalse(viewModel.state.bindings.composerFocused)
|
||||
}
|
||||
|
||||
func testComposerMode() {
|
||||
let mode: ComposerMode = .edit(originalItemId: TimelineItemIdentifier(timelineID: "mock"))
|
||||
let mode: ComposerMode = .edit(originalItemId: TimelineItemIdentifier(uniqueID: "mock"))
|
||||
viewModel.process(timelineAction: .setMode(mode: mode))
|
||||
XCTAssertEqual(viewModel.state.composerMode, mode)
|
||||
viewModel.process(timelineAction: .clear)
|
||||
@@ -56,7 +56,7 @@ class ComposerToolbarViewModelTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testComposerModeIsPublished() {
|
||||
let mode: ComposerMode = .edit(originalItemId: TimelineItemIdentifier(timelineID: "mock"))
|
||||
let mode: ComposerMode = .edit(originalItemId: TimelineItemIdentifier(uniqueID: "mock"))
|
||||
let expectation = expectation(description: "Composer mode is published")
|
||||
let cancellable = viewModel
|
||||
.context
|
||||
@@ -236,7 +236,7 @@ class ComposerToolbarViewModelTests: XCTestCase {
|
||||
}
|
||||
|
||||
viewModel.context.composerFormattingEnabled = false
|
||||
viewModel.process(timelineAction: .setMode(mode: .edit(originalItemId: .init(timelineID: "", eventID: "testID"))))
|
||||
viewModel.process(timelineAction: .setMode(mode: .edit(originalItemId: .init(uniqueID: "", eventOrTransactionID: .eventId(eventId: "testID")))))
|
||||
viewModel.context.plainComposerText = .init(string: "Hello world!")
|
||||
viewModel.saveDraft()
|
||||
|
||||
@@ -257,12 +257,11 @@ class ComposerToolbarViewModelTests: XCTestCase {
|
||||
}
|
||||
|
||||
viewModel.context.composerFormattingEnabled = false
|
||||
viewModel.process(timelineAction: .setMode(mode: .reply(itemID: .init(timelineID: "",
|
||||
eventID: "testID"),
|
||||
replyDetails: .loaded(sender: .init(id: ""),
|
||||
eventID: "testID",
|
||||
eventContent: .message(.text(.init(body: "reply text")))),
|
||||
isThread: false)))
|
||||
viewModel.process(timelineAction: .setMode(mode: .reply(itemID: .init(uniqueID: "", eventOrTransactionID: .eventId(eventId: "testID")),
|
||||
replyDetails: .loaded(sender: .init(id: ""),
|
||||
eventID: "testID",
|
||||
eventContent: .message(.text(.init(body: "reply text")))),
|
||||
isThread: false)))
|
||||
viewModel.context.plainComposerText = .init(string: "Hello world!")
|
||||
viewModel.saveDraft()
|
||||
|
||||
@@ -283,12 +282,11 @@ class ComposerToolbarViewModelTests: XCTestCase {
|
||||
}
|
||||
|
||||
viewModel.context.composerFormattingEnabled = false
|
||||
viewModel.process(timelineAction: .setMode(mode: .reply(itemID: .init(timelineID: "",
|
||||
eventID: "testID"),
|
||||
replyDetails: .loaded(sender: .init(id: ""),
|
||||
eventID: "testID",
|
||||
eventContent: .message(.text(.init(body: "reply text")))),
|
||||
isThread: false)))
|
||||
viewModel.process(timelineAction: .setMode(mode: .reply(itemID: .init(uniqueID: "", eventOrTransactionID: .eventId(eventId: "testID")),
|
||||
replyDetails: .loaded(sender: .init(id: ""),
|
||||
eventID: "testID",
|
||||
eventContent: .message(.text(.init(body: "reply text")))),
|
||||
isThread: false)))
|
||||
viewModel.saveDraft()
|
||||
|
||||
await fulfillment(of: [expectation], timeout: 10)
|
||||
@@ -397,7 +395,7 @@ class ComposerToolbarViewModelTests: XCTestCase {
|
||||
|
||||
await fulfillment(of: [expectation], timeout: 10)
|
||||
XCTAssertFalse(viewModel.context.composerFormattingEnabled)
|
||||
XCTAssertEqual(viewModel.state.composerMode, .edit(originalItemId: .init(timelineID: "", eventID: "testID")))
|
||||
XCTAssertEqual(viewModel.state.composerMode, .edit(originalItemId: .init(uniqueID: "", eventOrTransactionID: .eventId(eventId: "testID"))))
|
||||
XCTAssertEqual(viewModel.context.plainComposerText, NSAttributedString(string: "Hello world!"))
|
||||
}
|
||||
|
||||
@@ -431,13 +429,13 @@ class ComposerToolbarViewModelTests: XCTestCase {
|
||||
await fulfillment(of: [draftExpectation], timeout: 10)
|
||||
XCTAssertFalse(viewModel.context.composerFormattingEnabled)
|
||||
// Testing the loading state first
|
||||
XCTAssertEqual(viewModel.state.composerMode, .reply(itemID: .init(timelineID: "", eventID: testEventID),
|
||||
XCTAssertEqual(viewModel.state.composerMode, .reply(itemID: .init(uniqueID: "", eventOrTransactionID: .eventId(eventId: testEventID)),
|
||||
replyDetails: .loading(eventID: testEventID),
|
||||
isThread: false))
|
||||
XCTAssertEqual(viewModel.context.plainComposerText, NSAttributedString(string: text))
|
||||
|
||||
await fulfillment(of: [loadReplyExpectation], timeout: 10)
|
||||
XCTAssertEqual(viewModel.state.composerMode, .reply(itemID: .init(timelineID: "", eventID: testEventID),
|
||||
XCTAssertEqual(viewModel.state.composerMode, .reply(itemID: .init(uniqueID: "", eventOrTransactionID: .eventId(eventId: testEventID)),
|
||||
replyDetails: loadedReply,
|
||||
isThread: true))
|
||||
}
|
||||
@@ -445,8 +443,7 @@ class ComposerToolbarViewModelTests: XCTestCase {
|
||||
func testRestoreReplyAndCancelReplyMode() async {
|
||||
let testEventID = "testID"
|
||||
let text = "Hello world!"
|
||||
let loadedReply = TimelineItemReplyDetails.loaded(sender: .init(id: "userID",
|
||||
displayName: "Username"),
|
||||
let loadedReply = TimelineItemReplyDetails.loaded(sender: .init(id: "userID", displayName: "Username"),
|
||||
eventID: testEventID,
|
||||
eventContent: .message(.text(.init(body: "Reply text"))))
|
||||
|
||||
@@ -472,7 +469,7 @@ class ComposerToolbarViewModelTests: XCTestCase {
|
||||
await fulfillment(of: [draftExpectation], timeout: 10)
|
||||
XCTAssertFalse(viewModel.context.composerFormattingEnabled)
|
||||
// Testing the loading state first
|
||||
XCTAssertEqual(viewModel.state.composerMode, .reply(itemID: .init(timelineID: "", eventID: testEventID),
|
||||
XCTAssertEqual(viewModel.state.composerMode, .reply(itemID: .init(uniqueID: "", eventOrTransactionID: .eventId(eventId: testEventID)),
|
||||
replyDetails: .loading(eventID: testEventID),
|
||||
isThread: false))
|
||||
XCTAssertEqual(viewModel.context.plainComposerText, NSAttributedString(string: text))
|
||||
|
||||
@@ -142,7 +142,7 @@ class LoggingTests: XCTestCase {
|
||||
isThreaded: false,
|
||||
sender: .init(id: "sender"),
|
||||
content: .init(body: "EmoteString", formattedBody: AttributedString(emoteAttributedString)))
|
||||
let imageMessage = ImageRoomTimelineItem(id: .init(timelineID: "myimagemessage"),
|
||||
let imageMessage = ImageRoomTimelineItem(id: .init(uniqueID: "myimagemessage"),
|
||||
timestamp: "",
|
||||
isOutgoing: false,
|
||||
isEditable: false,
|
||||
@@ -184,25 +184,25 @@ class LoggingTests: XCTestCase {
|
||||
}
|
||||
|
||||
let content = try String(contentsOf: logFile)
|
||||
XCTAssertTrue(content.contains(textMessage.id.timelineID))
|
||||
XCTAssertTrue(content.contains(textMessage.id.uniqueID))
|
||||
XCTAssertFalse(content.contains(textMessage.body))
|
||||
XCTAssertFalse(content.contains(textAttributedString))
|
||||
|
||||
XCTAssertTrue(content.contains(noticeMessage.id.timelineID))
|
||||
XCTAssertTrue(content.contains(noticeMessage.id.uniqueID))
|
||||
XCTAssertFalse(content.contains(noticeMessage.body))
|
||||
XCTAssertFalse(content.contains(noticeAttributedString))
|
||||
|
||||
XCTAssertTrue(content.contains(emoteMessage.id.timelineID))
|
||||
XCTAssertTrue(content.contains(emoteMessage.id.uniqueID))
|
||||
XCTAssertFalse(content.contains(emoteMessage.body))
|
||||
XCTAssertFalse(content.contains(emoteAttributedString))
|
||||
|
||||
XCTAssertTrue(content.contains(imageMessage.id.timelineID))
|
||||
XCTAssertTrue(content.contains(imageMessage.id.uniqueID))
|
||||
XCTAssertFalse(content.contains(imageMessage.body))
|
||||
|
||||
XCTAssertTrue(content.contains(videoMessage.id.timelineID))
|
||||
XCTAssertTrue(content.contains(videoMessage.id.uniqueID))
|
||||
XCTAssertFalse(content.contains(videoMessage.body))
|
||||
|
||||
XCTAssertTrue(content.contains(fileMessage.id.timelineID))
|
||||
XCTAssertTrue(content.contains(fileMessage.id.uniqueID))
|
||||
XCTAssertFalse(content.contains(fileMessage.body))
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import XCTest
|
||||
|
||||
@MainActor
|
||||
class MessageForwardingScreenViewModelTests: XCTestCase {
|
||||
let forwardingItem = MessageForwardingItem(id: .init(timelineID: "t1", eventID: "t1"),
|
||||
let forwardingItem = MessageForwardingItem(id: .init(uniqueID: "t1", eventOrTransactionID: .eventId(eventId: "t1")),
|
||||
roomID: "1",
|
||||
content: .init(noPointer: .init()))
|
||||
var viewModel: MessageForwardingScreenViewModelProtocol!
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
//
|
||||
|
||||
@testable import ElementX
|
||||
import MatrixRustSDK
|
||||
|
||||
import Combine
|
||||
import XCTest
|
||||
@@ -66,8 +67,8 @@ class RoomScreenViewModelTests: XCTestCase {
|
||||
let providerUpdateSubject = PassthroughSubject<([TimelineItemProxy], PaginationState), Never>()
|
||||
pinnedTimelineProviderMock.underlyingUpdatePublisher = providerUpdateSubject.eraseToAnyPublisher()
|
||||
pinnedTimelineMock.timelineProvider = pinnedTimelineProviderMock
|
||||
pinnedTimelineProviderMock.itemProxies = [.event(.init(item: EventTimelineItemSDKMock(configuration: .init(eventID: "test1")), id: "1")),
|
||||
.event(.init(item: EventTimelineItemSDKMock(configuration: .init(eventID: "test2")), id: "2"))]
|
||||
pinnedTimelineProviderMock.itemProxies = [.event(.init(item: EventTimelineItem(configuration: .init(eventID: "test1")), uniqueID: "1")),
|
||||
.event(.init(item: EventTimelineItem(configuration: .init(eventID: "test2")), uniqueID: "2"))]
|
||||
|
||||
// check if the banner is now in a loaded state and is showing the counter
|
||||
deferred = deferFulfillment(viewModel.context.$viewState) { viewState in
|
||||
@@ -83,9 +84,9 @@ class RoomScreenViewModelTests: XCTestCase {
|
||||
deferred = deferFulfillment(viewModel.context.$viewState) { viewState in
|
||||
viewState.pinnedEventsBannerState.count == 3
|
||||
}
|
||||
providerUpdateSubject.send(([.event(.init(item: EventTimelineItemSDKMock(configuration: .init(eventID: "test1")), id: "1")),
|
||||
.event(.init(item: EventTimelineItemSDKMock(configuration: .init(eventID: "test2")), id: "2")),
|
||||
.event(.init(item: EventTimelineItemSDKMock(configuration: .init(eventID: "test3")), id: "3"))], .initial))
|
||||
providerUpdateSubject.send(([.event(.init(item: EventTimelineItem(configuration: .init(eventID: "test1")), uniqueID: "1")),
|
||||
.event(.init(item: EventTimelineItem(configuration: .init(eventID: "test2")), uniqueID: "2")),
|
||||
.event(.init(item: EventTimelineItem(configuration: .init(eventID: "test3")), uniqueID: "3"))], .initial))
|
||||
try await deferred.fulfill()
|
||||
XCTAssertFalse(viewModel.context.viewState.pinnedEventsBannerState.isLoading)
|
||||
XCTAssertTrue(viewModel.context.viewState.shouldShowPinnedEventsBanner)
|
||||
@@ -106,9 +107,9 @@ class RoomScreenViewModelTests: XCTestCase {
|
||||
let pinnedTimelineProviderMock = RoomTimelineProviderMock()
|
||||
pinnedTimelineMock.timelineProvider = pinnedTimelineProviderMock
|
||||
pinnedTimelineProviderMock.underlyingUpdatePublisher = Empty<([TimelineItemProxy], PaginationState), Never>().eraseToAnyPublisher()
|
||||
pinnedTimelineProviderMock.itemProxies = [.event(.init(item: EventTimelineItemSDKMock(configuration: .init(eventID: "test1")), id: "1")),
|
||||
.event(.init(item: EventTimelineItemSDKMock(configuration: .init(eventID: "test2")), id: "2")),
|
||||
.event(.init(item: EventTimelineItemSDKMock(configuration: .init(eventID: "test3")), id: "3"))]
|
||||
pinnedTimelineProviderMock.itemProxies = [.event(.init(item: EventTimelineItem(configuration: .init(eventID: "test1")), uniqueID: "1")),
|
||||
.event(.init(item: EventTimelineItem(configuration: .init(eventID: "test2")), uniqueID: "2")),
|
||||
.event(.init(item: EventTimelineItem(configuration: .init(eventID: "test3")), uniqueID: "3"))]
|
||||
roomProxyMock.underlyingPinnedEventsTimeline = pinnedTimelineMock
|
||||
let viewModel = RoomScreenViewModel(roomProxy: roomProxyMock,
|
||||
initialSelectedPinnedEventID: "test1",
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
//
|
||||
|
||||
@testable import ElementX
|
||||
import MatrixRustSDK
|
||||
|
||||
import XCTest
|
||||
|
||||
@MainActor
|
||||
@@ -18,19 +20,9 @@ class TimelineItemFactoryTests: XCTestCase {
|
||||
attributedStringBuilder: AttributedStringBuilder(mentionBuilder: MentionBuilder()),
|
||||
stateEventStringBuilder: RoomStateEventStringBuilder(userID: ownUserID))
|
||||
|
||||
let eventTimelineItem = EventTimelineItemSDKMock()
|
||||
eventTimelineItem.isOwnReturnValue = true
|
||||
eventTimelineItem.timestampReturnValue = 0
|
||||
eventTimelineItem.isEditableReturnValue = false
|
||||
eventTimelineItem.canBeRepliedToReturnValue = false
|
||||
eventTimelineItem.senderReturnValue = senderUserID
|
||||
eventTimelineItem.senderProfileReturnValue = .pending
|
||||
let eventTimelineItem = EventTimelineItem.mockCallInvite(sender: senderUserID)
|
||||
|
||||
let timelineItemContent = TimelineItemContentSDKMock()
|
||||
timelineItemContent.kindReturnValue = .callInvite
|
||||
eventTimelineItem.contentReturnValue = timelineItemContent
|
||||
|
||||
let eventTimelineItemProxy = EventTimelineItemProxy(item: eventTimelineItem, id: "0")
|
||||
let eventTimelineItemProxy = EventTimelineItemProxy(item: eventTimelineItem, uniqueID: "0")
|
||||
|
||||
let item = factory.buildTimelineItem(for: eventTimelineItemProxy, isDM: false)
|
||||
|
||||
|
||||
@@ -258,9 +258,9 @@ class TimelineViewModelTests: XCTestCase {
|
||||
|
||||
func testSendReadReceiptWithoutEvents() async throws {
|
||||
// Given a room with only virtual items.
|
||||
let items = [SeparatorRoomTimelineItem(timelineID: "v1"),
|
||||
SeparatorRoomTimelineItem(timelineID: "v2"),
|
||||
SeparatorRoomTimelineItem(timelineID: "v3")]
|
||||
let items = [SeparatorRoomTimelineItem(uniqueID: "v1"),
|
||||
SeparatorRoomTimelineItem(uniqueID: "v2"),
|
||||
SeparatorRoomTimelineItem(uniqueID: "v3")]
|
||||
let (viewModel, _, timelineProxy, _) = readReceiptsConfiguration(with: items)
|
||||
|
||||
// When sending a read receipt for the last item.
|
||||
@@ -275,7 +275,7 @@ class TimelineViewModelTests: XCTestCase {
|
||||
// Given a room where the last event is a virtual item.
|
||||
let items: [RoomTimelineItemProtocol] = [TextRoomTimelineItem(eventID: "t1"),
|
||||
TextRoomTimelineItem(eventID: "t2"),
|
||||
SeparatorRoomTimelineItem(timelineID: "v3")]
|
||||
SeparatorRoomTimelineItem(uniqueID: "v3")]
|
||||
let (viewModel, _, _, _) = readReceiptsConfiguration(with: items)
|
||||
|
||||
// When sending a read receipt for the last item.
|
||||
@@ -436,14 +436,14 @@ private extension TextRoomTimelineItem {
|
||||
}
|
||||
|
||||
private extension SeparatorRoomTimelineItem {
|
||||
init(timelineID: String) {
|
||||
self.init(id: .init(timelineID: timelineID), text: "")
|
||||
init(uniqueID: String) {
|
||||
self.init(id: .init(uniqueID: uniqueID), text: "")
|
||||
}
|
||||
}
|
||||
|
||||
private extension TextRoomTimelineItem {
|
||||
init(eventID: String) {
|
||||
self.init(id: .init(timelineID: UUID().uuidString, eventID: eventID),
|
||||
self.init(id: .init(uniqueID: UUID().uuidString, eventOrTransactionID: .eventId(eventId: eventID)),
|
||||
timestamp: "",
|
||||
isOutgoing: false,
|
||||
isEditable: false,
|
||||
|
||||
Reference in New Issue
Block a user