Skip to content

Instantly share code, notes, and snippets.

@laiso
Last active February 21, 2017 09:22
Show Gist options
  • Save laiso/65f355c78fe82c3eb086d7839413368a to your computer and use it in GitHub Desktop.
Save laiso/65f355c78fe82c3eb086d7839413368a to your computer and use it in GitHub Desktop.
class AmountSettingViewModelSpec: QuickSpec {
override func spec() {
var viewModel: AmountSettingViewModel!
beforeEach {
viewModel = AmountSettingViewModel(amountText: Observable<String>.just("120"),
submitButtonTap: Observable<Void>.just())
}
it("should be button ebanled") {
let enable = try! viewModel.submitButtonEnable.toBlocking().single()
expect(enable).to(beTrue())
}
it("should be ¥120") {
let amount = try! viewModel.amount.toBlocking().single()
expect(amount).to(equal(120))
}
context("¥0") {
beforeEach {
viewModel = AmountSettingViewModel(amountText: Observable<String>.just("0"),
submitButtonTap: Observable<Void>.just())
}
it("should be button disabled") {
let enable = try! viewModel.submitButtonEnable.toBlocking().single()
expect(enable).to(beFalse())
}
it("should be ¥0") {
let amount = try! viewModel.amount.toBlocking().single()
expect(amount).to(equal(0))
}
}
}
}
struct AmountSettingViewModel {
let submitButtonEnable: Observable<Bool>
let amount: Observable<Int>
init(amountText: Observable<String>, submitButtonTap: Observable<Void>) {
amount = amountText.map { Int($0) ?? 0 }.shareReplayLatestWhileConnected()
submitButtonEnable = amount.map { $0 > 0 }
}
}
class AmountSettingViewController: UIViewController {
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var submitButton: UIButton!
lazy var viewModel: AmountSettingViewModel = {
return AmountSettingViewModel(amountText: self.textField.rx.text,
submitButtonTap: self.submitButton.rx.tap)
}()
private let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
viewModel.submitButtonEnable.bindTo(submitButton.rx.isEnabled)
.addDisposableTo(disposeBag)
viewModel.amount.subscribe(onNext: { [weak self] amount in
//self?.present(viewController, animated: true, completion: nil)
}).addDisposableTo(disposeBag)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment