96 lines
2.8 KiB
Swift
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]
|
|
}
|
|
}
|