FBSDKGamingServicesKit/FBSDKGamingServicesKitTests/Internal/CustomUpdateGraphRequestTests.swift (258 lines of code) (raw):
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* This source code is licensed under the license found in the
* LICENSE file in the root directory of this source tree.
*/
@testable import FBSDKGamingServicesKit
import FBSDKCoreKit
import TestTools
import XCTest
@available(iOS 13.0, *)
final class CustomUpdateGraphRequestTests: XCTestCase {
let factory = TestGraphRequestFactory()
lazy var requester = CustomUpdateGraphRequest(graphRequestFactory: factory)
var validContextTokenID = "12345"
let validMediaContentParameterDictionary = [
CustomUpdateContentObjectsParameters.contextKEY: CustomUpdateContentObjectsParameters.contextValue,
CustomUpdateContentObjectsParameters.textKey: CustomUpdateContentObjectsParameters.textValue,
CustomUpdateContentObjectsParameters.mediaKey: CustomUpdateContentObjectsParameters.mediaValue,
]
let validImageContentParameterDictionary = [
CustomUpdateContentObjectsParameters.contextKEY: CustomUpdateContentObjectsParameters.contextValue,
CustomUpdateContentObjectsParameters.textKey: CustomUpdateContentObjectsParameters.textValue,
CustomUpdateContentObjectsParameters.imageKey: CustomUpdateContentObjectsParameters.imageValue,
]
override func setUp() {
super.setUp()
GamingContext.current = GamingContext(identifier: validContextTokenID, size: 0)
AuthenticationToken.current = SampleAuthenticationToken.validToken(withGraphDomain: "gaming")
}
func testDependencies() {
let requester = CustomUpdateGraphRequest()
XCTAssertTrue(
requester.graphRequestFactory is GraphRequestFactory,
"Should have a default GraphRequestFactory of the expected type"
)
}
func testCustomDependencies() {
XCTAssertEqual(
requester.graphRequestFactory as? TestGraphRequestFactory,
factory,
"Should be able to create with a custom graph request factory"
)
}
// MARK: - CustomUpdateContentMedia
func testPerformRequest() throws {
try requester.request(content: CustomUpdateContentObjects.mediaContentValid) { _ in
XCTFail("Should not reach here")
}
let request = try XCTUnwrap(factory.capturedRequests.first)
XCTAssertEqual(
request.startCallCount,
1,
"Should start the custom update request"
)
XCTAssertEqual(
factory.capturedGraphPath,
"me/custom_update",
"Should create a request with the expected graph path"
)
XCTAssertEqual(
factory.capturedParameters as? [String: String],
validMediaContentParameterDictionary,
"Request should have the correct parameters"
)
}
func testHandlingRequestInvalidMediaContentError() throws {
var caughtContentError = false
do {
try requester.request(content: CustomUpdateContentObjects.mediaContentInvalidMessage) { _ in
XCTFail("Should not succeed")
}
} catch CustomUpdateContentError.invalidMessage {
caughtContentError = true
}
XCTAssertTrue(caughtContentError, "Should throw an invalid message content error")
}
func testHandlingRequestError() throws {
var completionWasInvoked = false
try requester.request(content: CustomUpdateContentObjects.mediaContentValid) { result in
switch result {
case let .failure(error):
guard case let .server(serverError) = error else {
return XCTFail("Should not be a decoding error")
}
XCTAssertTrue(serverError is SampleError)
case .success:
XCTFail("Should not succeed")
}
completionWasInvoked = true
}
let completion = try XCTUnwrap(factory.capturedRequests.first?.capturedCompletionHandler)
completion(nil, nil, SampleError())
XCTAssert(completionWasInvoked)
}
func testHandlingRequestInvalidResult() throws {
var completionWasInvoked = false
try requester.request(content: CustomUpdateContentObjects.mediaContentValid) { result in
switch result {
case let .failure(error):
guard case .decoding = error else {
return XCTFail(
"Expected a decoding error, instead received: \(error)"
)
}
case .success:
XCTFail("Should not succeed")
}
completionWasInvoked = true
}
let completion = try XCTUnwrap(factory.capturedRequests.first?.capturedCompletionHandler)
completion(nil, SampleCustomUpdateGraphAPIResults.invalid, nil)
XCTAssert(completionWasInvoked)
}
func testHandlingRequestSuccessFalse() throws {
var completionWasInvoked = false
var didSucceed = false
try requester.request(content: CustomUpdateContentObjects.mediaContentValid) { result in
switch result {
case let .failure(error):
return XCTFail(
"Expecting the request to succeed instead receieved: \(error)"
)
case let .success(succeed):
didSucceed = succeed
}
completionWasInvoked = true
}
let completion = try XCTUnwrap(factory.capturedRequests.first?.capturedCompletionHandler)
completion(nil, SampleCustomUpdateGraphAPIResults.successFalse, nil)
XCTAssert(completionWasInvoked)
XCTAssertFalse(didSucceed)
}
func testHandlingRequestValidResult() throws {
var completionWasInvoked = false
var didSucceed = false
try requester.request(content: CustomUpdateContentObjects.mediaContentValid) { result in
switch result {
case let .failure(error):
return XCTFail(
"Expecting the request to succeed instead receieved: \(error)"
)
case let .success(succeed):
didSucceed = succeed
}
completionWasInvoked = true
}
let completion = try XCTUnwrap(factory.capturedRequests.first?.capturedCompletionHandler)
completion(nil, SampleCustomUpdateGraphAPIResults.successTrue, nil)
XCTAssert(completionWasInvoked)
XCTAssertTrue(didSucceed)
}
// MARK: - CustomUpdateContentImage
func testPerformRequestWithImageContent() throws {
try requester.request(content: CustomUpdateContentObjects.imageContentValid) { _ in
XCTFail("Should not reach here")
}
let request = try XCTUnwrap(factory.capturedRequests.first)
XCTAssertEqual(
request.startCallCount,
1,
"Should start the custom update request"
)
XCTAssertEqual(
factory.capturedGraphPath,
"me/custom_update",
"Should create a request with the expected graph path"
)
XCTAssertEqual(
factory.capturedParameters as? [String: String],
validImageContentParameterDictionary,
"Request should have the correct parameters"
)
}
func testHandlingRequestInvalidImageContentError() throws {
var caughtContentError = false
do {
try requester.request(content: CustomUpdateContentObjects.imageContentInvalidImage) { _ in
XCTFail("Should not reach here")
}
} catch CustomUpdateContentError.invalidImage {
caughtContentError = true
}
XCTAssertTrue(caughtContentError, "Should throw an invalid image content error")
}
func testHandlingRequestErrorWithImageContent() throws {
var completionWasInvoked = false
try requester.request(content: CustomUpdateContentObjects.imageContentValid) { result in
switch result {
case let .failure(error):
guard case let .server(serverError) = error else {
return XCTFail("Should not be a decoding error")
}
XCTAssertTrue(serverError is SampleError)
case .success:
XCTFail("Should not succeed")
}
completionWasInvoked = true
}
let completion = try XCTUnwrap(factory.capturedRequests.first?.capturedCompletionHandler)
completion(nil, nil, SampleError())
XCTAssert(completionWasInvoked)
}
func testHandlingRequestInvalidResultWithImageContent() throws {
var completionWasInvoked = false
try requester.request(content: CustomUpdateContentObjects.imageContentValid) { result in
switch result {
case let .failure(error):
guard case .decoding = error else {
return XCTFail(
"Expected a decoding error, instead received: \(error)"
)
}
case .success:
XCTFail("Should not succeed")
}
completionWasInvoked = true
}
let completion = try XCTUnwrap(factory.capturedRequests.first?.capturedCompletionHandler)
completion(nil, SampleCustomUpdateGraphAPIResults.invalid, nil)
XCTAssert(completionWasInvoked)
}
func testHandlingRequestSuccessFalseWithImageContent() throws {
var completionWasInvoked = false
var didSucceed = false
try requester.request(content: CustomUpdateContentObjects.imageContentValid) { result in
switch result {
case let .failure(error):
return XCTFail(
"Expecting the request to succeed instead receieved: \(error)"
)
case let .success(succeed):
didSucceed = succeed
}
completionWasInvoked = true
}
let completion = try XCTUnwrap(factory.capturedRequests.first?.capturedCompletionHandler)
completion(nil, SampleCustomUpdateGraphAPIResults.successFalse, nil)
XCTAssert(completionWasInvoked)
XCTAssertFalse(didSucceed)
}
func testHandlingRequestValidResultWithImageContent() throws {
var completionWasInvoked = false
var didSucceed = false
try requester.request(content: CustomUpdateContentObjects.imageContentValid) { result in
switch result {
case let .failure(error):
return XCTFail(
"Expecting the request to succeed instead receieved: \(error)"
)
case let .success(succeed):
didSucceed = succeed
}
completionWasInvoked = true
}
let completion = try XCTUnwrap(factory.capturedRequests.first?.capturedCompletionHandler)
completion(nil, SampleCustomUpdateGraphAPIResults.successTrue, nil)
XCTAssert(completionWasInvoked)
XCTAssertTrue(didSucceed)
}
enum SampleCustomUpdateGraphAPIResults {
static let successTrue = ["success": 1]
static let successFalse = ["success": 0]
static let invalid = ["not_success": "value"]
}
}