Fix regression on direct chat details (#1071)

* Fix regression

* Fix UTs
This commit is contained in:
Alfonso Grillo
2023-06-13 13:43:25 +02:00
committed by GitHub
parent c4125fd81c
commit 73eeb051c6
2 changed files with 26 additions and 26 deletions
@@ -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)
} }
} }