in FBSDKLoginKit/FBSDKLoginKitTests/DeviceLoginManagerTests.swift [357:412]
func testNotifyTokenGraphRequestCompleteWithPermissionsAndUserID() throws {
manager._notifyToken(
SampleAccessTokens.validToken.tokenString,
withExpirationDate: SampleAccessTokens.validToken.expirationDate,
withDataAccessExpirationDate: SampleAccessTokens.validToken.dataAccessExpirationDate
)
let response: [String: Any] = [
"id": "123",
"permissions": [
"marker": true,
],
]
let granted = ["public_profile", "email"]
let declined = ["user_friends"]
let expired = ["user_birthday"]
internalUtility.stubbedGrantedPermissions = granted
internalUtility.stubbedDeclinedPermissions = declined
internalUtility.stubbedExpiredPermissions = expired
let completion = try XCTUnwrap(factory.capturedRequests.first?.capturedCompletionHandler)
completion(
nil,
response,
nil
)
guard let loginResult = delegate.capturedResult else {
XCTFail("Should receive a login result")
return
}
XCTAssertFalse(loginResult.isCancelled)
guard let token = loginResult.accessToken else {
XCTFail("Should receive an AccessToken within login result")
return
}
let marker = try XCTUnwrap(internalUtility.capturedExtractPermissionsResponse?["marker"] as? Bool)
XCTAssertTrue(
marker,
"The response's permissions should be passed to the internal utility"
)
XCTAssertEqual(token.userID, "123")
XCTAssertEqual(
Set(token.permissions.map(\.name)),
Set(granted)
)
XCTAssertEqual(
Set(token.declinedPermissions.map(\.name)),
Set(declined)
)
XCTAssertEqual(
Set(token.expiredPermissions.map(\.name)),
Set(expired)
)
XCTAssertEqual(token, AccessToken.current)
}