Skip to content

Commit

Permalink
af: Gate native unit tests code per platform [SDK-4701] 3/3 (#349)
Browse files Browse the repository at this point in the history
  • Loading branch information
Widcket authored Nov 20, 2023
1 parent bb1bfbf commit 9303d01
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 34 deletions.
27 changes: 21 additions & 6 deletions auth0_flutter/example/ios/Tests/Mocks.swift
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import Flutter
import Auth0

#if os(iOS)
import Flutter
#else
import FlutterMacOS
#endif

let testIdToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJmb28iLCJuYW1lIjoiYmFyIiwiZW1haWwiOiJmb29AZXhhbXBsZS5"
+ "jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicGljdHVyZSI6Imh0dHBzOi8vZXhhbXBsZS5jb20vcGljdHVyZSIsInVwZGF0ZWRfYXQiOiIyMDI"
+ "yLTA0LTE1VDAzOjE1OjUxLjc4N1oifQ.mFq-johzLTFQUAl9pjgQraTM6I8AGfcEcWBg0Ah2vss"
Expand Down Expand Up @@ -96,8 +101,7 @@ class MockTextureRegistry: NSObject, FlutterTextureRegistry {
}

class SpyPluginRegistrar: NSObject, FlutterPluginRegistrar {
private(set) var delegate: FlutterPlugin?

#if os(iOS)
func messenger() -> FlutterBinaryMessenger {
return MockBinaryMessenger()
}
Expand All @@ -106,15 +110,26 @@ class SpyPluginRegistrar: NSObject, FlutterPluginRegistrar {
return MockTextureRegistry()
}

func register(_ factory: FlutterPlatformViewFactory, withId: String) {}
func addApplicationDelegate(_ delegate: FlutterPlugin) {}

func register(_ factory: FlutterPlatformViewFactory,
withId: String,
gestureRecognizersBlockingPolicy: FlutterPlatformViewGestureRecognizersBlockingPolicy) {}
#else
var view: NSView?

func publish(_ value: NSObject) {}
let messenger: FlutterBinaryMessenger = MockBinaryMessenger()

func addApplicationDelegate(_ delegate: FlutterPlugin) {}
let textures: FlutterTextureRegistry = MockTextureRegistry()

func addApplicationDelegate(_ delegate: FlutterAppLifecycleDelegate) {}
#endif

private(set) var delegate: FlutterPlugin?

func register(_ factory: FlutterPlatformViewFactory, withId: String) {}

func publish(_ value: NSObject) {}

func lookupKey(forAsset asset: String) -> String {
return ""
Expand Down
7 changes: 6 additions & 1 deletion auth0_flutter/example/ios/Tests/Utilities.swift
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
import XCTest
import Flutter
import Auth0
import JWTDecode

#if os(iOS)
import Flutter
#else
import FlutterMacOS
#endif

@testable import auth0_flutter

// MARK: - Operators
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,10 @@ extension WebAuthHandlerTests {
.login: WebAuthLoginMethodHandler.self,
.logout: WebAuthLogoutMethodHandler.self
]
let mockMethodHandlers: [WebAuthHandler.Method: MethodHandler] = [
.login: WebAuthLoginMethodHandler(client: SpyWebAuth()),
.logout: WebAuthLogoutMethodHandler(client: SpyWebAuth())
]
methodHandlers.forEach { method, methodHandler in
let methodCall = FlutterMethodCall(methodName: method.rawValue, arguments: arguments())
let expectation = self.expectation(description: "Returned \(methodHandler)")
Expand All @@ -121,7 +125,7 @@ extension WebAuthHandlerTests {
let result = WebAuthHandler().methodHandlerProvider(method, client)
XCTAssertTrue(type(of: result) == methodHandler)
expectation.fulfill()
return result
return mockMethodHandlers[method]!
}
sut.handle(methodCall) { _ in }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,20 @@ fileprivate typealias Argument = WebAuthLoginMethodHandler.Argument
class WebAuthLoginHandlerTests: XCTestCase {
var spy: SpyWebAuth!
var sut: WebAuthLoginMethodHandler!

#if os(iOS)
var spySafariProvider: SpySafariProvider!
#endif

override func setUpWithError() throws {
spy = SpyWebAuth()

#if os(iOS)
spySafariProvider = SpySafariProvider()
sut = WebAuthLoginMethodHandler(client: spy, safariProvider: spySafariProvider.provider)
#else
sut = WebAuthLoginMethodHandler(client: spy)
#endif
}
}

Expand Down Expand Up @@ -176,24 +184,26 @@ extension WebAuthLoginHandlerTests {
sut.handle(with: arguments(without: Argument.maxAge)) { _ in }
XCTAssertNil(spy.maxAgeValue)
}


#if os(iOS)
// MARK: safariViewController

func testAddsSafariViewController() {
sut.handle(with: arguments()) { _ in }
XCTAssertNotNil(spy.provider)
}

func testDoesNotAddSafariViewController() {
sut.handle(with: arguments(without: SafariViewController.key)) { _ in }
XCTAssertNil(spy.provider)
}

func testAddSafariViewControllerWithStyle() {
let value = [SafariViewControllerProperty.presentationStyle.rawValue: 2]
sut.handle(with: arguments(withKey: SafariViewController.key, value: value)) { _ in }
XCTAssertEqual(spySafariProvider.presentationStyle, UIModalPresentationStyle.formSheet)
}
#endif
}

// MARK: - Login Result
Expand Down Expand Up @@ -236,7 +246,7 @@ extension WebAuthLoginHandlerTests {

extension WebAuthLoginHandlerTests {
override func arguments() -> [String: Any] {
return [
var values: [String: Any] = [
Argument.scopes.rawValue: [],
Argument.parameters.rawValue: [:],
Argument.useEphemeralSession.rawValue: false,
Expand All @@ -247,7 +257,12 @@ extension WebAuthLoginHandlerTests {
Argument.leeway.rawValue: 1,
Argument.issuer.rawValue: "",
Argument.maxAge.rawValue: 1,
Argument.safariViewController.rawValue: [:],
]

#if os(iOS)
values[Argument.safariViewController.rawValue] = [:]
#endif

return values
}
}
35 changes: 15 additions & 20 deletions auth0_flutter/example/ios/Tests/WebAuth/WebAuthSpies.swift
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import Combine
import Flutter
import Auth0

#if os(iOS)
import Flutter
#else
import FlutterMacOS
#endif

@testable import auth0_flutter

// MARK: - MethodHandler Spies
Expand Down Expand Up @@ -118,21 +123,12 @@ class SpyWebAuth: WebAuth {
callback(loginResult)
}

#if compiler(>=5.5) && canImport(_Concurrency)
#if compiler(>=5.5.2)
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.2, *)
func start() async throws -> Credentials {
return try loginResult.get()
}
#else
@available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *)
#if canImport(_Concurrency)
func start() async throws -> Credentials {
return try loginResult.get()
}
#endif
#endif

@available(iOS 13.0, *)
func start() -> AnyPublisher<Credentials, WebAuthError> {
return loginResult.publisher.eraseToAnyPublisher()
}
Expand All @@ -144,24 +140,23 @@ class SpyWebAuth: WebAuth {
}

class MockWebAuthUserAgent: WebAuthUserAgent {
func start() {
}

func finish(with result: Auth0.WebAuthResult<Void>) {
}
}
func start() {}

func finish(with result: Auth0.WebAuthResult<Void>) {}
}

#if os(iOS)
class SpySafariProvider {
var presentationStyle: UIModalPresentationStyle? = nil

init() {}

func provider(_ style: UIModalPresentationStyle) -> WebAuthProvider {
self.presentationStyle = style

return { (_: URL, _: @escaping (WebAuthResult<Void>) -> Void) -> (WebAuthUserAgent) in
return MockWebAuthUserAgent()
}
}
}
#endif

0 comments on commit 9303d01

Please sign in to comment.