Testing didLoad message

This commit is contained in:
Flávio Caetano 2017-12-22 12:26:47 -02:00
parent 429b6a699c
commit dae8490b15
4 changed files with 95 additions and 61 deletions

View File

@ -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 */,

View File

@ -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)
}
}

View File

@ -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)")

View File

@ -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
}
}
}