Better handling for editing alias in case of different HS (#3695)
* better handling for aliases from different HS * insert the alias at the top * removing the old homeserver alias * code improvement * always remove the old canonical alias found on the server if exists * added extensive testing for all the possible cases on how the save is handled given the various context of the existing room alias
This commit is contained in:
@@ -65,19 +65,103 @@ class EditRoomAddressScreenViewModelTests: XCTestCase {
|
||||
try await deferred.fulfill()
|
||||
}
|
||||
|
||||
func testCorrectMethodsCalledOnSave() async throws {
|
||||
func testCorrectMethodsCalledOnSaveWhenNoAliasExists() async throws {
|
||||
let clientProxy = ClientProxyMock(.init(userIDServerName: "matrix.org"))
|
||||
clientProxy.isAliasAvailableReturnValue = .success(true)
|
||||
|
||||
let roomProxy = JoinedRoomProxyMock(.init(name: "Room Name"))
|
||||
roomProxy.publishRoomAliasInRoomDirectoryReturnValue = .success(true)
|
||||
roomProxy.updateCanonicalAliasAltAliasesReturnValue = .success(())
|
||||
roomProxy.removeRoomAliasFromRoomDirectoryReturnValue = .success(true)
|
||||
|
||||
viewModel = EditRoomAddressScreenViewModel(roomProxy: roomProxy,
|
||||
clientProxy: clientProxy,
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
|
||||
XCTAssertNil(roomProxy.infoPublisher.value.canonicalAlias)
|
||||
XCTAssertEqual(viewModel.context.viewState.bindings.desiredAliasLocalPart, "room-name")
|
||||
|
||||
let publishingExpectation = expectation(description: "Wait for publishing")
|
||||
roomProxy.publishRoomAliasInRoomDirectoryClosure = { roomAlias in
|
||||
defer { publishingExpectation.fulfill() }
|
||||
XCTAssertEqual(roomAlias, "#room-name:matrix.org")
|
||||
return .success(true)
|
||||
}
|
||||
|
||||
let updateAliasExpectation = expectation(description: "Wait for alias update")
|
||||
roomProxy.updateCanonicalAliasAltAliasesClosure = { roomAlias, altAliases in
|
||||
defer { updateAliasExpectation.fulfill() }
|
||||
XCTAssertEqual(altAliases, [])
|
||||
XCTAssertEqual(roomAlias, "#room-name:matrix.org")
|
||||
return .success(())
|
||||
}
|
||||
|
||||
context.send(viewAction: .save)
|
||||
await fulfillment(of: [publishingExpectation, updateAliasExpectation], timeout: 1.0)
|
||||
XCTAssertFalse(roomProxy.removeRoomAliasFromRoomDirectoryCalled)
|
||||
}
|
||||
|
||||
func testCorrectMethodsCalledOnSaveWhenAliasOnSameHomeserverExists() async throws {
|
||||
let clientProxy = ClientProxyMock(.init(userIDServerName: "matrix.org"))
|
||||
clientProxy.isAliasAvailableReturnValue = .success(true)
|
||||
let roomProxy = JoinedRoomProxyMock(.init(name: "Room Name", canonicalAlias: "#old-room-name:matrix.org"))
|
||||
|
||||
viewModel = EditRoomAddressScreenViewModel(roomProxy: roomProxy,
|
||||
clientProxy: clientProxy,
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
|
||||
context.desiredAliasLocalPart = "room-name"
|
||||
|
||||
let publishingExpectation = expectation(description: "Wait for publishing")
|
||||
roomProxy.publishRoomAliasInRoomDirectoryClosure = { roomAlias in
|
||||
defer { publishingExpectation.fulfill() }
|
||||
XCTAssertEqual(roomAlias, "#room-name:matrix.org")
|
||||
return .success(true)
|
||||
}
|
||||
|
||||
let updateAliasExpectation = expectation(description: "Wait for alias update")
|
||||
roomProxy.updateCanonicalAliasAltAliasesClosure = { roomAlias, altAliases in
|
||||
defer { updateAliasExpectation.fulfill() }
|
||||
XCTAssertEqual(altAliases, [])
|
||||
XCTAssertEqual(roomAlias, "#room-name:matrix.org")
|
||||
return .success(())
|
||||
}
|
||||
|
||||
let removeAliasExpectation = expectation(description: "Wait for alias removal")
|
||||
roomProxy.removeRoomAliasFromRoomDirectoryClosure = { roomAlias in
|
||||
defer { removeAliasExpectation.fulfill() }
|
||||
XCTAssertEqual(roomAlias, "#old-room-name:matrix.org")
|
||||
return .success(true)
|
||||
}
|
||||
|
||||
context.send(viewAction: .save)
|
||||
await fulfillment(of: [publishingExpectation, updateAliasExpectation, removeAliasExpectation], timeout: 1.0)
|
||||
}
|
||||
|
||||
func testCorrectMethodsCalledOnSaveWhenAliasOnOtherHomeserverExists() async throws {
|
||||
let clientProxy = ClientProxyMock(.init(userIDServerName: "matrix.org"))
|
||||
clientProxy.isAliasAvailableReturnValue = .success(true)
|
||||
let roomProxy = JoinedRoomProxyMock(.init(name: "Room Name", canonicalAlias: "#old-room-name:element.io"))
|
||||
|
||||
viewModel = EditRoomAddressScreenViewModel(roomProxy: roomProxy,
|
||||
clientProxy: clientProxy,
|
||||
userIndicatorController: UserIndicatorControllerMock())
|
||||
|
||||
context.desiredAliasLocalPart = "room-name"
|
||||
|
||||
let publishingExpectation = expectation(description: "Wait for publishing")
|
||||
roomProxy.publishRoomAliasInRoomDirectoryClosure = { roomAlias in
|
||||
defer { publishingExpectation.fulfill() }
|
||||
XCTAssertEqual(roomAlias, "#room-name:matrix.org")
|
||||
return .success(true)
|
||||
}
|
||||
|
||||
let updateAliasExpectation = expectation(description: "Wait for alias update")
|
||||
roomProxy.updateCanonicalAliasAltAliasesClosure = { roomAlias, altAliases in
|
||||
defer { updateAliasExpectation.fulfill() }
|
||||
XCTAssertEqual(altAliases, ["#room-name:matrix.org"])
|
||||
XCTAssertEqual(roomAlias, "#old-room-name:element.io")
|
||||
return .success(())
|
||||
}
|
||||
|
||||
context.send(viewAction: .save)
|
||||
await fulfillment(of: [publishingExpectation, updateAliasExpectation], timeout: 1.0)
|
||||
XCTAssertFalse(roomProxy.removeRoomAliasFromRoomDirectoryCalled)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user