Testing didLoad message
This commit is contained in:
parent
429b6a699c
commit
dae8490b15
|
|
@ -16,6 +16,7 @@
|
|||
D091B6E053FD250B4757E34C /* Pods_ReCaptcha_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9417A28DC340FF0BC1627B3F /* Pods_ReCaptcha_Tests.framework */; };
|
||||
F206BAD51F8D3FEB00A25807 /* Cartfile in Resources */ = {isa = PBXBuildFile; fileRef = F206BAD41F8D3FEB00A25807 /* Cartfile */; };
|
||||
F231B3971FEC325A00F82943 /* DispatchQueue__Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F231B3961FEC325A00F82943 /* DispatchQueue__Tests.swift */; };
|
||||
F231B39F1FED4A8C00F82943 /* ReCaptchaDecoder+Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = F231B39E1FED4A8C00F82943 /* ReCaptchaDecoder+Helper.swift */; };
|
||||
F288E9451F9537760018688D /* ReCaptchaError+Equatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F288E9441F9537760018688D /* ReCaptchaError+Equatable.swift */; };
|
||||
F2E2685E1F7AEE3400CD876D /* ReCaptcha__Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2E2685D1F7AEE3400CD876D /* ReCaptcha__Tests.swift */; };
|
||||
F2ECCF8A1E9FCEFE0097B199 /* ReCaptchaDecoder__Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2ECCF891E9FCEFE0097B199 /* ReCaptchaDecoder__Tests.swift */; };
|
||||
|
|
@ -56,6 +57,7 @@
|
|||
F206BAD41F8D3FEB00A25807 /* Cartfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Cartfile; path = ../Cartfile; sourceTree = "<group>"; };
|
||||
F21901D91F98D62F00D8E2C9 /* CHANGELOG.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = CHANGELOG.md; path = ../CHANGELOG.md; sourceTree = "<group>"; };
|
||||
F231B3961FEC325A00F82943 /* DispatchQueue__Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DispatchQueue__Tests.swift; sourceTree = "<group>"; };
|
||||
F231B39E1FED4A8C00F82943 /* ReCaptchaDecoder+Helper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ReCaptchaDecoder+Helper.swift"; sourceTree = "<group>"; };
|
||||
F288E9441F9537760018688D /* ReCaptchaError+Equatable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ReCaptchaError+Equatable.swift"; sourceTree = "<group>"; };
|
||||
F2E2685D1F7AEE3400CD876D /* ReCaptcha__Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReCaptcha__Tests.swift; sourceTree = "<group>"; };
|
||||
F2ECCF761E9FC47B0097B199 /* ReCaptcha_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReCaptcha_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
|
|
@ -191,6 +193,7 @@
|
|||
F2ECCF951EA00A5B0097B199 /* ReCaptchaWebViewManager+Helpers.swift */,
|
||||
F2ECCF971EA011370097B199 /* Result+Helpers.swift */,
|
||||
F288E9441F9537760018688D /* ReCaptchaError+Equatable.swift */,
|
||||
F231B39E1FED4A8C00F82943 /* ReCaptchaDecoder+Helper.swift */,
|
||||
);
|
||||
path = Helpers;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -456,6 +459,7 @@
|
|||
F2ECCF8E1E9FE68C0097B199 /* ReCaptchaWebViewManager__Tests.swift in Sources */,
|
||||
F2ECCF981EA011370097B199 /* Result+Helpers.swift in Sources */,
|
||||
F231B3971FEC325A00F82943 /* DispatchQueue__Tests.swift in Sources */,
|
||||
F231B39F1FED4A8C00F82943 /* ReCaptchaDecoder+Helper.swift in Sources */,
|
||||
F2E2685E1F7AEE3400CD876D /* ReCaptcha__Tests.swift in Sources */,
|
||||
F2ECCF931EA009360097B199 /* ReCaptcha+Rx__Tests.swift in Sources */,
|
||||
F288E9451F9537760018688D /* ReCaptchaError+Equatable.swift in Sources */,
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ class ReCaptchaDecoder__Tests: XCTestCase {
|
|||
|
||||
|
||||
func test__Send_Error() {
|
||||
let exp = expectation(description: "send message")
|
||||
let exp = expectation(description: "send error message")
|
||||
var result: Result?
|
||||
|
||||
assertResult = { res in
|
||||
|
|
@ -51,9 +51,7 @@ class ReCaptchaDecoder__Tests: XCTestCase {
|
|||
|
||||
// Check
|
||||
XCTAssertNotNil(result)
|
||||
XCTAssertEqual(result?.error, err)
|
||||
XCTAssertNil(result?.token)
|
||||
XCTAssertFalse(result!.showReCaptcha)
|
||||
XCTAssertEqual(result, .error(err))
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -75,14 +73,12 @@ class ReCaptchaDecoder__Tests: XCTestCase {
|
|||
|
||||
|
||||
// Check
|
||||
XCTAssertEqual(result?.error, .wrongMessageFormat)
|
||||
XCTAssertNil(result?.token)
|
||||
XCTAssertFalse(result!.showReCaptcha)
|
||||
XCTAssertEqual(result, .error(ReCaptchaError.wrongMessageFormat))
|
||||
}
|
||||
|
||||
|
||||
func test__Decode__Undefined() {
|
||||
let exp = expectation(description: "send message with undefined body")
|
||||
func test__Decode__Unexpected_Action() {
|
||||
let exp = expectation(description: "send message with unexpected action")
|
||||
var result: Result?
|
||||
|
||||
assertResult = { res in
|
||||
|
|
@ -92,21 +88,19 @@ class ReCaptchaDecoder__Tests: XCTestCase {
|
|||
|
||||
|
||||
// Send
|
||||
let message = MockMessage(message: ["foo": "bar"])
|
||||
let message = MockMessage(message: ["action": "bar"])
|
||||
decoder.send(message: message)
|
||||
|
||||
waitForExpectations(timeout: 1)
|
||||
|
||||
|
||||
// Check
|
||||
XCTAssertEqual(result?.error, .wrongMessageFormat)
|
||||
XCTAssertNil(result?.token)
|
||||
XCTAssertFalse(result!.showReCaptcha)
|
||||
XCTAssertEqual(result, .error(ReCaptchaError.wrongMessageFormat))
|
||||
}
|
||||
|
||||
|
||||
func test__Decode__ShowReCaptcha() {
|
||||
let exp = expectation(description: "send message with undefined body")
|
||||
let exp = expectation(description: "send showReCaptcha message")
|
||||
var result: Result?
|
||||
|
||||
assertResult = { res in
|
||||
|
|
@ -123,14 +117,12 @@ class ReCaptchaDecoder__Tests: XCTestCase {
|
|||
|
||||
|
||||
// Check
|
||||
XCTAssertNil(result?.error)
|
||||
XCTAssertNil(result?.token)
|
||||
XCTAssertTrue(result!.showReCaptcha)
|
||||
XCTAssertEqual(result, .showReCaptcha)
|
||||
}
|
||||
|
||||
|
||||
func test__Decode__Token() {
|
||||
let exp = expectation(description: "send message with undefined body")
|
||||
let exp = expectation(description: "send token message")
|
||||
var result: Result?
|
||||
|
||||
assertResult = { res in
|
||||
|
|
@ -148,48 +140,28 @@ class ReCaptchaDecoder__Tests: XCTestCase {
|
|||
|
||||
|
||||
// Check
|
||||
XCTAssertNil(result?.error)
|
||||
XCTAssertEqual(result?.token, token)
|
||||
XCTAssertFalse(result!.showReCaptcha)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class MockMessage: WKScriptMessage {
|
||||
override var body: Any {
|
||||
return storedBody
|
||||
}
|
||||
|
||||
fileprivate let storedBody: Any
|
||||
|
||||
init(message: Any) {
|
||||
storedBody = message
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Decoder Helpers
|
||||
fileprivate extension ReCaptchaDecoder {
|
||||
func send(message: MockMessage) {
|
||||
userContentController(WKUserContentController(), didReceive: message)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Result Helpers
|
||||
extension ReCaptchaDecoder.Result {
|
||||
var token: String? {
|
||||
guard case .token(let token) = self else { return nil }
|
||||
return token
|
||||
}
|
||||
|
||||
var showReCaptcha: Bool {
|
||||
guard case .showReCaptcha = self else { return false }
|
||||
return true
|
||||
}
|
||||
|
||||
var error: ReCaptchaError? {
|
||||
guard case .error(let error) = self else { return nil }
|
||||
return error
|
||||
XCTAssertEqual(result, .token(token))
|
||||
}
|
||||
|
||||
|
||||
func test__Decode__DidLoad() {
|
||||
let exp = expectation(description: "send did load message")
|
||||
var result: Result?
|
||||
|
||||
assertResult = { res in
|
||||
result = res
|
||||
exp.fulfill()
|
||||
}
|
||||
|
||||
|
||||
// Send
|
||||
let message = MockMessage(message: ["action": "didLoad"])
|
||||
decoder.send(message: message)
|
||||
|
||||
waitForExpectations(timeout: 1)
|
||||
|
||||
|
||||
// Check
|
||||
XCTAssertEqual(result, .didLoad)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ class ReCaptcha__Tests: XCTestCase {
|
|||
_ = try ReCaptcha()
|
||||
XCTFail("Should have failed")
|
||||
} catch let e as ReCaptchaError {
|
||||
print(e)
|
||||
XCTAssertEqual(e, ReCaptchaError.htmlLoadError)
|
||||
} catch let e {
|
||||
XCTFail("Unexpected error: \(e)")
|
||||
|
|
@ -49,6 +50,7 @@ class ReCaptcha__Tests: XCTestCase {
|
|||
_ = try ReCaptcha.Config(apiKey: "", infoPlistKey: nil, baseURL: nil, infoPlistURL: nil)
|
||||
XCTFail("Should have failed")
|
||||
} catch let e as ReCaptchaError {
|
||||
print(e)
|
||||
XCTAssertEqual(e, ReCaptchaError.baseURLNotFound)
|
||||
} catch let e {
|
||||
XCTFail("Unexpected error: \(e)")
|
||||
|
|
@ -71,6 +73,7 @@ class ReCaptcha__Tests: XCTestCase {
|
|||
_ = try ReCaptcha.Config(apiKey: nil, infoPlistKey: nil, baseURL: nil, infoPlistURL: nil)
|
||||
XCTFail("Should have failed")
|
||||
} catch let e as ReCaptchaError {
|
||||
print(e)
|
||||
XCTAssertEqual(e, ReCaptchaError.apiKeyNotFound)
|
||||
} catch let e {
|
||||
XCTFail("Unexpected error: \(e)")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,55 @@
|
|||
//
|
||||
// ReCaptchaDecoder+Helper.swift
|
||||
// ReCaptcha
|
||||
//
|
||||
// Created by Flávio Caetano on 22/12/17.
|
||||
// Copyright © 2017 ReCaptcha. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
@testable import ReCaptcha
|
||||
import WebKit
|
||||
|
||||
class MockMessage: WKScriptMessage {
|
||||
override var body: Any {
|
||||
return storedBody
|
||||
}
|
||||
|
||||
fileprivate let storedBody: Any
|
||||
|
||||
init(message: Any) {
|
||||
storedBody = message
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Decoder Helpers
|
||||
extension ReCaptchaDecoder {
|
||||
func send(message: MockMessage) {
|
||||
userContentController(WKUserContentController(), didReceive: message)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Result Helpers
|
||||
extension ReCaptchaDecoder.Result: Equatable {
|
||||
var error: ReCaptchaError? {
|
||||
guard case .error(let error) = self else { return nil }
|
||||
return error
|
||||
}
|
||||
|
||||
public static func == (lhs: ReCaptchaDecoder.Result, rhs: ReCaptchaDecoder.Result) -> Bool {
|
||||
switch (lhs, rhs) {
|
||||
case (.showReCaptcha, .showReCaptcha),
|
||||
(.didLoad, .didLoad):
|
||||
return true
|
||||
|
||||
case (.token(let lht), .token(let rht)):
|
||||
return lht == rht
|
||||
|
||||
case (.error(let lhe), .error(let rhe)):
|
||||
return lhe == rhe
|
||||
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue