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

96 lines
2.8 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.
*/
import TestTools
import XCTest
enum SampleUnparsedAppLinkURLs {
enum AppLinkKeys {
static let data = "al_applink_data"
static let extras = "extras"
static let payload = "payload"
static let gameRequestId = "game_request_id"
static let contextTokenID = "context_token_id"
}
enum Values {
static let payload = "payload"
static let gameRequestID = "123"
static let contextTokenID = "123"
}
static func create(
payload potentialPayload: String? = Values.payload,
gameRequestID potentialGameRequestID: String? = Values.gameRequestID,
contextTokenID potentialContextTokenID: String? = Values.contextTokenID
) throws -> URL {
let payload = createAppLinkExtras(
payload: potentialPayload,
gameRequestID: potentialGameRequestID,
contextTokenID: potentialContextTokenID
)
let url = try XCTUnwrap(createUrl(payload: payload))
return url
}
static func validGameRequestUrl() throws -> URL {
let payload = createAppLinkExtras(contextTokenID: nil)
let url = try XCTUnwrap(createUrl(payload: payload))
return url
}
static func validGamingContextUrl() throws -> URL {
let payload = createAppLinkExtras(gameRequestID: nil)
let url = try XCTUnwrap(createUrl(payload: payload))
return url
}
static func missingKeys() throws -> URL {
let payload = createAppLinkExtras(
payload: nil,
gameRequestID: nil
)
let url = try XCTUnwrap(createUrl(payload: payload))
return url
}
// MARK: - Helpers
static func createUrl(payload: [String: Any]) throws -> URL {
let data = try JSONSerialization.data(withJSONObject: payload, options: [])
let json = try XCTUnwrap(String(data: data, encoding: .utf8))
var components = try XCTUnwrap(URLComponents(url: SampleURLs.valid, resolvingAgainstBaseURL: false))
components.queryItems = [
URLQueryItem(name: AppLinkKeys.data, value: json),
]
return try XCTUnwrap(components.url)
}
static func createAppLinkExtras(
payload potentialPayload: String? = Values.payload,
gameRequestID potentialGameRequestID: String? = Values.gameRequestID,
contextTokenID potentialContextTokenID: String? = Values.contextTokenID
) -> [String: Any] {
var extras = [String: Any]()
if let payload = potentialPayload {
extras[AppLinkKeys.payload] = payload
}
if let gameRequestID = potentialGameRequestID {
extras[AppLinkKeys.gameRequestId] = gameRequestID
}
if let contextTokenID = potentialContextTokenID {
extras[AppLinkKeys.contextTokenID] = contextTokenID
}
return [AppLinkKeys.extras: extras]
}
}