DailyView/Carthage/Checkouts/facebook-ios-sdk/FBSDKGamingServicesKit/FBSDKGamingServicesKitTests/GamingContextPayloadObserverTests.swift
2025-12-30 16:40:31 +08:00

150 lines
4.5 KiB
Swift

/*
* 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 FBSDKCoreKit
@testable import FBSDKGamingServicesKit
import XCTest
final class GamingContextPayloadObserverTests: XCTestCase {
// swiftlint:disable implicitly_unwrapped_optional
var gamingContextDelegate: GamingContextPayloadObserverDelegate!
var gamingContextObserver: GamingPayloadObserver!
// swiftlint:enable implicitly_unwrapped_optional
override func setUp() {
super.setUp()
gamingContextDelegate = GamingContextPayloadObserverDelegate()
gamingContextObserver = GamingPayloadObserver(delegate: gamingContextDelegate)
}
override func tearDown() {
gamingContextDelegate = nil
gamingContextObserver = nil
super.tearDown()
}
// MARK: - GamingContextObserver
func testCreatingGamingContextObserver() {
XCTAssertTrue(
gamingContextObserver.delegate === gamingContextDelegate,
"Should store the delegate it was created with"
)
XCTAssertTrue(
ApplicationDelegate.shared.applicationObservers.contains(gamingContextObserver),
"Should observe the shared application delegate upon creation"
)
}
func testGamingContextObserverOpeningInvalid() throws {
let url = try XCTUnwrap(URL(string: "file://foo"))
XCTAssertFalse(
gamingContextObserver.application(
UIApplication.shared,
open: url,
sourceApplication: nil,
annotation: nil
),
"Should not successfully open an invalid url"
)
XCTAssertFalse(
gamingContextDelegate.wasGamingContextDelegateCalled,
"Should not invoke the delegate method parsedGamingContextURLContaining for an invalid url"
)
}
func testGamingContextObserverOpeningURLWithMissingKeys() throws {
let url = try SampleUnparsedAppLinkURLs.missingKeys()
XCTAssertFalse(
gamingContextObserver.application(
UIApplication.shared,
open: url,
sourceApplication: nil,
annotation: nil
),
"Should not successfully open a url with missing extras"
)
XCTAssertFalse(
gamingContextDelegate.wasGamingContextDelegateCalled,
"Should not invoke the delegate method parsedGamingContextURLContaining for an invalid url"
)
}
func testOpeningURLWithMissingGameContextTokenID() throws {
let url = try SampleUnparsedAppLinkURLs.create(contextTokenID: nil)
XCTAssertFalse(
gamingContextObserver.application(
UIApplication.shared,
open: url,
sourceApplication: nil,
annotation: nil
),
"Should not successfully open a url with a missing game request ID"
)
XCTAssertFalse(
gamingContextDelegate.wasGamingContextDelegateCalled,
"Should not invoke the delegate method parsedGamingContextURLContaining for an invalid url"
)
}
func testGamingContextObserverOpeningURLWithMissingPayload() throws {
let url = try SampleUnparsedAppLinkURLs.create(payload: nil)
XCTAssertFalse(
gamingContextObserver.application(
UIApplication.shared,
open: url,
sourceApplication: nil,
annotation: nil
),
"Should not successfully open a url with a missing payload"
)
XCTAssertFalse(
gamingContextDelegate.wasGamingContextDelegateCalled,
"Should not invoke the delegate method parsedGamingContextURLContaining for an invalid url"
)
}
func testOpeningWithValidGamingContextURL() throws {
let url = try SampleUnparsedAppLinkURLs.validGamingContextUrl()
XCTAssertTrue(
gamingContextObserver.application(
UIApplication.shared,
open: url,
sourceApplication: nil,
annotation: nil
),
"Should successfully open a url with a valid payload"
)
XCTAssertTrue(
gamingContextDelegate.wasGamingContextDelegateCalled,
"Should invoke the delegate method parsedGamingContextURLContaining for a url with a valid payload"
)
XCTAssertEqual(
gamingContextDelegate.capturedPayload?.payload,
SampleUnparsedAppLinkURLs.Values.payload,
"Should invoke the delegate with the expected payload"
)
}
}
final class GamingContextPayloadObserverDelegate: NSObject, GamingPayloadDelegate {
var wasGamingContextDelegateCalled = false
var capturedPayload: GamingPayload?
func parsedGamingContextURLContaining(_ payload: GamingPayload) {
wasGamingContextDelegateCalled = true
capturedPayload = payload
}
}