Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save vladimirgoncharov/fb2236e20c270f2ce350bf77620da6ef to your computer and use it in GitHub Desktop.
Save vladimirgoncharov/fb2236e20c270f2ce350bf77620da6ef to your computer and use it in GitHub Desktop.
/// ---------------- When a presenter is UIViewController
class View: UIView {
let loadButton = UIButton()
let priceLabel = UILabel()
}
class Presenter : UIViewController {
var price: Int?
var theView: View {
return super.view as! View
}
override func viewDidLoad() {
super.viewDidLoad()
loadData { result in
updateUIForPrice()
}
}
func didTapLoadButton(button: UIButton) {
loadData { result in
updateUIForPrice()
}
}
func loadData(completion: ((success: Bool) -> Void)) {
// loading data
price = loadedPrice
completion?(true)
}
func updateUIForPrice() {
self.theView.priceLabel.text = String(self.price!)
}
}
class Presenter: XCTestCase {
func testViewDidLoad() {
let presenter = Presenter.getFromStryboard()
stubRequest()
// check after time price
}
func testDidTapLoadButton() {
let presenter = Presenter.getFromStryboard()
stubRequest()
// check after time price
}
func testUpdateUIForPrice() {
let presenter = Presenter.getFromStryboard()
// test set price for priceLabel
}
func testSuccessfulLoadData() {
let presenter = Presenter.getFromStryboard()
stubRequest()
presenter.loadData {
}
}
func testFailedLoadData() {
let presenter = Presenter.getFromStryboard()
stubRequest()
presenter.loadData {
}
}
}
/// ---------------- MVP
class View: UIViewController {
let loadButton = UIButton()
let priceLabel = UILabel()
let presenter: Presenter!
func set(price: Int) {
self.priceLabel.text = String(self.price!)
}
func didTapLoadButton(button: UIButton) {
presenter.didTapLoadButton()
}
override func viewDidLoad() {
super.viewDidLoad()
presenter.viewDidLoad()
}
}
class Presenter : NSObject {
var price: Int?
let view: View!
func viewDidLoad() {
loadData { result in
view.set(price: price!)
}
}
func didTapLoadButton() {
loadData { result in
view.set(price: price!)
}
}
func loadData(completion: ((success: Bool) -> Void)) {
// loading data
price = loadedPrice
completion?(true)
}
}
class View: XCTestCase {
func testSetPrice() {
let view = View.getFromStoryboard()
// test set price for priceLabel
}
func testViewDidLoad() {
let view = View.getFromStoryboard()
stubRequest()
// check after time price
}
func testDidTapLoadButton() {
let view = View.getFromStoryboard()
stubRequest()
// check after time price
}
}
class Presenter: XCTestCase {
func testSuccessfulLoadData() {
let presenter = Presenter()
stubRequest()
presenter.loadData {
}
}
func testFailedLoadData() {
let presenter = Presenter()
stubRequest()
presenter.loadData {
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment