in FBSDKCoreKit/FBSDKCoreKitTests/Internal/BridgeAPI/ProtocolVersions/BridgeAPIProtocolNativeV1Tests.swift [352:403]
func testRequestParametersWithImageJSON() {
let protocolNative = BridgeAPIProtocolNativeV1(
appScheme: scheme,
pasteboard: nil,
dataLengthThreshold: UInt.max,
includeAppIcon: false,
errorFactory: errorFactory
)
let parameters: [String: Any] = [
"api_key_1": "value1",
"api_key_2": "value2",
"image": stubImage(),
]
do {
let requestURL = try protocolNative.requestURL(
withActionID: actionID,
scheme: scheme,
methodName: methodName,
parameters: parameters
)
let expectedPrefix = "\(scheme)://dialog/\(methodName)?"
XCTAssertTrue(requestURL.absoluteString.hasPrefix(expectedPrefix) == true)
/* Due to the non-deterministic order of Dictionary->JSON serialization,
we cannot do string comparisons to verify. */
let queryParameters = Utility.dictionary(withQuery: requestURL.query ?? "")
let expectedKeys = Set(["bridge_args", "method_args"])
XCTAssertEqual(Set(queryParameters.keys), expectedKeys)
var expectedMethodArgs = parameters
expectedMethodArgs["image"] = stubImageSerialized(parameters["image"] as? UIImage)
do {
let methodArgs = try BasicUtility.object(
forJSONString: queryParameters["method_args"] ?? "") as? [String: Any]
XCTAssertEqual(methodArgs as NSObject?, expectedMethodArgs as NSObject)
if let parseMethodData = methodArgs?["image"] as? [String: Any],
let decodedData = parseMethodData["fbAppBridgeType_jsonReadyValue"] {
guard let baseDecodedData = Base64.decode(asData: decodedData as? String) else {
return XCTAssertNil("Failed to decode data from Base64")
}
XCTAssertNotNil(UIImage(data: baseDecodedData))
} else {
XCTFail("Failed to parse method arguments")
}
} catch {
XCTFail("Unexpected error thrown: \(error)")
}
} catch {
XCTFail("Unexpected error thrown: \(error)")
}
}