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

141 lines
4.3 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 GamingRequestPayloadObserverTests: XCTestCase {
let gameRequestDelegate = GameRequestPayloadObserverDelegate()
lazy var gameRequestObserver = GamingPayloadObserver(delegate: gameRequestDelegate)
var capturedPayload: GamingPayload?
func testCreatingObserver() {
XCTAssertTrue(
gameRequestObserver.delegate === gameRequestDelegate,
"Should store the delegate it was created with"
)
XCTAssertTrue(
ApplicationDelegate.shared.applicationObservers.contains(gameRequestObserver),
"Should observe the shared application delegate upon creation"
)
}
func testOpeningInvalidURL() throws {
let url = try XCTUnwrap(URL(string: "file://foo"))
XCTAssertFalse(
gameRequestObserver.application(
UIApplication.shared,
open: url,
sourceApplication: nil,
annotation: nil
),
"Should not successfully open an invalid url"
)
XCTAssertFalse(
gameRequestDelegate.wasGameRequestDelegateCalled,
"Should not invoke the delegate method parsedGameRequestURLContaining for an invalid url"
)
}
func testOpeningURLWithMissingKeys() throws {
let url = try SampleUnparsedAppLinkURLs.missingKeys()
XCTAssertFalse(
gameRequestObserver.application(
UIApplication.shared,
open: url,
sourceApplication: nil,
annotation: nil
),
"Should not successfully open a url with missing extras"
)
XCTAssertFalse(
gameRequestDelegate.wasGameRequestDelegateCalled,
"Should not invoke the delegate method parsedGameRequestURLContaining for an invalid url"
)
}
func testOpeningURLWithMissingGameRequestID() throws {
let url = try SampleUnparsedAppLinkURLs.create(gameRequestID: nil)
XCTAssertFalse(
gameRequestObserver.application(
UIApplication.shared,
open: url,
sourceApplication: nil,
annotation: nil
),
"Should not successfully open a url with a missing game request ID"
)
XCTAssertFalse(
gameRequestDelegate.wasGameRequestDelegateCalled,
"Should not invoke the delegate method parsedGameRequestURLContaining for an invalid url"
)
}
func testOpeningURLWithMissingPayload() throws {
let url = try SampleUnparsedAppLinkURLs.create(payload: nil)
XCTAssertFalse(
gameRequestObserver.application(
UIApplication.shared,
open: url,
sourceApplication: nil,
annotation: nil
),
"Should not successfully open a url with a missing payload"
)
XCTAssertFalse(
gameRequestDelegate.wasGameRequestDelegateCalled,
"Should not invoke the delegate method parsedGameRequestURLContaining for an invalid url"
)
}
func testOpeningWithValidGameRequestURL() throws {
let url = try SampleUnparsedAppLinkURLs.validGameRequestUrl()
XCTAssertTrue(
gameRequestObserver.application(
UIApplication.shared,
open: url,
sourceApplication: nil,
annotation: nil
),
"Should successfully open a url with a valid payload"
)
XCTAssertTrue(
gameRequestDelegate.wasGameRequestDelegateCalled,
"Should invoke the delegate method parsedGameRequestURLContaining for a url with a valid payload"
)
XCTAssertEqual(
gameRequestDelegate.capturedPayload?.payload,
SampleUnparsedAppLinkURLs.Values.payload,
"Should invoke the delegate with the expected payload"
)
XCTAssertEqual(
gameRequestDelegate.capturedGameRequestID,
SampleUnparsedAppLinkURLs.Values.gameRequestID,
"Should invoke the delegate with the expected game request ID"
)
}
}
final class GameRequestPayloadObserverDelegate: NSObject, GamingPayloadDelegate {
var wasGameRequestDelegateCalled = false
var capturedGameRequestID: String?
var capturedPayload: GamingPayload?
func parsedGameRequestURLContaining(_ payload: GamingPayload, gameRequestID: String) {
wasGameRequestDelegateCalled = true
capturedGameRequestID = gameRequestID
capturedPayload = payload
}
}