mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-05 20:09:04 +00:00
Fix regression on direct chat details (#1071)
* Fix regression * Fix UTs
This commit is contained in:
@@ -159,6 +159,6 @@ extension RoomProxyProtocol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var isEncryptedOneToOneRoom: Bool {
|
var isEncryptedOneToOneRoom: Bool {
|
||||||
isDirect && isEncrypted && joinedMembersCount == 2
|
isDirect && isEncrypted && activeMembersCount == 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,14 +24,14 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
var viewModel: RoomDetailsScreenViewModel!
|
var viewModel: RoomDetailsScreenViewModel!
|
||||||
var roomProxyMock: RoomProxyMock!
|
var roomProxyMock: RoomProxyMock!
|
||||||
var context: RoomDetailsScreenViewModelType.Context { viewModel.context }
|
var context: RoomDetailsScreenViewModelType.Context { viewModel.context }
|
||||||
|
|
||||||
override func setUp() {
|
override func setUp() {
|
||||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", joinedMembersCount: 0))
|
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", joinedMembersCount: 0))
|
||||||
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||||
|
|
||||||
AppSettings.reset()
|
AppSettings.reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
func testLeaveRoomTappedWhenPublic() async {
|
func testLeaveRoomTappedWhenPublic() async {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice]
|
||||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: true, members: mockedMembers))
|
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: true, members: mockedMembers))
|
||||||
@@ -41,7 +41,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
XCTAssertEqual(context.leaveRoomAlertItem?.state, .public)
|
XCTAssertEqual(context.leaveRoomAlertItem?.state, .public)
|
||||||
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertSubtitle)
|
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertSubtitle)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testLeaveRoomTappedWhenRoomNotPublic() async {
|
func testLeaveRoomTappedWhenRoomNotPublic() async {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice]
|
||||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: false, members: mockedMembers))
|
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: false, members: mockedMembers))
|
||||||
@@ -51,13 +51,13 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
XCTAssertEqual(context.leaveRoomAlertItem?.state, .private)
|
XCTAssertEqual(context.leaveRoomAlertItem?.state, .private)
|
||||||
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertPrivateSubtitle)
|
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertPrivateSubtitle)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testLeaveRoomTappedWithLessThanTwoMembers() async {
|
func testLeaveRoomTappedWithLessThanTwoMembers() async {
|
||||||
context.send(viewAction: .processTapLeave)
|
context.send(viewAction: .processTapLeave)
|
||||||
XCTAssertEqual(context.leaveRoomAlertItem?.state, .empty)
|
XCTAssertEqual(context.leaveRoomAlertItem?.state, .empty)
|
||||||
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertEmptySubtitle)
|
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertEmptySubtitle)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testLeaveRoomSuccess() async {
|
func testLeaveRoomSuccess() async {
|
||||||
roomProxyMock.leaveRoomClosure = {
|
roomProxyMock.leaveRoomClosure = {
|
||||||
.success(())
|
.success(())
|
||||||
@@ -74,7 +74,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
await Task.yield()
|
await Task.yield()
|
||||||
XCTAssertEqual(roomProxyMock.leaveRoomCallsCount, 1)
|
XCTAssertEqual(roomProxyMock.leaveRoomCallsCount, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testLeaveRoomError() async {
|
func testLeaveRoomError() async {
|
||||||
roomProxyMock.leaveRoomClosure = {
|
roomProxyMock.leaveRoomClosure = {
|
||||||
.failure(.failedLeavingRoom)
|
.failure(.failedLeavingRoom)
|
||||||
@@ -84,16 +84,16 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
XCTAssertEqual(roomProxyMock.leaveRoomCallsCount, 1)
|
XCTAssertEqual(roomProxyMock.leaveRoomCallsCount, 1)
|
||||||
XCTAssertNotNil(context.alertInfo)
|
XCTAssertNotNil(context.alertInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testInitialDMDetailsState() async {
|
func testInitialDMDetailsState() async {
|
||||||
let recipient = RoomMemberProxyMock.mockDan
|
let recipient = RoomMemberProxyMock.mockDan
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, joinedMembersCount: mockedMembers.count))
|
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, activeMembersCount: mockedMembers.count))
|
||||||
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||||
await context.nextViewState()
|
await context.nextViewState()
|
||||||
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
||||||
}
|
}
|
||||||
|
|
||||||
func testIgnoreSuccess() async throws {
|
func testIgnoreSuccess() async throws {
|
||||||
let recipient = RoomMemberProxyMock.mockDan
|
let recipient = RoomMemberProxyMock.mockDan
|
||||||
recipient.ignoreUserClosure = {
|
recipient.ignoreUserClosure = {
|
||||||
@@ -101,11 +101,11 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
return .success(())
|
return .success(())
|
||||||
}
|
}
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, joinedMembersCount: mockedMembers.count))
|
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, activeMembersCount: mockedMembers.count))
|
||||||
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||||
await context.nextViewState()
|
await context.nextViewState()
|
||||||
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
||||||
|
|
||||||
context.send(viewAction: .ignoreConfirmed)
|
context.send(viewAction: .ignoreConfirmed)
|
||||||
|
|
||||||
_ = await context.$viewState.values.first { $0.isProcessingIgnoreRequest == true }
|
_ = await context.$viewState.values.first { $0.isProcessingIgnoreRequest == true }
|
||||||
@@ -115,7 +115,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
XCTAssertFalse(context.viewState.isProcessingIgnoreRequest)
|
XCTAssertFalse(context.viewState.isProcessingIgnoreRequest)
|
||||||
XCTAssert(context.viewState.dmRecipient?.isIgnored == true)
|
XCTAssert(context.viewState.dmRecipient?.isIgnored == true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testIgnoreFailure() async throws {
|
func testIgnoreFailure() async throws {
|
||||||
let recipient = RoomMemberProxyMock.mockDan
|
let recipient = RoomMemberProxyMock.mockDan
|
||||||
recipient.ignoreUserClosure = {
|
recipient.ignoreUserClosure = {
|
||||||
@@ -123,11 +123,11 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
return .failure(.ignoreUserFailed)
|
return .failure(.ignoreUserFailed)
|
||||||
}
|
}
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, joinedMembersCount: mockedMembers.count))
|
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, activeMembersCount: mockedMembers.count))
|
||||||
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||||
await context.nextViewState()
|
await context.nextViewState()
|
||||||
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
||||||
|
|
||||||
context.send(viewAction: .ignoreConfirmed)
|
context.send(viewAction: .ignoreConfirmed)
|
||||||
|
|
||||||
_ = await context.$viewState.values.first { $0.isProcessingIgnoreRequest == true }
|
_ = await context.$viewState.values.first { $0.isProcessingIgnoreRequest == true }
|
||||||
@@ -138,7 +138,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
XCTAssert(context.viewState.dmRecipient?.isIgnored == false)
|
XCTAssert(context.viewState.dmRecipient?.isIgnored == false)
|
||||||
XCTAssertNotNil(context.alertInfo)
|
XCTAssertNotNil(context.alertInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testUnignoreSuccess() async throws {
|
func testUnignoreSuccess() async throws {
|
||||||
let recipient = RoomMemberProxyMock.mockIgnored
|
let recipient = RoomMemberProxyMock.mockIgnored
|
||||||
recipient.unignoreUserClosure = {
|
recipient.unignoreUserClosure = {
|
||||||
@@ -146,11 +146,11 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
return .success(())
|
return .success(())
|
||||||
}
|
}
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, joinedMembersCount: mockedMembers.count))
|
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, activeMembersCount: mockedMembers.count))
|
||||||
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||||
await context.nextViewState()
|
await context.nextViewState()
|
||||||
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
||||||
|
|
||||||
context.send(viewAction: .unignoreConfirmed)
|
context.send(viewAction: .unignoreConfirmed)
|
||||||
|
|
||||||
_ = await context.$viewState.values.first { $0.isProcessingIgnoreRequest == true }
|
_ = await context.$viewState.values.first { $0.isProcessingIgnoreRequest == true }
|
||||||
@@ -160,7 +160,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
XCTAssertFalse(context.viewState.isProcessingIgnoreRequest)
|
XCTAssertFalse(context.viewState.isProcessingIgnoreRequest)
|
||||||
XCTAssert(context.viewState.dmRecipient?.isIgnored == false)
|
XCTAssert(context.viewState.dmRecipient?.isIgnored == false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testUnignoreFailure() async throws {
|
func testUnignoreFailure() async throws {
|
||||||
let recipient = RoomMemberProxyMock.mockIgnored
|
let recipient = RoomMemberProxyMock.mockIgnored
|
||||||
recipient.unignoreUserClosure = {
|
recipient.unignoreUserClosure = {
|
||||||
@@ -168,16 +168,16 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
return .failure(.unignoreUserFailed)
|
return .failure(.unignoreUserFailed)
|
||||||
}
|
}
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, joinedMembersCount: mockedMembers.count))
|
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, activeMembersCount: mockedMembers.count))
|
||||||
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||||
await context.nextViewState()
|
await context.nextViewState()
|
||||||
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
||||||
|
|
||||||
context.send(viewAction: .unignoreConfirmed)
|
context.send(viewAction: .unignoreConfirmed)
|
||||||
|
|
||||||
_ = await context.$viewState.values.first { $0.isProcessingIgnoreRequest == true }
|
_ = await context.$viewState.values.first { $0.isProcessingIgnoreRequest == true }
|
||||||
XCTAssertTrue(context.viewState.isProcessingIgnoreRequest)
|
XCTAssertTrue(context.viewState.isProcessingIgnoreRequest)
|
||||||
|
|
||||||
_ = await context.$viewState.values.first { $0.isProcessingIgnoreRequest == false }
|
_ = await context.$viewState.values.first { $0.isProcessingIgnoreRequest == false }
|
||||||
XCTAssertFalse(context.viewState.isProcessingIgnoreRequest)
|
XCTAssertFalse(context.viewState.isProcessingIgnoreRequest)
|
||||||
XCTAssert(context.viewState.dmRecipient?.isIgnored == true)
|
XCTAssert(context.viewState.dmRecipient?.isIgnored == true)
|
||||||
@@ -190,7 +190,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
isPublic: true,
|
isPublic: true,
|
||||||
members: mockedMembers,
|
members: mockedMembers,
|
||||||
memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false),
|
memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false),
|
||||||
joinedMembersCount: mockedMembers.count))
|
activeMembersCount: mockedMembers.count))
|
||||||
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||||
|
|
||||||
_ = await context.$viewState.debounce(for: .milliseconds(100), scheduler: DispatchQueue.main).values.first()
|
_ = await context.$viewState.debounce(for: .milliseconds(100), scheduler: DispatchQueue.main).values.first()
|
||||||
@@ -200,7 +200,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testInvitePeople() async {
|
func testInvitePeople() async {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
||||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: true, members: mockedMembers, joinedMembersCount: mockedMembers.count))
|
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: true, members: mockedMembers, activeMembersCount: mockedMembers.count))
|
||||||
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||||
|
|
||||||
_ = await context.$viewState.debounce(for: .milliseconds(100), scheduler: DispatchQueue.main).values.first()
|
_ = await context.$viewState.debounce(for: .milliseconds(100), scheduler: DispatchQueue.main).values.first()
|
||||||
@@ -275,7 +275,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||||
|
|
||||||
_ = await context.$viewState.debounce(for: .milliseconds(100), scheduler: DispatchQueue.main).values.first()
|
_ = await context.$viewState.debounce(for: .milliseconds(100), scheduler: DispatchQueue.main).values.first()
|
||||||
|
|
||||||
XCTAssertFalse(context.viewState.canEditRoomAvatar)
|
XCTAssertFalse(context.viewState.canEditRoomAvatar)
|
||||||
XCTAssertFalse(context.viewState.canEditRoomName)
|
XCTAssertFalse(context.viewState.canEditRoomName)
|
||||||
XCTAssertFalse(context.viewState.canEditRoomTopic)
|
XCTAssertFalse(context.viewState.canEditRoomTopic)
|
||||||
@@ -288,7 +288,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||||
|
|
||||||
_ = await context.$viewState.debounce(for: .milliseconds(100), scheduler: DispatchQueue.main).values.first()
|
_ = await context.$viewState.debounce(for: .milliseconds(100), scheduler: DispatchQueue.main).values.first()
|
||||||
|
|
||||||
XCTAssertFalse(context.viewState.canEdit)
|
XCTAssertFalse(context.viewState.canEdit)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user