Leave Room (#699)

* created the row in the view and the alert, and added the new function to the RoomProxy

* fixed an issue with the alert function

* handling the navigation

* fixed a bug with the detail coordinators being dismissed incorrectly when inside a stack

* implementation completed

* replaced UI screenshots

* added a test for the fixed bug of the coordinators

* trying to increase the wait time for the expectation

* improved the test

* improved the buttons UI

* uploading artifacts for unit tests

* added result bundle true

* improved the tests

* added a new test

* pr suggestions

* updating mock

* PR suggestions

* improved tests

* fixed UI tests

* pr should be ready now

* removed testing code

* reduced complexity

* fixed test

* added a an assert to the new test case

* more tests and messages cases

* pr comments addressed

* completed
This commit is contained in:
Mauro
2023-03-17 14:57:08 +01:00
committed by GitHub
parent 7544619a55
commit 61d42a24ba
35 changed files with 719 additions and 155 deletions
@@ -19,4 +19,65 @@ import XCTest
@testable import ElementX
@MainActor
class RoomDetailsScreenViewModelTests: XCTestCase { }
class RoomDetailsScreenViewModelTests: XCTestCase {
var viewModel: RoomDetailsViewModelProtocol!
var roomProxyMock: RoomProxyMock!
var context: RoomDetailsViewModelType.Context { viewModel.context }
override func setUp() {
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test"))
viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
}
func testLeaveRoomTappedWhenPublic() async {
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: true, members: [.mockBob, .mockAlice]))
viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
context.send(viewAction: .processTapLeave)
await Task.yield()
XCTAssertEqual(context.leaveRoomAlertItem?.state, .public)
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, ElementL10n.roomDetailsLeaveRoomAlertSubtitle)
}
func testLeavRoomTappedWhenRoomNotPublic() async {
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: false, members: [.mockBob, .mockAlice]))
viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
context.send(viewAction: .processTapLeave)
await Task.yield()
XCTAssertEqual(context.leaveRoomAlertItem?.state, .private)
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, ElementL10n.roomDetailsLeavePrivateRoomAlertSubtitle)
}
func testLeaveRoomTappedWithLessThanTwoMembers() async {
context.send(viewAction: .processTapLeave)
await Task.yield()
XCTAssertEqual(context.leaveRoomAlertItem?.state, .empty)
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, ElementL10n.roomDetailsLeaveEmptyRoomAlertSubtitle)
}
func testLeaveRoomSuccess() async {
roomProxyMock.leaveRoomClosure = {
.success(())
}
viewModel.callback = { action in
switch action {
case .leftRoom:
break
default:
XCTFail("leftRoom expected")
}
}
context.send(viewAction: .confirmLeave)
await Task.yield()
XCTAssertEqual(roomProxyMock.leaveRoomCallsCount, 1)
}
func testLeaveRoomError() async {
roomProxyMock.leaveRoomClosure = {
.failure(.failedLeavingRoom)
}
context.send(viewAction: .confirmLeave)
await Task.yield()
XCTAssertEqual(roomProxyMock.leaveRoomCallsCount, 1)
XCTAssertNotNil(context.alertInfo)
}
}