Skip to content

Commit 9b08d8f

Browse files
authored
Merge pull request #181 from klaviyo/as/chnl-9098-opened-event-when-not-inited
Allowing opened push event to be transmitted when SDK is not initialized
2 parents 4940d18 + 4e1dc18 commit 9b08d8f

File tree

2 files changed

+33
-8
lines changed

2 files changed

+33
-8
lines changed

Sources/KlaviyoSwift/StateManagement.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,11 @@ enum KlaviyoAction: Equatable {
9292

9393
var requiresInitialization: Bool {
9494
switch self {
95-
case .setEmail, .setPhoneNumber, .setExternalId, .setPushToken, .enqueueEvent, .enqueueProfile, .setProfileProperty, .resetProfile, .resetStateAndDequeue:
95+
// if event metric is opened push we DON'T require initilization in all other event metric cases we DO.
96+
case let .enqueueEvent(event) where event.metric.name == .OpenedPush:
97+
return false
98+
99+
case .setEmail, .setPhoneNumber, .setExternalId, .setPushToken, .enqueueProfile, .setProfileProperty, .resetProfile, .resetStateAndDequeue, .enqueueEvent:
96100
return true
97101

98102
case .initialize, .completeInitialization, .deQueueCompletedResults, .networkConnectivityChanged, .flushQueue, .sendRequest, .stop, .start, .cancelInFlightRequests, .requestFailed:

Tests/KlaviyoSwiftTests/StateManagementEdgeCaseTests.swift

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class StateManagementEdgeCaseTests: XCTestCase {
116116
// MARK: - Set Email
117117

118118
@MainActor
119-
func testSetEmailUninitialized() async throws {
119+
func testSetEmailUninitializedDoesNotAddToPendingRequest() async throws {
120120
let expection = XCTestExpectation(description: "fatal error expected")
121121
environment.emitDeveloperWarning = { _ in
122122
// Would really fatalError - not happening because we can't do that in tests so we fake it.
@@ -168,7 +168,7 @@ class StateManagementEdgeCaseTests: XCTestCase {
168168
// MARK: - Set External Id
169169

170170
@MainActor
171-
func testSetExternalIdUninitialized() async throws {
171+
func testSetExternalIdUninitializedDoesNotAddToPendingRequest() async throws {
172172
let apiKey = "fake-key"
173173
let initialState = KlaviyoState(apiKey: apiKey,
174174
anonymousId: environment.analytics.uuid().uuidString,
@@ -213,7 +213,7 @@ class StateManagementEdgeCaseTests: XCTestCase {
213213
// MARK: - Set Phone number
214214

215215
@MainActor
216-
func testSetPhoneNumberUninitialized() async throws {
216+
func testSetPhoneNumberUninitializedDoesNotAddToPendingRequest() async throws {
217217
let apiKey = "fake-key"
218218
let initialState = KlaviyoState(apiKey: apiKey,
219219
anonymousId: environment.analytics.uuid().uuidString,
@@ -257,7 +257,7 @@ class StateManagementEdgeCaseTests: XCTestCase {
257257
// MARK: - Set Push Token
258258

259259
@MainActor
260-
func testSetPushTokenUninitialized() async throws {
260+
func testSetPushTokenUninitializedDoesNotAddToPendingRequest() async throws {
261261
let apiKey = "fake-key"
262262
let initialState = KlaviyoState(apiKey: apiKey,
263263
anonymousId: environment.analytics.uuid().uuidString,
@@ -369,15 +369,30 @@ class StateManagementEdgeCaseTests: XCTestCase {
369369
// MARK: - set enqueue event uninitialized
370370

371371
@MainActor
372-
func testEnqueueEventUninitialized() async throws {
372+
func testOpenedPushEventUninitializedAddsToPendingRequests() async throws {
373+
let store = TestStore(initialState: .init(queue: []), reducer: KlaviyoReducer())
374+
let event = Event(name: .OpenedPush)
375+
_ = await store.send(.enqueueEvent(event)) {
376+
$0.pendingRequests = [.event(event)]
377+
}
378+
}
379+
380+
@MainActor
381+
func testEnqueueNonOpenedPushEventUninitializedDoesNotAddToPendingRequest() async throws {
373382
let expection = XCTestExpectation(description: "fatal error expected")
374383
environment.emitDeveloperWarning = { _ in
375384
// Would really runTimeWarn - not happening because we can't do that in tests so we fake it.
376385
expection.fulfill()
377386
}
378387
let store = TestStore(initialState: .init(queue: []), reducer: KlaviyoReducer())
379-
let event = Event(name: .OpenedPush)
380-
_ = await store.send(.enqueueEvent(event))
388+
389+
let nonOpenedPushEvents = Event.EventName.allCases.filter { $0 != .OpenedPush }
390+
391+
for event in nonOpenedPushEvents {
392+
let event = Event(name: event)
393+
_ = await store.send(.enqueueEvent(event))
394+
}
395+
381396
await fulfillment(of: [expection])
382397
}
383398

@@ -423,3 +438,9 @@ class StateManagementEdgeCaseTests: XCTestCase {
423438
}
424439
}
425440
}
441+
442+
extension Event.EventName: CaseIterable {
443+
public static var allCases: [KlaviyoSwift.Event.EventName] {
444+
[.OpenedPush, .OpenedAppMetric, .ViewedProductMetric, .AddedToCartMetric, .StartedCheckoutMetric, .CustomEvent("someEvent")]
445+
}
446+
}

0 commit comments

Comments
 (0)