From 6190b51aa52bfd30b77de5c3c118e26ad560fc48 Mon Sep 17 00:00:00 2001 From: benjamin-es-hall Date: Fri, 4 Oct 2024 14:30:36 +0100 Subject: [PATCH] tests: Updates tests for async start+updateContext --- .../MockPoller.swift | 2 ++ .../UnleashProxyClientSwiftTests.swift | 33 +++++++++++++++++++ .../testUtils.swift | 22 +++++++++++++ 3 files changed, 57 insertions(+) diff --git a/Tests/UnleashProxyClientSwiftTests/MockPoller.swift b/Tests/UnleashProxyClientSwiftTests/MockPoller.swift index 92fd5a6..1ddf03b 100644 --- a/Tests/UnleashProxyClientSwiftTests/MockPoller.swift +++ b/Tests/UnleashProxyClientSwiftTests/MockPoller.swift @@ -49,6 +49,7 @@ public class MockDictionaryStorageProvider: StorageProvider { class MockPoller: Poller { var dataGenerator: () -> [String: Toggle]; + var stubCompletionError: PollerError? init(callback: @escaping () -> [String: Toggle], unleashUrl: URL, apiKey: String, session: PollerSession) { self.dataGenerator = callback @@ -57,5 +58,6 @@ class MockPoller: Poller { override func getFeatures(context: Context, completionHandler: ((PollerError?) -> Void)? = nil) -> Void { self.storageProvider = MockDictionaryStorageProvider(storage: dataGenerator()) + completionHandler?(stubCompletionError) } } diff --git a/Tests/UnleashProxyClientSwiftTests/UnleashProxyClientSwiftTests.swift b/Tests/UnleashProxyClientSwiftTests/UnleashProxyClientSwiftTests.swift index a56a34d..6799eaf 100644 --- a/Tests/UnleashProxyClientSwiftTests/UnleashProxyClientSwiftTests.swift +++ b/Tests/UnleashProxyClientSwiftTests/UnleashProxyClientSwiftTests.swift @@ -46,6 +46,21 @@ XCTAssert(unleash.poller.timer != nil) } + @MainActor + func testTimerWithAsyncStart() async throws { + func dataGenerator() -> [String: UnleashProxyClientSwift.Toggle] { + return generateTestToggleMapWithVariant() + } + + let mockedPoller = MockPollerSession() + let unleash = try await setup( + dataGenerator: dataGenerator, + session: mockedPoller + ) + + XCTAssert(unleash.poller.timer != nil) + } + func testUpdateContext() { func dataGenerator() -> [String: UnleashProxyClientSwift.Toggle] { return generateTestToggleMapWithVariant() @@ -62,6 +77,24 @@ XCTAssert(url.contains("appName=test") && url.contains("sessionId=uuid-234-test") && url.contains("userId=uuid-123-test") && url.contains("environment=dev")) } + + @MainActor + func testUpdateContextAsync() async throws { + func dataGenerator() -> [String: UnleashProxyClientSwift.Toggle] { + return generateTestToggleMapWithVariant() + } + + let unleash = try await setup(dataGenerator: dataGenerator) + + var context: [String: String] = [:] + context["userId"] = "uuid-123-test" + context["sessionId"] = "uuid-234-test" + try await unleash.updateContext(context: context) + + let url = unleash.poller.formatURL(context: unleash.context)!.absoluteString + + XCTAssert(url.contains("appName=test") && url.contains("sessionId=uuid-234-test") && url.contains("userId=uuid-123-test") && url.contains("environment=dev")) + } } final class unleash_proxy_client_base_swiftTests: XCTestCase { diff --git a/Tests/UnleashProxyClientSwiftTests/testUtils.swift b/Tests/UnleashProxyClientSwiftTests/testUtils.swift index beb4dd0..5b82aa4 100644 --- a/Tests/UnleashProxyClientSwiftTests/testUtils.swift +++ b/Tests/UnleashProxyClientSwiftTests/testUtils.swift @@ -42,6 +42,17 @@ func setup(dataGenerator: @escaping () -> [String: Toggle], session: PollerSessi return unleash } +@available(iOS 13, *) +func setup(dataGenerator: @escaping () -> [String: Toggle], session: PollerSession = MockPollerSession()) async throws -> UnleashClient { + let poller = MockPoller(callback: dataGenerator, unleashUrl: URL(string: "https://app.unleash-hosted.com/hosted/api/proxy")!, apiKey: "SECRET", session: session) + let metrics = MockMetrics(appName: "test") + + let unleash = UnleashProxyClientSwift.UnleashClient(unleashUrl: "https://app.unleash-hosted.com/hosted/api/proxy", clientKey: "dss22d", refreshInterval: 15, appName: "test", environment: "dev", poller: poller, metrics: metrics) + + try await unleash.start() + return unleash +} + func setupBase(dataGenerator: @escaping () -> [String: Toggle], session: PollerSession = MockPollerSession()) -> UnleashClientBase { let poller = MockPoller(callback: dataGenerator, unleashUrl: URL(string: "https://app.unleash-hosted.com/hosted/api/proxy")!, apiKey: "SECRET", session: session) let metrics = MockMetrics(appName: "test") @@ -51,3 +62,14 @@ func setupBase(dataGenerator: @escaping () -> [String: Toggle], session: PollerS unleash.start() return unleash } + +@available(iOS 13, *) +func setupBase(dataGenerator: @escaping () -> [String: Toggle], session: PollerSession = MockPollerSession()) async throws -> UnleashClientBase { + let poller = MockPoller(callback: dataGenerator, unleashUrl: URL(string: "https://app.unleash-hosted.com/hosted/api/proxy")!, apiKey: "SECRET", session: session) + let metrics = MockMetrics(appName: "test") + + let unleash = UnleashProxyClientSwift.UnleashClientBase(unleashUrl: "https://app.unleash-hosted.com/hosted/api/proxy", clientKey: "dss22d", refreshInterval: 15, appName: "test", environment: "dev", poller: poller, metrics: metrics) + + try await unleash.start() + return unleash +}