in FBSDKCoreKit/FBSDKCoreKitTests/Internal/BridgeAPI/ProtocolVersions/BridgeAPIProtocolNativeV1Tests.swift [300:350]
func testRequestParametersWithDataJSON() {
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",
"data": stubData(),
]
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["data"] = stubDataSerialized(parameters["data"] as? Data)
do {
let methodArgs = try BasicUtility.object(forJSONString: queryParameters["method_args"] ?? "") as? [String: Any]
XCTAssertEqual(methodArgs as NSObject?, expectedMethodArgs as NSObject)
if let parseMethodData = methodArgs?["data"] as? [String: Any],
let decodedData = parseMethodData["fbAppBridgeType_jsonReadyValue"] {
let baseDecodedData = Base64.decode(asData: decodedData as? String)
XCTAssertNotNil(baseDecodedData)
XCTAssertEqual(baseDecodedData, parameters["data"] as? Data)
} else {
XCTFail("Failed to parse method arguments")
}
} catch {
XCTFail("Unexpected error thrown: \(error)")
}
} catch {
XCTFail("Unexpected error thrown: \(error)")
}
}