in FBSDKLoginKit/FBSDKLoginKitTests/LoginManagerTests.swift [236:295]
func testCompletingAuthenticationWithMixedPermissionsWithExpectedChallenge() throws {
var capturedResult: LoginManagerLoginResult?
loginManager.setRequestedPermissions(["email", "user_friends"])
loginManager.handler = { result, _ in
capturedResult = result
}
_ = keychainStore.setString(
challenge,
forKey: "expected_login_challenge",
accessibility: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
)
let parameters = LoginCompletionParameters()
parameters.accessTokenString = "accessTokenString"
parameters.challenge = challenge
parameters.authenticationTokenString = "sometoken"
parameters.permissions = FBPermission.permissions(fromRawPermissions: ["public_profile"])
parameters.declinedPermissions = FBPermission.permissions(fromRawPermissions: ["email", "user_friends"])
parameters.userID = "123"
loginManager.completeAuthentication(parameters, expectChallenge: true)
let result = try XCTUnwrap(capturedResult)
XCTAssertFalse(result.isCancelled)
let tokenAfterAuth = try XCTUnwrap(TestAccessTokenWallet.currentAccessToken)
XCTAssertEqual(
tokenAfterAuth.tokenString,
"accessTokenString"
)
XCTAssertEqual(
tokenAfterAuth.userID,
"123",
"failed to parse userID"
)
XCTAssertEqual(
tokenAfterAuth.permissions,
["public_profile"],
"unexpected permissions"
)
XCTAssertEqual(
result.grantedPermissions,
["public_profile"],
"unexpected permissions"
)
let expectedDeclined = ["email", "user_friends"]
XCTAssertEqual(
tokenAfterAuth.declinedPermissions,
Set(expectedDeclined.map(Permission.init)),
"unexpected permissions"
)
XCTAssertEqual(
result.declinedPermissions,
Set(expectedDeclined),
"unexpected permissions"
)
XCTAssertNil(result.authenticationToken)
XCTAssertNil(keychainStore.keychainDictionary["expected_login_challenge"])
XCTAssertTrue(keychainStore.wasStringForKeyCalled)
}