Last active
June 4, 2018 16:44
-
-
Save pietrocaselani/0e375288032dc4b67cf749810b40be6f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import RxSwift | |
import RxTest | |
import XCTest | |
@testable import ExampleFramework | |
final class MoviesDefaultViewModelTests: XCTestCase { | |
private var scheduler: TestScheduler! | |
private var observer: TestableObserver<MovieViewState>! | |
private var disposeBag: DisposeBag! | |
override func setUp() { | |
super.setUp() | |
scheduler = TestScheduler(initialClock: 0) | |
observer = scheduler.createObserver(MovieViewState.self) | |
disposeBag = DisposeBag() | |
} | |
override func tearDown() { | |
disposeBag = nil | |
observer = nil | |
scheduler = nil | |
super.tearDown() | |
} | |
func testMoviesDefaultViewModel_viewState_shouldAlwaysStartsWithLoading() { | |
let repository = MoviesMocks.SuccessRespository() | |
let viewModel = MoviesDefaultViewModel(repository: repository) | |
viewModel.observeViewState().subscribe(observer).disposed(by: disposeBag) | |
viewModel.viewDidLoad() | |
scheduler.start() | |
let expectedViewState = Recorded.next(0, MovieViewState.loading) | |
guard let firstViewState = observer.events.first else { | |
XCTFail("Should contain at least one result") | |
return | |
} | |
XCTAssertEqual([firstViewState], [expectedViewState]) | |
} | |
func testMoviesDefaultViewModel_cantEmitSameViewState() { | |
let emptyMovies = [String]() | |
let repository = MoviesMocks.SuccessRespository(titles: emptyMovies) | |
let viewModel = MoviesDefaultViewModel(repository: repository) | |
viewModel.observeViewState().subscribe(observer).disposed(by: disposeBag) | |
viewModel.viewDidLoad() | |
scheduler.start() | |
repository.emit(new: emptyMovies) | |
let expectedEvents = [Recorded.next(0, MovieViewState.loading), | |
Recorded.next(0, MovieViewState.empty)] | |
XCTAssertEqual(observer.events, expectedEvents) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment