source/UberRidesTests/RidesMocks.swift (142 lines of code) (raw):
//
// RidesMocks.swift
// UberRides
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import WebKit
@testable import UberCore
@testable import UberRides
class RideRequestViewMock : RideRequestView {
var testClosure: (() -> ())?
init(rideRequestView: RideRequestView, testClosure: (() -> ())?) {
self.testClosure = testClosure
super.init(rideParameters: rideRequestView.rideParameters, accessToken: rideRequestView.accessToken, frame: rideRequestView.frame)
}
required init(rideParameters: RideParameters?, accessToken: AccessToken?, frame: CGRect) {
fatalError("init(rideParameters:accessToken:frame:) has not been implemented")
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func load() {
self.testClosure?()
}
override func cancelLoad() {
self.testClosure?()
}
}
class RideRequestViewControllerMock : RideRequestViewController {
var loadClosure: (() -> ())?
var networkClosure: (() -> ())?
var notSupportedClosure: (() -> ())?
var presentViewControllerClosure: ((UIViewController, Bool, (() -> Void)?) -> ())?
init(rideParameters: RideParameters, loginManager: LoginManager, loadClosure: (() -> ())? = nil, networkClosure: (() -> ())? = nil, presentViewControllerClosure: ((UIViewController, Bool, (() -> Void)?) -> ())? = nil, notSupportedClosure: (() -> ())? = nil) {
self.loadClosure = loadClosure
self.networkClosure = networkClosure
self.notSupportedClosure = notSupportedClosure
self.presentViewControllerClosure = presentViewControllerClosure
super.init(rideParameters: rideParameters, loginManager: loginManager)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func load() {
if let loadClosure = loadClosure {
loadClosure()
} else {
super.load()
}
}
override func displayNetworkErrorAlert() {
if let networkClosure = networkClosure {
networkClosure()
} else {
super.displayNetworkErrorAlert()
}
}
override func displayNotSupportedErrorAlert() {
if let notSupportedClosure = notSupportedClosure {
notSupportedClosure()
} else {
super.displayNotSupportedErrorAlert()
}
}
override func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)?) {
if let presentViewControllerClosure = presentViewControllerClosure {
presentViewControllerClosure(viewControllerToPresent, flag, completion)
} else {
super.present(viewControllerToPresent, animated: flag, completion: completion)
}
}
}
class WebViewMock : WKWebView {
var testClosure: ((URLRequest) -> ())?
init(frame: CGRect, configuration: WKWebViewConfiguration, testClosure: ((URLRequest) -> ())?) {
self.testClosure = testClosure
super.init(frame: frame, configuration: configuration)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func load(_ request: URLRequest) -> WKNavigation? {
testClosure?(request)
return nil
}
}
class RequestDeeplinkMock : RequestDeeplink {
var testClosure: ((URL?) -> (Bool))?
init(rideParameters: RideParameters, testClosure: ((URL?) -> (Bool))?) {
self.testClosure = testClosure
super.init(rideParameters: rideParameters, fallbackType: .mobileWeb)
}
override func execute(completion: ((NSError?) -> ())? = nil) {
guard let testClosure = testClosure else {
completion?(nil)
return
}
_ = testClosure(url)
}
}
class DeeplinkRequestingBehaviorMock: DeeplinkRequestingBehavior {
var testClosure: ((URL?) -> (Bool))?
init(testClosure: ((URL?) -> (Bool))?) {
self.testClosure = testClosure
super.init()
}
override func createDeeplink(rideParameters: RideParameters) -> RequestDeeplink {
return RequestDeeplinkMock(rideParameters: rideParameters, testClosure: testClosure)
}
}
@objc class RideRequestViewControllerDelegateMock : NSObject, RideRequestViewControllerDelegate {
let testClosure: (RideRequestViewController, NSError) -> ()
init(testClosure: @escaping (RideRequestViewController, NSError) -> ()) {
self.testClosure = testClosure
}
@objc func rideRequestViewController(_ rideRequestViewController: RideRequestViewController, didReceiveError error: NSError) {
self.testClosure(rideRequestViewController, error)
}
}
@objc class DeeplinkingProtocolMock : NSObject, Deeplinking {
let deeplinkingObject: Deeplinking
var executeClosure: ((((NSError?) -> ())?) -> ())?
var backingDeeplinkURL: URL?
var overrideExecute: Bool = false
var overrideExecuteValue: NSError? = nil
var url: URL {
get {
return backingDeeplinkURL ?? deeplinkingObject.url
}
set(newDeeplinkURL) {
backingDeeplinkURL = newDeeplinkURL
}
}
var fallbackURLs: [URL] = []
@objc func execute(completion: ((NSError?) -> ())?) {
if let closure = executeClosure {
closure(completion)
} else if overrideExecute {
completion?(overrideExecuteValue)
} else {
deeplinkingObject.execute(completion: completion)
}
}
init(deeplinkingObject: Deeplinking) {
self.deeplinkingObject = deeplinkingObject
super.init()
}
}