Skip to content

Commit

Permalink
added extensive testing for all the
Browse files Browse the repository at this point in the history
possible cases on how the save is handled given the various context of the existing room alias
  • Loading branch information
Velin92 committed Jan 22, 2025
1 parent f2db11a commit 751cb3e
Showing 1 changed file with 89 additions and 5 deletions.
94 changes: 89 additions & 5 deletions UnitTests/Sources/EditRoomAddressScreenViewModelTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}

0 comments on commit 751cb3e

Please sign in to comment.