metatext/ServiceLayer/Sources/ServiceLayerMocks/MockWebAuthSession.swift

68 lines
2 KiB
Swift
Raw Normal View History

// Copyright © 2020 Metabolist. All rights reserved.
import Foundation
2020-08-31 18:57:02 +00:00
import ServiceLayer
2020-08-31 18:57:02 +00:00
public class MockWebAuthSession: WebAuthSession {
2020-08-02 22:23:01 +00:00
let completionHandler: WebAuthSessionCompletionHandler
let url: URL
let callbackURLScheme: String?
2020-08-31 18:57:02 +00:00
public var presentationContextProvider: WebAuthPresentationContextProviding?
2020-08-31 18:57:02 +00:00
public required init(
url URL: URL,
callbackURLScheme: String?,
2020-08-02 22:23:01 +00:00
completionHandler: @escaping WebAuthSessionCompletionHandler) {
self.url = URL
self.callbackURLScheme = callbackURLScheme
self.completionHandler = completionHandler
}
2020-08-31 18:57:02 +00:00
public func start() -> Bool {
completionHandler(completionHandlerURL, completionHandlerError)
return true
}
var completionHandlerURL: URL? {
nil
}
var completionHandlerError: Error? {
nil
}
}
2020-11-09 06:22:20 +00:00
public final class SuccessfulMockWebAuthSession: MockWebAuthSession {
private let redirectURL: URL
required init(
url URL: URL,
callbackURLScheme: String?,
2020-08-02 22:23:01 +00:00
completionHandler: @escaping WebAuthSessionCompletionHandler) {
redirectURL = Foundation.URL(
string: URLComponents(url: URL, resolvingAgainstBaseURL: true)!
.queryItems!.first(where: { $0.name == "redirect_uri" })!.value!)!
super.init(
url: URL,
callbackURLScheme: callbackURLScheme,
completionHandler: completionHandler)
}
override var completionHandlerURL: URL? {
var components = URLComponents(url: redirectURL, resolvingAgainstBaseURL: true)!
var queryItems = components.queryItems ?? []
queryItems.append(URLQueryItem(name: "code", value: UUID().uuidString))
components.queryItems = queryItems
return components.url
}
}
2020-11-09 06:22:20 +00:00
public final class CanceledLoginMockWebAuthSession: MockWebAuthSession {
override var completionHandlerError: Error? {
2020-08-02 22:23:01 +00:00
WebAuthSessionError(.canceledLogin)
}
}