5982: Clean code and add tests

This commit is contained in:
MaximeE
2022-04-11 10:55:23 +02:00
parent 29bb3a4a68
commit a3758731b9
10 changed files with 93 additions and 134 deletions

View File

@@ -15,16 +15,76 @@
//
import XCTest
import Combine
import CoreLocation
@testable import RiotSwiftUI
@available(iOS 14.0, *)
class StaticLocationSharingViewerViewModelTests: XCTestCase {
var viewModel: StaticLocationSharingViewerViewModelProtocol!
var context: StaticLocationSharingViewerViewModelType.Context!
var cancellables = Set<AnyCancellable>()
override func setUpWithError() throws {
func testInitialState() {
let viewModel = buildViewModel()
XCTAssertTrue(viewModel.context.viewState.shareButtonEnabled)
XCTAssertFalse(viewModel.context.viewState.showLoadingIndicator)
XCTAssertNotNil(viewModel.context.viewState.mapStyleURL)
XCTAssertNotNil(viewModel.context.viewState.userAvatarData)
XCTAssertNil(viewModel.context.viewState.bindings.alertInfo)
}
func testCancellation() {
let viewModel = buildViewModel()
let expectation = self.expectation(description: "Cancellation completion should be invoked")
viewModel.completion = { result in
switch result {
case .share:
XCTFail()
case .cancel:
expectation.fulfill()
}
}
viewModel.context.send(viewAction: .cancel)
waitForExpectations(timeout: 3)
}
func testShareExistingLocation() {
let viewModel = buildViewModel()
let expectation = self.expectation(description: "Share completion should be invoked")
viewModel.completion = { result in
switch result {
case .share(let coordinate):
XCTAssertEqual(coordinate.latitude, viewModel.context.viewState.sharedAnnotation.coordinate.latitude)
XCTAssertEqual(coordinate.longitude, viewModel.context.viewState.sharedAnnotation.coordinate.longitude)
expectation.fulfill()
case .cancel:
XCTFail()
}
}
XCTAssertNotNil(viewModel.context.viewState.sharedAnnotation)
viewModel.context.send(viewAction: .share)
XCTAssertNil(viewModel.context.viewState.bindings.alertInfo)
waitForExpectations(timeout: 3)
}
private func buildViewModel() -> StaticLocationSharingViewerViewModel {
StaticLocationSharingViewerViewModel(mapStyleURL: URL(string: "http://empty.com")!,
avatarData: AvatarInput(mxContentUri: "", matrixItemId: "", displayName: ""),
location: CLLocationCoordinate2D(latitude: 51.4932641, longitude: -0.257096),
coordinateType: .user)
}
}