// // Copyright RevenueCat Inc. All Rights Reserved. // // Licensed under the MIT License (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://opensource.org/licenses/MIT // // AsyncExtensionsTests.swift // // Created by Nacho Soto on 9/27/22. import Nimble import XCTest @testable import RevenueCat class AsyncExtensionsTests: TestCase { func testPublicErrorResultReturningSuccess() { var result: Result? let expected = Int.random(in: 0..<100) let completion: (Result) -> Void = { result = $0 } Async.call(with: completion) { return expected } expect(result).toEventually(beSuccess()) expect(result?.value) == expected } func testPublicErrorResultReturningError() { var result: Result? let error = ErrorUtils.configurationError() let expected = error.asPublicError let completion: (Result) -> Void = { result = $0 } Async.call(with: completion) { throw error } expect(result).toEventually(beFailure()) expect(result?.error).to(matchError(expected)) } func testPurchasesErrorResultReturningSuccess() { var result: Result? let expected = Int.random(in: 0..<100) let completion: (Result) -> Void = { result = $0 } Async.call(with: completion) { return expected } expect(result).toEventually(beSuccess()) expect(result?.value) == expected } func testPurchasesErrorResultReturningError() { var result: Result? let expected = ErrorUtils.configurationError() let completion: (Result) -> Void = { result = $0 } Async.call(with: completion) { throw expected } expect(result).toEventually(beFailure()) expect(result?.error).to(matchError(expected)) } func testCallWithNoError() { var result: Int? let expected = Int.random(in: 0..<100) let completion: (Int) -> Void = { result = $0 } Async.call(with: completion) { return expected } expect(result).toEventually(equal(expected)) } func testConversionToAsyncWithResultSuccess() async throws { let expected = Int.random(in: 0..<100) let result = try await Async.call { (completion: (Result) -> Void) in completion(.success(expected)) } expect(result) == expected } func testConversionToAsyncWithResultFailure() async throws { enum Error: Swift.Error { case error1 } do { let _: Int = try await Async.call { completion in completion(.failure(Error.error1)) } fail("Expected error") } catch { expect(error).to(matchError(Error.error1)) } } func testConversionToAsyncWithValue() async { let expected = Int.random(in: 0..<100) let result = await Async.call { (completion: (Int) -> Void) in completion(expected) } expect(result) == expected } func testExtractValuesFromEmptyAsyncSequence() async { let result = await MockAsyncSequence(with: []).extractValues() expect(result) == [] } func testExtractValuesFromAsyncSequenceWithOneElement() async { let elements = [1] let result = await MockAsyncSequence(with: elements).extractValues() expect(result) == elements } func testExtractValuesFromAsyncSequence() async { let elements = [1, 2, 3] let result = await MockAsyncSequence(with: elements).extractValues() expect(result) == elements } }