Académique Documents
Professionnel Documents
Culture Documents
// RepositoryListViewModelTests.swift
// RepoSearcher
//
// Created by Arthur Myronenko on 7/12/17.
// Copyright © 2017 UPTech Team. All rights reserved.
//
testScheduler = TestScheduler(initialClock: 0)
disposeBag = DisposeBag()
githubService = GithubServiceMock()
viewModel = RepositoryListViewModel(initialLanguage: "Swift",
githubService: githubService)
}
func test_InitWithInitialLanguage_EmitsValidTitle() {
viewModel = RepositoryListViewModel(initialLanguage: "Swift",
githubService: githubService)
let result = testScheduler.start { self.viewModel.title }
XCTAssertEqual(result.events, [next(200, "Swift")])
}
func test_InitWithInitialLanguage_SendsValidRequest() {
viewModel = RepositoryListViewModel(initialLanguage: "Swift",
githubService: githubService)
testScheduler.createHotObservable([next(300, ())])
.bind(to: viewModel.reload)
.disposed(by: disposeBag)
func test_Repositories_ReturnsValidViewModels() {
let testRepository = Repository(fullName: "Full Name",
description: "Description",
starsCount: 3,
url: "https://www.apple.com")
githubService.repositoriesReturnValue = .just([testRepository])
testScheduler.createHotObservable([next(300, ())])
.bind(to: viewModel.reload)
.disposed(by: disposeBag)
func test_RepositoriesWithNetworkError_EmitsAlertMessage() {
let error = NSError(domain: "Test", code: 2, userInfo: nil)
githubService.repositoriesReturnValue = .error(error)
testScheduler.createHotObservable([next(300, ())])
.bind(to: viewModel.reload)
.disposed(by: disposeBag)
viewModel.repositories
.subscribe()
.disposed(by: disposeBag)
func test_LanguageChange_UpdatesRepositories() {
githubService.repositoriesReturnValue = .just([testRepository])
testScheduler.createHotObservable([next(300, ())])
.bind(to: viewModel.reload)
.disposed(by: disposeBag)
testScheduler.createHotObservable([next(400, "Objective-C")])
.bind(to: viewModel.setCurrentLanguage)
.disposed(by: disposeBag)
func test_SelectRepository_EmitsShowRepository() {
let repositoryToSelect = RepositoryViewModel(repository: testRepository)
let selectRepositoryObservable =
testScheduler.createHotObservable([next(300, repositoryToSelect)])
selectRepositoryObservable
.bind(to: viewModel.selectRepository)
.disposed(by: disposeBag)
let result = testScheduler.start { self.viewModel.showRepository.map
{ $0.absoluteString } }
XCTAssertEqual(result.events, [next(300, "https://www.apple.com")])
}
func test_ChooseLanguage_EmitsShowLanguageList() {
testScheduler.createHotObservable([next(300, ())])
.bind(to: viewModel.chooseLanguage)
.disposed(by: disposeBag)