diff --git a/FirebaseAppCheck.podspec b/FirebaseAppCheck.podspec index 0e7e5a11816..650380aab24 100644 --- a/FirebaseAppCheck.podspec +++ b/FirebaseAppCheck.podspec @@ -62,14 +62,13 @@ Pod::Spec.new do |s| } unit_tests.source_files = [ base_dir + 'Tests/Unit/**/*.[mh]', - base_dir + 'Tests/Utils/**/*.[mh]', 'SharedTestUtilities/AppCheckFake/*', 'SharedTestUtilities/AppCheckBackoffWrapperFake/*', 'SharedTestUtilities/Date/*', 'SharedTestUtilities/URLSession/*', ] - unit_tests.resources = base_dir + 'Tests/Fixture/**/*' + unit_tests.resources = base_dir + 'Tests/Unit/Fixture/**/*' unit_tests.dependency 'OCMock' unit_tests.requires_app_host = true end diff --git a/FirebaseAppCheck/Tests/Integration/AppCheckE2ETests.swift b/FirebaseAppCheck/Tests/Integration/AppCheckE2ETests.swift index 216d5dfc666..18b9d3dddc4 100644 --- a/FirebaseAppCheck/Tests/Integration/AppCheckE2ETests.swift +++ b/FirebaseAppCheck/Tests/Integration/AppCheckE2ETests.swift @@ -16,113 +16,107 @@ import FirebaseAppCheck import FirebaseCore import XCTest -// Tests that use the Keychain require a host app and Swift Package Manager does not support adding -// a host app to test targets. -#if !SWIFT_PACKAGE - - final class AppCheckE2ETests: XCTestCase { - let appName = "test_app_name" - var app: FirebaseApp! - - override func setUp() { - AppCheck.setAppCheckProviderFactory(TestAppCheckProviderFactory()) - let options = FirebaseOptions( - googleAppID: "1:123456789:ios:abc123", - gcmSenderID: "123456789" - ) - options.projectID = "test_project_id" - options.apiKey = "test_api_key" - FirebaseApp.configure(name: appName, options: options) - - app = FirebaseApp.app(name: appName) - } +final class AppCheckE2ETests: XCTestCase { + let appName = "test_app_name" + var app: FirebaseApp! + + override func setUp() { + AppCheck.setAppCheckProviderFactory(TestAppCheckProviderFactory()) + let options = FirebaseOptions( + googleAppID: "1:123456789:ios:abc123", + gcmSenderID: "123456789" + ) + options.projectID = "test_project_id" + options.apiKey = "test_api_key" + FirebaseApp.configure(name: appName, options: options) + + app = FirebaseApp.app(name: appName) + } - override func tearDown() { - let semaphore = DispatchSemaphore(value: 0) - app.delete { _ in - semaphore.signal() - } - semaphore.wait() + override func tearDown() { + let semaphore = DispatchSemaphore(value: 0) + app.delete { _ in + semaphore.signal() } + semaphore.wait() + } - func testInitAppCheck() throws { - let appCheck = AppCheck.appCheck(app: app) + func testInitAppCheck() throws { + let appCheck = AppCheck.appCheck(app: app) - XCTAssertNotNil(appCheck) - } + XCTAssertNotNil(appCheck) + } - func testInitAppCheckDebugProvider() throws { - let debugProvider = AppCheckDebugProvider(app: app) + func testInitAppCheckDebugProvider() throws { + let debugProvider = AppCheckDebugProvider(app: app) - XCTAssertNotNil(debugProvider) - } + XCTAssertNotNil(debugProvider) + } - func testInitAppCheckDebugProviderFactory() throws { - let debugProvider = AppCheckDebugProviderFactory().createProvider(with: app) + func testInitAppCheckDebugProviderFactory() throws { + let debugProvider = AppCheckDebugProviderFactory().createProvider(with: app) - XCTAssertNotNil(debugProvider) - } + XCTAssertNotNil(debugProvider) + } - @available(iOS 11.0, macOS 10.15, macCatalyst 13.0, tvOS 11.0, watchOS 9.0, *) - func testInitDeviceCheckProvider() throws { - let deviceCheckProvider = DeviceCheckProvider(app: app) + @available(iOS 11.0, macOS 10.15, macCatalyst 13.0, tvOS 11.0, watchOS 9.0, *) + func testInitDeviceCheckProvider() throws { + let deviceCheckProvider = DeviceCheckProvider(app: app) - XCTAssertNotNil(deviceCheckProvider) - } + XCTAssertNotNil(deviceCheckProvider) + } - @available(iOS 11.0, macOS 10.15, macCatalyst 13.0, tvOS 11.0, watchOS 9.0, *) - func testDeviceCheckProviderFactoryCreate() throws { - let deviceCheckProvider = DeviceCheckProviderFactory().createProvider(with: app) + @available(iOS 11.0, macOS 10.15, macCatalyst 13.0, tvOS 11.0, watchOS 9.0, *) + func testDeviceCheckProviderFactoryCreate() throws { + let deviceCheckProvider = DeviceCheckProviderFactory().createProvider(with: app) - XCTAssertNotNil(deviceCheckProvider) - } + XCTAssertNotNil(deviceCheckProvider) + } - @available(iOS 14.0, macOS 11.3, macCatalyst 14.5, tvOS 15.0, watchOS 9.0, *) - func testInitAppAttestProvider() throws { - let appAttestProvider = AppAttestProvider(app: app) + @available(iOS 14.0, macOS 11.3, macCatalyst 14.5, tvOS 15.0, watchOS 9.0, *) + func testInitAppAttestProvider() throws { + let appAttestProvider = AppAttestProvider(app: app) - XCTAssertNotNil(appAttestProvider) - } + XCTAssertNotNil(appAttestProvider) + } - // The following test is disabled on macOS since `token(forcingRefresh:handler:)` requires a - // provisioning profile to access the keychain to cache tokens. - // See go/firebase-macos-keychain-popups for more details. - #if !os(macOS) && !targetEnvironment(macCatalyst) - func testGetToken() throws { - guard let appCheck = AppCheck.appCheck(app: app) else { - XCTFail("AppCheck instance is nil.") - return - } - - let expectation = XCTestExpectation() - appCheck.token(forcingRefresh: true) { token, error in - XCTAssertNil(error) - XCTAssertNotNil(token) - XCTAssertEqual(token?.token, TestAppCheckProvider.tokenValue) - expectation.fulfill() - } - - wait(for: [expectation], timeout: 0.5) + // The following test is disabled on macOS since `token(forcingRefresh:handler:)` requires a + // provisioning profile to access the keychain to cache tokens. + // See go/firebase-macos-keychain-popups for more details. + #if !os(macOS) && !targetEnvironment(macCatalyst) + func testGetToken() throws { + guard let appCheck = AppCheck.appCheck(app: app) else { + XCTFail("AppCheck instance is nil.") + return } - #endif // !os(macOS) && !targetEnvironment(macCatalyst) - } - class TestAppCheckProvider: NSObject, AppCheckProvider { - static let tokenValue = "TestToken" + let expectation = XCTestExpectation() + appCheck.token(forcingRefresh: true) { token, error in + XCTAssertNil(error) + XCTAssertNotNil(token) + XCTAssertEqual(token?.token, TestAppCheckProvider.tokenValue) + expectation.fulfill() + } - func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) { - let token = AppCheckToken( - token: TestAppCheckProvider.tokenValue, - expirationDate: Date.distantFuture - ) - handler(token, nil) + wait(for: [expectation], timeout: 0.5) } + #endif // !os(macOS) && !targetEnvironment(macCatalyst) +} + +class TestAppCheckProvider: NSObject, AppCheckProvider { + static let tokenValue = "TestToken" + + func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) { + let token = AppCheckToken( + token: TestAppCheckProvider.tokenValue, + expirationDate: Date.distantFuture + ) + handler(token, nil) } +} - class TestAppCheckProviderFactory: NSObject, AppCheckProviderFactory { - func createProvider(with app: FirebaseApp) -> AppCheckProvider? { - return TestAppCheckProvider() - } +class TestAppCheckProviderFactory: NSObject, AppCheckProviderFactory { + func createProvider(with app: FirebaseApp) -> AppCheckProvider? { + return TestAppCheckProvider() } - -#endif // !SWIFT_PACKAGE +} diff --git a/FirebaseAppCheck/Tests/Fixture/AppAttestAttestationResponseSuccess.json b/FirebaseAppCheck/Tests/Unit/Fixture/AppAttestAttestationResponseSuccess.json similarity index 100% rename from FirebaseAppCheck/Tests/Fixture/AppAttestAttestationResponseSuccess.json rename to FirebaseAppCheck/Tests/Unit/Fixture/AppAttestAttestationResponseSuccess.json diff --git a/FirebaseAppCheck/Tests/Fixture/AppAttestResponseMissingChallenge.json b/FirebaseAppCheck/Tests/Unit/Fixture/AppAttestResponseMissingChallenge.json similarity index 100% rename from FirebaseAppCheck/Tests/Fixture/AppAttestResponseMissingChallenge.json rename to FirebaseAppCheck/Tests/Unit/Fixture/AppAttestResponseMissingChallenge.json diff --git a/FirebaseAppCheck/Tests/Fixture/AppAttestResponseSuccess.json b/FirebaseAppCheck/Tests/Unit/Fixture/AppAttestResponseSuccess.json similarity index 100% rename from FirebaseAppCheck/Tests/Fixture/AppAttestResponseSuccess.json rename to FirebaseAppCheck/Tests/Unit/Fixture/AppAttestResponseSuccess.json diff --git a/FirebaseAppCheck/Tests/Fixture/DeviceCheckResponseMissingTimeToLive.json b/FirebaseAppCheck/Tests/Unit/Fixture/DeviceCheckResponseMissingTimeToLive.json similarity index 100% rename from FirebaseAppCheck/Tests/Fixture/DeviceCheckResponseMissingTimeToLive.json rename to FirebaseAppCheck/Tests/Unit/Fixture/DeviceCheckResponseMissingTimeToLive.json diff --git a/FirebaseAppCheck/Tests/Fixture/DeviceCheckResponseMissingToken.json b/FirebaseAppCheck/Tests/Unit/Fixture/DeviceCheckResponseMissingToken.json similarity index 100% rename from FirebaseAppCheck/Tests/Fixture/DeviceCheckResponseMissingToken.json rename to FirebaseAppCheck/Tests/Unit/Fixture/DeviceCheckResponseMissingToken.json diff --git a/FirebaseAppCheck/Tests/Fixture/FACTokenExchangeResponseSuccess.json b/FirebaseAppCheck/Tests/Unit/Fixture/FACTokenExchangeResponseSuccess.json similarity index 100% rename from FirebaseAppCheck/Tests/Fixture/FACTokenExchangeResponseSuccess.json rename to FirebaseAppCheck/Tests/Unit/Fixture/FACTokenExchangeResponseSuccess.json diff --git a/Package.swift b/Package.swift index 999d06d39c6..b3534b20bdf 100644 --- a/Package.swift +++ b/Package.swift @@ -1256,17 +1256,17 @@ let package = Package( "SharedTestUtilities", .product(name: "OCMock", package: "ocmock"), ], - path: "FirebaseAppCheck/Tests", + path: "FirebaseAppCheck/Tests/Unit", exclude: [ // Swift tests are in the target `FirebaseAppCheckUnitSwift` since mixed language targets - // are not supported (as of Xcode 14.3). - "Unit/Swift", + // are not supported (as of Xcode 15.0). + "Swift", ], resources: [ .process("Fixture"), ], cSettings: [ - .headerSearchPath("../.."), + .headerSearchPath("../../.."), ] ), .testTarget(