mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:02:10 +00:00
Always open manage member sheet (#4110)
* always open manage member sheet * Update ElementX/Sources/Screens/ManageRoomMemberSheet/ManageRoomMemberSheetModels.swift Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com> * Update ElementX/Sources/Screens/ManageRoomMemberSheet/ManageRoomMemberSheetModels.swift Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com> * pr suggestions and handled the buttons actions correctly * Update ElementX/Sources/Screens/ManageRoomMemberSheet/View/ManageRoomMemberSheetView.swift Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com> * fixed some compilation errors * added some documentation * using a struct instead of a protocol * using arguments instead of a struct --------- Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
This commit is contained in:
@@ -377,12 +377,14 @@ class TimelineViewModelTests: XCTestCase {
|
||||
value.bindings.manageMemberViewModel != nil
|
||||
}
|
||||
|
||||
viewModel.context.send(viewAction: .tappedOnSenderDetails(userID: RoomMemberProxyMock.mockAlice.userID))
|
||||
viewModel.context.send(viewAction: .tappedOnSenderDetails(sender: .init(with: RoomMemberProxyMock.mockAlice)))
|
||||
try await deferred.fulfill()
|
||||
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.member.id, RoomMemberProxyMock.mockAlice.userID)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.canBan, true)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.canKick, true)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.id, RoomMemberProxyMock.mockAlice.userID)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.permissions.canBan, true)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.permissions.canKick, true)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.isKickDisabled, false)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.isBanUnbanDisabled, false)
|
||||
}
|
||||
|
||||
func testShowDetailsForAnAdmin() async throws {
|
||||
@@ -402,25 +404,24 @@ class TimelineViewModelTests: XCTestCase {
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()),
|
||||
clientProxy: ClientProxyMock(.init()))
|
||||
|
||||
let deferredState = deferFulfillment(viewModel.context.$viewState) { value in
|
||||
var deferredState = deferFulfillment(viewModel.context.$viewState) { value in
|
||||
!value.canCurrentUserKick && !value.canCurrentUserBan
|
||||
}
|
||||
|
||||
try await deferredState.fulfill()
|
||||
|
||||
let deferredAction = deferFulfillment(viewModel.actions) { action in
|
||||
switch action {
|
||||
case .displaySenderDetails(let userID):
|
||||
return userID == RoomMemberProxyMock.mockAdmin.userID
|
||||
default:
|
||||
return false
|
||||
}
|
||||
deferredState = deferFulfillment(viewModel.context.$viewState) { value in
|
||||
value.bindings.manageMemberViewModel != nil
|
||||
}
|
||||
|
||||
viewModel.context.send(viewAction: .tappedOnSenderDetails(userID: RoomMemberProxyMock.mockAdmin.userID))
|
||||
try await deferredAction.fulfill()
|
||||
viewModel.context.send(viewAction: .tappedOnSenderDetails(sender: .init(with: RoomMemberProxyMock.mockAdmin)))
|
||||
try await deferredState.fulfill()
|
||||
|
||||
XCTAssertNil(viewModel.context.manageMemberViewModel)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.permissions.canBan, false)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.permissions.canKick, false)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.isKickDisabled, true)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.isBanUnbanDisabled, true)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.id, RoomMemberProxyMock.mockAdmin.userID)
|
||||
}
|
||||
|
||||
func testShowDetailsForABannedUser() async throws {
|
||||
@@ -440,25 +441,25 @@ class TimelineViewModelTests: XCTestCase {
|
||||
timelineControllerFactory: TimelineControllerFactoryMock(.init()),
|
||||
clientProxy: ClientProxyMock(.init()))
|
||||
|
||||
let deferredState = deferFulfillment(viewModel.context.$viewState) { value in
|
||||
var deferredState = deferFulfillment(viewModel.context.$viewState) { value in
|
||||
value.canCurrentUserKick && value.canCurrentUserBan
|
||||
}
|
||||
|
||||
try await deferredState.fulfill()
|
||||
|
||||
let deferredAction = deferFulfillment(viewModel.actions) { action in
|
||||
switch action {
|
||||
case .displaySenderDetails(let userID):
|
||||
return userID == RoomMemberProxyMock.mockBanned[0].userID
|
||||
default:
|
||||
return false
|
||||
}
|
||||
deferredState = deferFulfillment(viewModel.context.$viewState) { value in
|
||||
value.bindings.manageMemberViewModel != nil
|
||||
}
|
||||
|
||||
viewModel.context.send(viewAction: .tappedOnSenderDetails(userID: RoomMemberProxyMock.mockBanned[0].userID))
|
||||
try await deferredAction.fulfill()
|
||||
viewModel.context.send(viewAction: .tappedOnSenderDetails(sender: .init(with: RoomMemberProxyMock.mockBanned[0])))
|
||||
try await deferredState.fulfill()
|
||||
|
||||
XCTAssertNil(viewModel.context.manageMemberViewModel)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.permissions.canBan, true)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.permissions.canKick, true)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.isKickDisabled, true)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.isBanUnbanDisabled, false)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.state.isMemberBanned, true)
|
||||
XCTAssertEqual(viewModel.context.manageMemberViewModel?.id, RoomMemberProxyMock.mockBanned[0].userID)
|
||||
}
|
||||
|
||||
// MARK: - Pins
|
||||
@@ -576,3 +577,12 @@ private extension TextRoomTimelineItem {
|
||||
content: .init(body: "Hello, World!"))
|
||||
}
|
||||
}
|
||||
|
||||
private extension TimelineItemSender {
|
||||
init(with proxy: RoomMemberProxyMock) {
|
||||
self.init(id: proxy.userID,
|
||||
displayName: proxy.displayName ?? "",
|
||||
isDisplayNameAmbiguous: false,
|
||||
avatarURL: proxy.avatarURL)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user