ReCaptcha/Example/ReCaptcha_Tests/Core/ReCaptcha__Tests.swift

125 lines
4.0 KiB
Swift

//
// ReCaptcha__Tests.swift
// ReCaptcha
//
// Created by Flávio Caetano on 26/09/17.
// Copyright © 2018 ReCaptcha. All rights reserved.
//
import AppSwizzle
@testable import ReCaptcha
import RxSwift
import XCTest
class ReCaptcha__Tests: XCTestCase {
fileprivate struct Constants {
struct InfoDictKeys {
static let APIKey = "ReCaptchaKey"
static let Domain = "ReCaptchaDomain"
}
}
func test__Fails_Without_HTML_File() {
_ = Bundle.swizzleInstanceMethod(
origSelector: #selector(Bundle.path(forResource:ofType:)),
toAlterSelector: #selector(Bundle.failHTMLLoad(_:type:))
)
do {
_ = try ReCaptcha()
XCTFail("Should have failed")
} catch let e as ReCaptchaError {
print(e)
XCTAssertEqual(e, ReCaptchaError.htmlLoadError)
} catch let e {
XCTFail("Unexpected error: \(e)")
}
// Unswizzle
_ = Bundle.swizzleInstanceMethod(
origSelector: #selector(Bundle.path(forResource:ofType:)),
toAlterSelector: #selector(Bundle.failHTMLLoad(_:type:))
)
}
func test__Base_URL() {
// Ensures baseURL failure when nil
do {
_ = 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)")
}
// Ensures plist url if nil key
let plistURL = URL(string: "https://bar")!
let config1 = try? ReCaptcha.Config(apiKey: "", infoPlistKey: nil, baseURL: nil, infoPlistURL: plistURL)
XCTAssertEqual(config1?.baseURL, plistURL)
// Ensures preference of given url over plist entry
let url = URL(string: "ftp://foo")!
let config2 = try? ReCaptcha.Config(apiKey: "", infoPlistKey: nil, baseURL: url, infoPlistURL: plistURL)
XCTAssertEqual(config2?.baseURL, url)
}
func test__Base_URL_Without_Scheme() {
// Ignores URL with scheme
let goodURL = URL(string: "https://foo.bar")!
let config0 = try? ReCaptcha.Config(apiKey: "", infoPlistKey: nil, baseURL: goodURL, infoPlistURL: nil)
XCTAssertEqual(config0?.baseURL, goodURL)
// Fixes URL without scheme
let badURL = URL(string: "foo")!
let config = try? ReCaptcha.Config(apiKey: "", infoPlistKey: nil, baseURL: badURL, infoPlistURL: nil)
XCTAssertEqual(config?.baseURL.absoluteString, "http://" + badURL.absoluteString)
}
func test__API_Key() {
// Ensures key failure when nil
do {
_ = 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)")
}
// Ensures plist key if nil key
let plistKey = "bar"
let config1 = try? ReCaptcha.Config(
apiKey: nil,
infoPlistKey: plistKey,
baseURL: URL(string: "foo"),
infoPlistURL: nil
)
XCTAssertEqual(config1?.apiKey, plistKey)
// Ensures preference of given key over plist entry
let key = "foo"
let config2 = try? ReCaptcha.Config(
apiKey: key,
infoPlistKey: plistKey,
baseURL: URL(string: "foo"),
infoPlistURL: nil
)
XCTAssertEqual(config2?.apiKey, key)
}
}
private extension Bundle {
@objc func failHTMLLoad(_ resource: String, type: String) -> String? {
guard resource == "recaptcha" && type == "html" else {
return failHTMLLoad(resource, type: type)
}
return nil
}
}