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

113 lines
2.9 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 TestTools
import XCTest
final class GamingWebDialogTests: XCTestCase {
struct Success: GamingWebDialogSuccess {
let payload: String?
init(_ dict: [String: Any]) {
payload = dict["payload"] as? String
}
}
let payloadKey = "payload"
let errorCodeKey = "error_code"
let errorMessageKey = "error_message"
// swiftlint:disable:next implicitly_unwrapped_optional
var gamingWebDialog: GamingWebDialog<Success>!
// swiftlint:disable:next implicitly_unwrapped_optional
var webDialog: _WebDialog!
var webDelegate: WebDialogDelegate { gamingWebDialog as WebDialogDelegate }
var dialogCompleted = false
var dialogFailed = false
var error: Error?
var payload: String?
override func setUp() {
super.setUp()
error = nil
payload = nil
dialogCompleted = false
dialogFailed = false
gamingWebDialog = GamingWebDialog(name: "test")
webDialog = _WebDialog(name: "Test")
webDialog.delegate = webDelegate
gamingWebDialog.dialog = webDialog
gamingWebDialog.completion = { result in
switch result {
case let .success(success):
self.dialogCompleted = true
self.payload = success.payload
case let .failure(error):
self.dialogFailed = true
self.error = error
}
}
}
func testDialogSucceedsWithPayload() throws {
let testPayload = "test payload"
gamingWebDialog.webDialog(webDialog, didCompleteWithResults: [payloadKey: testPayload])
XCTAssertTrue(dialogCompleted)
XCTAssertFalse(dialogFailed)
XCTAssertNil(error)
XCTAssertEqual(payload, testPayload)
}
func testDialogFailsWithError() throws {
let testErrorCode = 418
let testErrorMessage = "I'm a teapot"
gamingWebDialog.webDialog(
webDialog,
didCompleteWithResults: [errorCodeKey: testErrorCode, errorMessageKey: testErrorMessage]
)
let error = try XCTUnwrap(error) as NSError
XCTAssertFalse(dialogCompleted)
XCTAssertTrue(dialogFailed)
XCTAssertNotNil(error)
XCTAssertEqual(error.code, testErrorCode)
XCTAssertEqual(error.userInfo.values.first as? String, testErrorMessage)
}
func testDialogFailsWithUnknownError() throws {
gamingWebDialog.webDialog(
_WebDialog(name: "wrong dialog"),
didCompleteWithResults: [:]
)
gamingWebDialog.show { _ in }
let error = try XCTUnwrap(error) as NSError
XCTAssertFalse(dialogCompleted)
XCTAssertTrue(dialogFailed)
XCTAssertNotNil(error)
}
func testDialogSucceedsEmptyWhenCanceled() throws {
gamingWebDialog.webDialogDidCancel(webDialog)
XCTAssertTrue(dialogCompleted)
XCTAssertFalse(dialogFailed)
XCTAssertNil(payload)
XCTAssertNil(error)
}
}