Ignore User UI (#737)

* generated files

* Revert "generated files"

This reverts commit f62c1dbcd9e505083ad4ff17532e2c054e253187.

* renaming files to RoomMembersList

* completed the renaming of the list files

* added generated files

* basic setup of the view and the mock

* added a new mock with a avatar

* share/copy link

* copyUserLink implemented

* removed unimplemented tests

* block user UI

* navigation to room member details added

* implemented but we require a sync from the Rust side

* adjusted some UI test screens

* alert for unblocking

* completed

* some tests

* changelog

* ignore user ui enabled

* loader inside the button when the request is fetching

* removed unused code

* blocking the button while loading

* improved the code

* changelog

* UI tests

* unit tests

* added collection concurrency kit

* Revert "added collection concurrency kit"

This reverts commit 499fbe129f73a75e903d9f4952fe2ad672930f04.

* replaced the asyncMap with a @MainActor builder function

* pr comments

* added localazy to setup

* sdk bump to 1.0.49
This commit is contained in:
Mauro
2023-03-28 11:00:40 +02:00
committed by GitHub
parent 2b753b1135
commit e1df5310b7
23 changed files with 187 additions and 58 deletions
@@ -38,6 +38,92 @@ class RoomMemberDetailsViewModelTests: XCTestCase {
XCTAssertNil(context.errorAlert)
}
func testIgnoreSuccess() async throws {
roomMemberProxyMock = RoomMemberProxyMock.mockAlice
roomMemberProxyMock.ignoreUserClosure = {
try? await Task.sleep(for: .milliseconds(10))
return .success(())
}
viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
context.send(viewAction: .showIgnoreAlert)
await Task.yield()
XCTAssertEqual(context.ignoreUserAlert, IgnoreUserAlertItem(action: .ignore))
context.send(viewAction: .ignoreConfirmed)
await Task.yield()
XCTAssertTrue(context.viewState.isProcessingIgnoreRequest)
XCTAssertFalse(context.viewState.isIgnored)
try await Task.sleep(for: .milliseconds(10))
XCTAssertFalse(context.viewState.isProcessingIgnoreRequest)
XCTAssertTrue(context.viewState.isIgnored)
}
func testIgnoreFailure() async throws {
roomMemberProxyMock = RoomMemberProxyMock.mockAlice
roomMemberProxyMock.ignoreUserClosure = {
try? await Task.sleep(for: .milliseconds(10))
return .failure(.ignoreUserFailed)
}
viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
context.send(viewAction: .showIgnoreAlert)
await Task.yield()
XCTAssertEqual(context.ignoreUserAlert, IgnoreUserAlertItem(action: .ignore))
context.send(viewAction: .ignoreConfirmed)
await Task.yield()
XCTAssertTrue(context.viewState.isProcessingIgnoreRequest)
XCTAssertFalse(context.viewState.isIgnored)
try await Task.sleep(for: .milliseconds(10))
XCTAssertFalse(context.viewState.isProcessingIgnoreRequest)
XCTAssertNotNil(context.errorAlert)
XCTAssertFalse(context.viewState.isIgnored)
}
func testUnignoreSuccess() async throws {
roomMemberProxyMock = RoomMemberProxyMock.mockIgnored
roomMemberProxyMock.unignoreUserClosure = {
try? await Task.sleep(for: .milliseconds(10))
return .success(())
}
viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
context.send(viewAction: .showUnignoreAlert)
await Task.yield()
XCTAssertEqual(context.ignoreUserAlert, IgnoreUserAlertItem(action: .unignore))
context.send(viewAction: .unignoreConfirmed)
await Task.yield()
XCTAssertTrue(context.viewState.isProcessingIgnoreRequest)
XCTAssertTrue(context.viewState.isIgnored)
try await Task.sleep(for: .milliseconds(10))
XCTAssertFalse(context.viewState.isProcessingIgnoreRequest)
XCTAssertFalse(context.viewState.isIgnored)
}
func testUnignoreFailure() async throws {
roomMemberProxyMock = RoomMemberProxyMock.mockIgnored
roomMemberProxyMock.unignoreUserClosure = {
try? await Task.sleep(for: .milliseconds(10))
return .failure(.unignoreUserFailed)
}
viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
context.send(viewAction: .showUnignoreAlert)
await Task.yield()
XCTAssertEqual(context.ignoreUserAlert, IgnoreUserAlertItem(action: .unignore))
context.send(viewAction: .unignoreConfirmed)
await Task.yield()
XCTAssertTrue(context.viewState.isProcessingIgnoreRequest)
XCTAssertTrue(context.viewState.isIgnored)
try await Task.sleep(for: .milliseconds(10))
XCTAssertFalse(context.viewState.isProcessingIgnoreRequest)
XCTAssertTrue(context.viewState.isIgnored)
XCTAssertNotNil(context.errorAlert)
}
func testInitialStateAccountOwner() async {
roomMemberProxyMock = RoomMemberProxyMock.mockMe
viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())