diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d8eb68e5..613e3e142 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ The changelog for `SuperwallKit`. Also see the [releases](https://github.com/superwall/Superwall-iOS/releases) on GitHub. +## 3.7.1 + +### Enhancements + +- Adds a `custom_placement` event that you can attach to any element in the paywall with a dictionary of parameters. When the element is tapped, the event will be tracked. The name of the placement can be used to trigger a paywall and its params used in audience filters. +- Tracks a `config_attributes` event after calling `Superwall.configure`, which contains info about the configuration of the SDK. This gets tracked whenever you set the delegate. +- Adds in device attributes tracking after setting the interface style override. +- Adds `close_reason` to `PaywallInfo` properties. + ## 3.7.0 ### Enhancements diff --git a/Sources/SuperwallKit/Analytics/Internal Tracking/Trackable Events/Trackable.swift b/Sources/SuperwallKit/Analytics/Internal Tracking/Trackable Events/Trackable.swift index 8e73651ab..78e90a31f 100644 --- a/Sources/SuperwallKit/Analytics/Internal Tracking/Trackable Events/Trackable.swift +++ b/Sources/SuperwallKit/Analytics/Internal Tracking/Trackable Events/Trackable.swift @@ -13,8 +13,8 @@ protocol Trackable { /// /// For a `TrackableSuperwallEvent`, this is the raw value of an ``SuperwallEvent`` assigned to it. var rawName: String { get } - /// Any non-superwall parameters that you want to track. Do not include $ signs in parameter names as they will be dropped. - var customParameters: [String: Any] { get } + /// Parameters that can be used in audience filters. Do not include $ signs in parameter names as they will be dropped. + var audienceFilterParams: [String: Any] { get } /// Determines whether the event has the potential to trigger a paywall. Defaults to true. var canImplicitlyTriggerPaywall: Bool { get } diff --git a/Sources/SuperwallKit/Analytics/Internal Tracking/Trackable Events/TrackableSuperwallEvent.swift b/Sources/SuperwallKit/Analytics/Internal Tracking/Trackable Events/TrackableSuperwallEvent.swift index 364b0965a..86a452ee9 100644 --- a/Sources/SuperwallKit/Analytics/Internal Tracking/Trackable Events/TrackableSuperwallEvent.swift +++ b/Sources/SuperwallKit/Analytics/Internal Tracking/Trackable Events/TrackableSuperwallEvent.swift @@ -28,7 +28,7 @@ extension TrackableSuperwallEvent { enum InternalSuperwallEvent { struct AppOpen: TrackableSuperwallEvent { let superwallEvent: SuperwallEvent = .appOpen - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { [:] } } @@ -36,7 +36,7 @@ enum InternalSuperwallEvent { let superwallEvent: SuperwallEvent = .appInstall let appInstalledAtString: String let hasExternalPurchaseController: Bool - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { return [ "application_installed_at": appInstalledAtString, @@ -47,13 +47,13 @@ enum InternalSuperwallEvent { struct TouchesBegan: TrackableSuperwallEvent { let superwallEvent: SuperwallEvent = .touchesBegan - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { [:] } } struct SurveyClose: TrackableSuperwallEvent { let superwallEvent: SuperwallEvent = .surveyClose - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { [:] } } @@ -66,8 +66,8 @@ enum InternalSuperwallEvent { paywallInfo: paywallInfo ) } - var customParameters: [String: Any] { - let output = paywallInfo.customParams() + var audienceFilterParams: [String: Any] { + let output = paywallInfo.audienceFilterParams() return output + [ "survey_selected_option_title": selectedOption.title, "survey_custom_response": customResponse as Any @@ -91,26 +91,26 @@ enum InternalSuperwallEvent { struct AppLaunch: TrackableSuperwallEvent { let superwallEvent: SuperwallEvent = .appLaunch - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { [:] } } struct Attributes: TrackableSuperwallEvent { let appInstalledAtString: String var superwallEvent: SuperwallEvent { - return .userAttributes(customParameters) + return .userAttributes(audienceFilterParams) } func getSuperwallParameters() async -> [String: Any] { return [ "application_installed_at": appInstalledAtString ] } - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] } struct IdentityAlias: TrackableSuperwallEvent { let superwallEvent: SuperwallEvent = .identityAlias - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { [:] } } @@ -132,7 +132,7 @@ enum InternalSuperwallEvent { ] } - var customParameters: [String: Any] { + var audienceFilterParams: [String: Any] { guard let urlComponents = URLComponents( url: url, resolvingAgainstBaseURL: false @@ -172,41 +172,58 @@ enum InternalSuperwallEvent { struct FirstSeen: TrackableSuperwallEvent { let superwallEvent: SuperwallEvent = .firstSeen - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { [:] } } struct Reset: TrackableSuperwallEvent { let superwallEvent: SuperwallEvent = .reset - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { [:] } } struct AppClose: TrackableSuperwallEvent { let superwallEvent: SuperwallEvent = .appClose - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { [:] } } struct SessionStart: TrackableSuperwallEvent { let superwallEvent: SuperwallEvent = .sessionStart - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { [:] } } struct ConfigRefresh: TrackableSuperwallEvent { let superwallEvent: SuperwallEvent = .configRefresh - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { [:] } } + struct ConfigAttributes: TrackableSuperwallEvent { + let superwallEvent: SuperwallEvent = .configAttributes + let options: SuperwallOptions + let hasExternalPurchaseController: Bool + let hasDelegate: Bool + + var audienceFilterParams: [String: Any] = [:] + func getSuperwallParameters() async -> [String: Any] { + var params = options.toDictionary() + params += [ + "using_purchase_controller": hasExternalPurchaseController, + "has_delegate": hasDelegate + ] + return params + } + } + struct DeviceAttributes: TrackableSuperwallEvent { var superwallEvent: SuperwallEvent { return .deviceAttributes(attributes: deviceAttributes) } let deviceAttributes: [String: Any] - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { return deviceAttributes } @@ -237,10 +254,10 @@ enum InternalSuperwallEvent { } } let eventData: EventData? - var customParameters: [String: Any] { + var audienceFilterParams: [String: Any] { switch state { case .complete(paywallInfo: let paywallInfo): - return paywallInfo.customParams() + return paywallInfo.audienceFilterParams() default: return [:] } @@ -266,7 +283,7 @@ enum InternalSuperwallEvent { struct SubscriptionStatusDidChange: TrackableSuperwallEvent { let superwallEvent: SuperwallEvent = .subscriptionStatusDidChange let subscriptionStatus: SubscriptionStatus - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { return [ "subscription_status": subscriptionStatus.description @@ -283,7 +300,7 @@ enum InternalSuperwallEvent { ) } let triggerName: String - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { var params: [String: Any] = [ @@ -340,7 +357,7 @@ enum InternalSuperwallEvent { reason: statusReason ) } - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] func getSuperwallParameters() async -> [String: Any] { var params = [ "source_event_name": eventData?.name ?? "", @@ -378,8 +395,8 @@ enum InternalSuperwallEvent { func getSuperwallParameters() async -> [String: Any] { return await paywallInfo.eventParams() } - var customParameters: [String: Any] { - return paywallInfo.customParams() + var audienceFilterParams: [String: Any] { + return paywallInfo.audienceFilterParams() } } @@ -403,8 +420,8 @@ enum InternalSuperwallEvent { params += eventParams return params } - var customParameters: [String: Any] { - return paywallInfo.customParams() + var audienceFilterParams: [String: Any] { + return paywallInfo.audienceFilterParams() } } @@ -416,8 +433,38 @@ enum InternalSuperwallEvent { func getSuperwallParameters() async -> [String: Any] { return await paywallInfo.eventParams() } - var customParameters: [String: Any] { - return paywallInfo.customParams() + var audienceFilterParams: [String: Any] { + return paywallInfo.audienceFilterParams() + } + } + + struct CustomPlacement: TrackableSuperwallEvent { + var superwallEvent: SuperwallEvent { + return .customPlacement( + name: name, + params: params, + paywallInfo: paywallInfo + ) + } + var rawName: String { + return name + } + let paywallInfo: PaywallInfo + let name: String + let params: [String: Any] + + func getSuperwallParameters() async -> [String: Any] { + var eventParams = await paywallInfo.eventParams() + eventParams += params + eventParams += [ + "name": name + ] + return eventParams + } + var audienceFilterParams: [String: Any] { + var customParams = paywallInfo.audienceFilterParams() + customParams += params + return customParams } } @@ -440,8 +487,8 @@ enum InternalSuperwallEvent { return .restoreComplete } } - var customParameters: [String: Any] { - return paywallInfo.customParams() + var audienceFilterParams: [String: Any] { + return paywallInfo.audienceFilterParams() } func getSuperwallParameters() async -> [String: Any] { var eventParams = await paywallInfo.eventParams() @@ -498,14 +545,15 @@ enum InternalSuperwallEvent { let paywallInfo: PaywallInfo let product: StoreProduct? let model: StoreTransaction? - var customParameters: [String: Any] { + + var audienceFilterParams: [String: Any] { switch state { case .abandon(let product): - var params = paywallInfo.customParams() + var params = paywallInfo.audienceFilterParams() params["abandoned_product_id"] = product.productIdentifier return params default: - return paywallInfo.customParams() + return paywallInfo.audienceFilterParams() } } @@ -546,8 +594,8 @@ enum InternalSuperwallEvent { } let paywallInfo: PaywallInfo let product: StoreProduct - var customParameters: [String: Any] { - return paywallInfo.customParams() + var audienceFilterParams: [String: Any] { + return paywallInfo.audienceFilterParams() } func getSuperwallParameters() async -> [String: Any] { @@ -564,8 +612,8 @@ enum InternalSuperwallEvent { } let paywallInfo: PaywallInfo let product: StoreProduct - var customParameters: [String: Any] { - return paywallInfo.customParams() + var audienceFilterParams: [String: Any] { + return paywallInfo.audienceFilterParams() } func getSuperwallParameters() async -> [String: Any] { @@ -582,8 +630,8 @@ enum InternalSuperwallEvent { } let paywallInfo: PaywallInfo let product: StoreProduct - var customParameters: [String: Any] { - return paywallInfo.customParams() + var audienceFilterParams: [String: Any] { + return paywallInfo.audienceFilterParams() } func getSuperwallParameters() async -> [String: Any] { @@ -627,8 +675,8 @@ enum InternalSuperwallEvent { } return eventParams } - var customParameters: [String: Any] { - return paywallInfo.customParams() + var audienceFilterParams: [String: Any] { + return paywallInfo.audienceFilterParams() } } @@ -640,8 +688,8 @@ enum InternalSuperwallEvent { case retry(Int) } let state: State - var customParameters: [String: Any] { - return paywallInfo.customParams() + var audienceFilterParams: [String: Any] { + return paywallInfo.audienceFilterParams() } var superwallEvent: SuperwallEvent { diff --git a/Sources/SuperwallKit/Analytics/Internal Tracking/Trackable Events/UserInitiatedEvents.swift b/Sources/SuperwallKit/Analytics/Internal Tracking/Trackable Events/UserInitiatedEvents.swift index 0603e43eb..39de559e3 100644 --- a/Sources/SuperwallKit/Analytics/Internal Tracking/Trackable Events/UserInitiatedEvents.swift +++ b/Sources/SuperwallKit/Analytics/Internal Tracking/Trackable Events/UserInitiatedEvents.swift @@ -15,7 +15,7 @@ enum UserInitiatedEvent { struct Track: TrackableUserInitiatedEvent { let rawName: String let canImplicitlyTriggerPaywall: Bool - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] var isFeatureGatable: Bool func getSuperwallParameters() async -> [String: Any] { @@ -46,6 +46,6 @@ enum UserInitiatedEvent { let state: State let pushNotificationId: String? let canImplicitlyTriggerPaywall = true - var customParameters: [String: Any] = [:] + var audienceFilterParams: [String: Any] = [:] }*/ } diff --git a/Sources/SuperwallKit/Analytics/Internal Tracking/Tracking.swift b/Sources/SuperwallKit/Analytics/Internal Tracking/Tracking.swift index 2efaa89b5..25ef44ddb 100644 --- a/Sources/SuperwallKit/Analytics/Internal Tracking/Tracking.swift +++ b/Sources/SuperwallKit/Analytics/Internal Tracking/Tracking.swift @@ -13,7 +13,7 @@ extension Superwall { /// /// - Parameters: /// - trackableEvent: The event you want to track. - /// - customParameters: Any extra non-Superwall parameters that you want to track. + /// - audienceFilterParams: Any extra non-Superwall parameters that you want to track. @discardableResult func track(_ event: Trackable) async -> TrackingResult { // Get parameters to be sent to the delegate and stored in an event. @@ -36,13 +36,13 @@ extension Superwall { logLevel: .debug, scope: .events, message: "Logged Event", - info: parameters.eventParams + info: parameters.audienceFilterParams ) } let eventData = EventData( name: event.rawName, - parameters: JSON(parameters.eventParams), + parameters: JSON(parameters.audienceFilterParams), createdAt: eventCreatedAt ) diff --git a/Sources/SuperwallKit/Analytics/Internal Tracking/TrackingLogic.swift b/Sources/SuperwallKit/Analytics/Internal Tracking/TrackingLogic.swift index 2d77e7cdb..ae86bfe59 100644 --- a/Sources/SuperwallKit/Analytics/Internal Tracking/TrackingLogic.swift +++ b/Sources/SuperwallKit/Analytics/Internal Tracking/TrackingLogic.swift @@ -23,7 +23,7 @@ enum TrackingLogic { var superwallParameters = await trackableEvent.getSuperwallParameters() superwallParameters["app_session_id"] = appSessionId - let customParameters = trackableEvent.customParameters + let uncleanEventAudienceFilterParams = trackableEvent.audienceFilterParams let eventName = trackableEvent.rawName var delegateParams: [String: Any] = [ @@ -33,7 +33,7 @@ enum TrackingLogic { // Add a special property if it's a superwall event let isStandardEvent = trackableEvent is TrackableSuperwallEvent - var eventParams: [String: Any] = [ + var audienceFilterParams: [String: Any] = [ "$is_standard_event": isStandardEvent, "$event_name": eventName, "event_name": eventName @@ -46,15 +46,15 @@ enum TrackingLogic { } let keyWithDollar = "$\(key)" - eventParams[keyWithDollar] = value + audienceFilterParams[keyWithDollar] = value // no $ for delegate methods delegateParams[key] = value } // Filter then assign custom parameters - for key in customParameters.keys { - guard let value = clean(input: customParameters[key]) else { + for key in uncleanEventAudienceFilterParams.keys { + guard let value = clean(input: uncleanEventAudienceFilterParams[key]) else { Logger.debug( logLevel: .debug, scope: .events, @@ -73,13 +73,13 @@ enum TrackingLogic { ) } else { delegateParams[key] = value - eventParams[key] = value + audienceFilterParams[key] = value } } return TrackingParameters( delegateParams: delegateParams, - eventParams: eventParams + audienceFilterParams: audienceFilterParams ) } @@ -198,7 +198,8 @@ enum TrackingLogic { let notAllowedReferringEventNames: Set = [ SuperwallEventObjc.transactionAbandon.description, SuperwallEventObjc.transactionFail.description, - SuperwallEventObjc.paywallDecline.description + SuperwallEventObjc.paywallDecline.description, + SuperwallEventObjc.customPlacement.description ] if let referringEventName = paywallViewController?.info.presentedByEventWithName, @@ -221,6 +222,11 @@ enum TrackingLogic { return .closePaywallThenTriggerPaywall } + if let event = event as? TrackableSuperwallEvent, + case .customPlacement = event.superwallEvent { + return .closePaywallThenTriggerPaywall + } + if let event = event as? TrackableSuperwallEvent, case .surveyResponse = event.superwallEvent { return .closePaywallThenTriggerPaywall diff --git a/Sources/SuperwallKit/Analytics/Internal Tracking/TrackingParameters.swift b/Sources/SuperwallKit/Analytics/Internal Tracking/TrackingParameters.swift index 304a9a96c..591fec4c0 100644 --- a/Sources/SuperwallKit/Analytics/Internal Tracking/TrackingParameters.swift +++ b/Sources/SuperwallKit/Analytics/Internal Tracking/TrackingParameters.swift @@ -9,14 +9,14 @@ import Foundation struct TrackingParameters { let delegateParams: [String: Any] - let eventParams: [String: Any] + let audienceFilterParams: [String: Any] } extension TrackingParameters: Stubbable { static func stub() -> TrackingParameters { return TrackingParameters( delegateParams: [:], - eventParams: [:] + audienceFilterParams: [:] ) } } diff --git a/Sources/SuperwallKit/Analytics/Superwall Event/SuperwallEvent.swift b/Sources/SuperwallKit/Analytics/Superwall Event/SuperwallEvent.swift index 9df073266..99cc0dc0a 100644 --- a/Sources/SuperwallKit/Analytics/Superwall Event/SuperwallEvent.swift +++ b/Sources/SuperwallKit/Analytics/Superwall Event/SuperwallEvent.swift @@ -173,6 +173,12 @@ public enum SuperwallEvent { /// When the Superwall configuration is refreshed. case configRefresh + /// When the user taps on an element in the paywall that has a `custom_placement` action attached to it. + case customPlacement(name: String, params: [String: Any], paywallInfo: PaywallInfo) + + /// When the attributes that affect the configuration of Superwall are set or change. + case configAttributes + var canImplicitlyTriggerPaywall: Bool { switch self { case .appInstall, @@ -183,7 +189,8 @@ public enum SuperwallEvent { .paywallDecline, .transactionAbandon, .surveyResponse, - .touchesBegan: + .touchesBegan, + .customPlacement: return true default: return false @@ -305,6 +312,10 @@ extension SuperwallEvent { return .init(objcEvent: .restoreComplete) case .configRefresh: return .init(objcEvent: .configRefresh) + case .customPlacement: + return .init(objcEvent: .customPlacement) + case .configAttributes: + return .init(objcEvent: .configAttributes) } } } diff --git a/Sources/SuperwallKit/Analytics/Superwall Event/SuperwallEventObjc.swift b/Sources/SuperwallKit/Analytics/Superwall Event/SuperwallEventObjc.swift index c3de49edd..be3d5eecb 100644 --- a/Sources/SuperwallKit/Analytics/Superwall Event/SuperwallEventObjc.swift +++ b/Sources/SuperwallKit/Analytics/Superwall Event/SuperwallEventObjc.swift @@ -160,6 +160,12 @@ public enum SuperwallEventObjc: Int, CaseIterable { /// When the Superwall configuration refreshes. case configRefresh + /// When a custom placement on the paywall is tapped. + case customPlacement + + /// When the attributes that affect the configuration of Superwall are set or change. + case configAttributes + public init(event: SuperwallEvent) { self = event.backingData.objcEvent } @@ -258,6 +264,10 @@ public enum SuperwallEventObjc: Int, CaseIterable { return "restore_complete" case .configRefresh: return "config_refresh" + case .customPlacement: + return "custom_placement" + case .configAttributes: + return "config_attributes" } } } diff --git a/Sources/SuperwallKit/Config/Options/PaywallOptions.swift b/Sources/SuperwallKit/Config/Options/PaywallOptions.swift index 40c9b69ec..41f93b2ea 100644 --- a/Sources/SuperwallKit/Config/Options/PaywallOptions.swift +++ b/Sources/SuperwallKit/Config/Options/PaywallOptions.swift @@ -10,7 +10,7 @@ import Foundation /// Options for configuring the appearance and behavior of paywalls. @objc(SWKPaywallOptions) @objcMembers -public final class PaywallOptions: NSObject { +public final class PaywallOptions: NSObject, Encodable { /// Determines whether the paywall should use haptic feedback. Defaults to true. /// /// Haptic feedback occurs when a user purchases or restores a product, opens a URL @@ -21,7 +21,7 @@ public final class PaywallOptions: NSObject { @objc(SWKRestoreFailed) @objcMembers - public final class RestoreFailed: NSObject { + public final class RestoreFailed: NSObject, Encodable { /// The title of the alert presented to the user when restoring a transaction fails. Defaults to /// `No Subscription Found`. public var title = "No Subscription Found" @@ -33,6 +33,19 @@ public final class PaywallOptions: NSObject { /// Defines the title of the close button in the alert presented to the user when restoring a /// transaction fails. Defaults to `Okay`. public var closeButtonTitle = "Okay" + + private enum CodingKeys: CodingKey { + case restoreTitle + case restoreMessage + case restoreCloseButtonTitle + } + + public func encode(to encoder: any Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(title, forKey: .restoreTitle) + try container.encode(message, forKey: .restoreMessage) + try container.encode(closeButtonTitle, forKey: .restoreCloseButtonTitle) + } } /// Defines the messaging of the alert presented to the user when restoring a transaction fails. public var restoreFailed = RestoreFailed() @@ -58,12 +71,30 @@ public final class PaywallOptions: NSObject { /// Defines the different types of views that can appear behind Apple's payment sheet during a transaction. @objc(SWKTransactionBackgroundView) - public enum TransactionBackgroundView: Int, Sendable { + public enum TransactionBackgroundView: Int, Encodable, CustomStringConvertible, Sendable { /// This shows your paywall background color overlayed with an activity indicator. case spinner /// Removes the background view during a transaction. case none + + public var description: String { + switch self { + case .spinner: + return "spinner" + case .none: + return "none" + } + } + + private enum CodingKeys: CodingKey { + case transactionBackgroundView + } + + public func encode(to encoder: any Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(description, forKey: .transactionBackgroundView) + } } /// The view that appears behind Apple's payment sheet during a transaction. Defaults to `.spinner`. /// @@ -71,4 +102,22 @@ public final class PaywallOptions: NSObject { /// /// **Note:** This feature is still in development and could change. public var transactionBackgroundView: TransactionBackgroundView = .spinner + + private enum CodingKeys: String, CodingKey { + case isHapticFeedbackEnabled + case shouldShowPurchaseFailureAlert + case shouldPreload + case automaticallyDismiss + case transactionBackgroundView + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try transactionBackgroundView.encode(to: encoder) + try restoreFailed.encode(to: encoder) + try container.encode(isHapticFeedbackEnabled, forKey: .isHapticFeedbackEnabled) + try container.encode(shouldShowPurchaseFailureAlert, forKey: .shouldShowPurchaseFailureAlert) + try container.encode(shouldPreload, forKey: .shouldPreload) + try container.encode(automaticallyDismiss, forKey: .automaticallyDismiss) + } } diff --git a/Sources/SuperwallKit/Config/Options/SuperwallOptions.swift b/Sources/SuperwallKit/Config/Options/SuperwallOptions.swift index 8b1f9c68f..de04279a3 100644 --- a/Sources/SuperwallKit/Config/Options/SuperwallOptions.swift +++ b/Sources/SuperwallKit/Config/Options/SuperwallOptions.swift @@ -13,14 +13,14 @@ import Foundation /// ``Superwall/configure(apiKey:purchaseController:options:completion:)-52tke``. @objc(SWKSuperwallOptions) @objcMembers -public final class SuperwallOptions: NSObject { +public final class SuperwallOptions: NSObject, Encodable { /// Configures the appearance and behaviour of paywalls. public var paywalls = PaywallOptions() /// **WARNING**: The different network environments that the SDK should use. /// Only use this enum to set ``SuperwallOptions/networkEnvironment-swift.property`` /// if told so explicitly by the Superwall team. - public enum NetworkEnvironment { + public enum NetworkEnvironment: Encodable, CustomStringConvertible { /// Default: Uses the standard latest environment. case release /// **WARNING**: Uses a release candidate environment. This is not meant for a production environment. @@ -30,6 +30,19 @@ public final class SuperwallOptions: NSObject { /// **WARNING**: Uses a custom environment. This is not meant for a production environment. case custom(String) + public var description: String { + switch self { + case .release: + return "release" + case .developer: + return "developer" + case .custom: + return "custom" + case .releaseCandidate: + return "releaseCandidate" + } + } + var scheme: String { switch self { case .custom(let domain): @@ -93,6 +106,22 @@ public final class SuperwallOptions: NSObject { var geoHost: String { "geo-api.superwall.com" } + + private enum CodingKeys: String, CodingKey { + case networkEnvironment + case customDomain + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + switch self { + case .custom(let domain): + try container.encode(domain, forKey: .customDomain) + default: + break + } + try container.encode(description, forKey: .networkEnvironment) + } } /// **WARNING:**: Determines which network environment your SDK should use. @@ -125,13 +154,54 @@ public final class SuperwallOptions: NSObject { /// Configuration for printing to the console. @objc(SWKLogging) @objcMembers - public final class Logging: NSObject { + public final class Logging: NSObject, Encodable { /// Defines the minimum log level to print to the console. Defaults to `warn`. public var level: LogLevel = .info /// Defines the scope of logs to print to the console. Defaults to .all. public var scopes: Set = [.all] + + private enum CodingKeys: String, CodingKey { + case logLevel + case logScopes + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(level, forKey: .logLevel) + try container.encode(scopes, forKey: .logScopes) + } } /// The log scope and level to print to the console. public var logging = Logging() + + private enum CodingKeys: String, CodingKey { + case isExternalDataCollectionEnabled + case localeIdentifier + case isGameControllerEnabled + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + // Manually encode PaywallOptions properties + try paywalls.encode(to: encoder) + try networkEnvironment.encode(to: encoder) + try logging.encode(to: encoder) + + try container.encode(isExternalDataCollectionEnabled, forKey: .isExternalDataCollectionEnabled) + try container.encode(localeIdentifier, forKey: .localeIdentifier) + try container.encode(isGameControllerEnabled, forKey: .isGameControllerEnabled) + } + + func toDictionary() -> [String: Any] { + guard let data = try? JSONEncoder().encode(self) else { + return [:] + } + let jsonObject = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) + if let dictionary = jsonObject.flatMap({ $0 as? [String: Any] }) { + return dictionary + } else { + return [:] + } + } } diff --git a/Sources/SuperwallKit/Dependencies/DependencyContainer.swift b/Sources/SuperwallKit/Dependencies/DependencyContainer.swift index acc19fcdf..f57edbf91 100644 --- a/Sources/SuperwallKit/Dependencies/DependencyContainer.swift +++ b/Sources/SuperwallKit/Dependencies/DependencyContainer.swift @@ -479,12 +479,12 @@ extension DependencyContainer: UserAttributesEventFactory { func makeUserAttributesEvent() -> InternalSuperwallEvent.Attributes { return InternalSuperwallEvent.Attributes( appInstalledAtString: deviceHelper.appInstalledAtString, - customParameters: identityManager.userAttributes + audienceFilterParams: identityManager.userAttributes ) } } -// MARK: - Receipt factory +// MARK: - Receipt Factory extension DependencyContainer: ReceiptFactory { func loadPurchasedProducts() async -> Set? { return await receiptManager.loadPurchasedProducts() @@ -498,3 +498,17 @@ extension DependencyContainer: ReceiptFactory { return await receiptManager.isFreeTrialAvailable(for: product) } } + +// MARK: - Config Attributes Factory +extension DependencyContainer: ConfigAttributesFactory { + func makeConfigAttributes() -> InternalSuperwallEvent.ConfigAttributes { + let hasSwiftDelegate = delegateAdapter.swiftDelegate != nil + let hasObjcDelegate = delegateAdapter.objcDelegate != nil + + return InternalSuperwallEvent.ConfigAttributes( + options: configManager.options, + hasExternalPurchaseController: purchaseController.isInternal == false, + hasDelegate: hasSwiftDelegate || hasObjcDelegate + ) + } +} diff --git a/Sources/SuperwallKit/Dependencies/FactoryProtocols.swift b/Sources/SuperwallKit/Dependencies/FactoryProtocols.swift index 964f3505c..31ec7b1ff 100644 --- a/Sources/SuperwallKit/Dependencies/FactoryProtocols.swift +++ b/Sources/SuperwallKit/Dependencies/FactoryProtocols.swift @@ -153,3 +153,7 @@ protocol ReceiptFactory { func refreshReceipt() async func isFreeTrialAvailable(for product: StoreProduct) async -> Bool } + +protocol ConfigAttributesFactory { + func makeConfigAttributes() -> InternalSuperwallEvent.ConfigAttributes +} diff --git a/Sources/SuperwallKit/Identity/IdentityManager.swift b/Sources/SuperwallKit/Identity/IdentityManager.swift index cf9cf5876..908aa14fb 100644 --- a/Sources/SuperwallKit/Identity/IdentityManager.swift +++ b/Sources/SuperwallKit/Identity/IdentityManager.swift @@ -338,7 +338,7 @@ extension IdentityManager { Task { let trackableEvent = InternalSuperwallEvent.Attributes( appInstalledAtString: deviceHelper.appInstalledAtString, - customParameters: mergedAttributes + audienceFilterParams: mergedAttributes ) await Superwall.shared.track(trackableEvent) } diff --git a/Sources/SuperwallKit/Logger/LogLevel.swift b/Sources/SuperwallKit/Logger/LogLevel.swift index d3d92bdb4..6b08aaa95 100644 --- a/Sources/SuperwallKit/Logger/LogLevel.swift +++ b/Sources/SuperwallKit/Logger/LogLevel.swift @@ -9,7 +9,7 @@ import Foundation /// Specifies the detail of the logs returned from the SDK to the console. @objc(SWKLogLevel) -public enum LogLevel: Int, CustomStringConvertible, Sendable { +public enum LogLevel: Int, CustomStringConvertible, Encodable, Sendable { /// Prints all logs from the SDK to the console. Useful for debugging your app if something isn't working as expected. case debug = 10 diff --git a/Sources/SuperwallKit/Logger/LogScope.swift b/Sources/SuperwallKit/Logger/LogScope.swift index 6ba1035eb..8bf03f3c0 100644 --- a/Sources/SuperwallKit/Logger/LogScope.swift +++ b/Sources/SuperwallKit/Logger/LogScope.swift @@ -9,7 +9,7 @@ import Foundation /// The possible scope of logs to print to the console. @objc(SWKLogScope) -public enum LogScope: Int, Sendable, CustomStringConvertible { +public enum LogScope: Int, Encodable, Sendable, CustomStringConvertible { case localizationManager case bounceButton case coreData diff --git a/Sources/SuperwallKit/Misc/Constants.swift b/Sources/SuperwallKit/Misc/Constants.swift index 13931ce45..913dd0431 100644 --- a/Sources/SuperwallKit/Misc/Constants.swift +++ b/Sources/SuperwallKit/Misc/Constants.swift @@ -18,5 +18,5 @@ let sdkVersion = """ */ let sdkVersion = """ -3.7.0 +3.7.1 """ diff --git a/Sources/SuperwallKit/Network/Device Helper/DeviceHelper.swift b/Sources/SuperwallKit/Network/Device Helper/DeviceHelper.swift index 74c0d1e86..c8025ce1d 100644 --- a/Sources/SuperwallKit/Network/Device Helper/DeviceHelper.swift +++ b/Sources/SuperwallKit/Network/Device Helper/DeviceHelper.swift @@ -166,6 +166,8 @@ class DeviceHelper { var platformWrapper: String? + var platformWrapperVersion: String? + var isLowPowerModeEnabled: String { return ProcessInfo.processInfo.isLowPowerModeEnabled ? "true" : "false" } @@ -512,7 +514,9 @@ class DeviceHelper { ipContinent: geoInfo?.continent, ipTimezone: geoInfo?.timezone, capabilities: capabilitiesConfig.namesCommaSeparated(), - capabilitiesConfig: capabilitiesConfig.toJson() + capabilitiesConfig: capabilitiesConfig.toJson(), + platformWrapper: platformWrapper, + platformWrapperVersion: platformWrapperVersion ) return template.toDictionary() diff --git a/Sources/SuperwallKit/Paywall/Presentation/Get Paywall/PublicGetPaywall.swift b/Sources/SuperwallKit/Paywall/Presentation/Get Paywall/PublicGetPaywall.swift index 9a2cdba7b..fc0ba788e 100644 --- a/Sources/SuperwallKit/Paywall/Presentation/Get Paywall/PublicGetPaywall.swift +++ b/Sources/SuperwallKit/Paywall/Presentation/Get Paywall/PublicGetPaywall.swift @@ -161,7 +161,7 @@ extension Superwall { let trackableEvent = UserInitiatedEvent.Track( rawName: event, canImplicitlyTriggerPaywall: false, - customParameters: params ?? [:], + audienceFilterParams: params ?? [:], isFeatureGatable: false ) let trackResult = await track(trackableEvent) diff --git a/Sources/SuperwallKit/Paywall/Presentation/Get Presentation Result/PublicGetPresentationResult.swift b/Sources/SuperwallKit/Paywall/Presentation/Get Presentation Result/PublicGetPresentationResult.swift index 03d3986fe..892ae3515 100644 --- a/Sources/SuperwallKit/Paywall/Presentation/Get Presentation Result/PublicGetPresentationResult.swift +++ b/Sources/SuperwallKit/Paywall/Presentation/Get Presentation Result/PublicGetPresentationResult.swift @@ -30,7 +30,7 @@ extension Superwall { let event = UserInitiatedEvent.Track( rawName: event, canImplicitlyTriggerPaywall: false, - customParameters: params ?? [:], + audienceFilterParams: params ?? [:], isFeatureGatable: false ) @@ -82,7 +82,7 @@ extension Superwall { let eventData = EventData( name: event.rawName, - parameters: JSON(parameters.eventParams), + parameters: JSON(parameters.audienceFilterParams), createdAt: eventCreatedAt ) diff --git a/Sources/SuperwallKit/Paywall/Presentation/PaywallCloseReason.swift b/Sources/SuperwallKit/Paywall/Presentation/PaywallCloseReason.swift index 0a82ac626..7e9a0c7d1 100644 --- a/Sources/SuperwallKit/Paywall/Presentation/PaywallCloseReason.swift +++ b/Sources/SuperwallKit/Paywall/Presentation/PaywallCloseReason.swift @@ -10,7 +10,7 @@ import Foundation /// An enum whose cases indicate whether the paywall was closed by user /// interaction or because another paywall will show. @objc(SWKPaywallCloseReason) -public enum PaywallCloseReason: Int, Codable, Equatable, Sendable { +public enum PaywallCloseReason: Int, Codable, Equatable, Sendable, CustomStringConvertible { /// The paywall was closed by system logic, either after a purchase or because /// a deeplink was presented. case systemLogic @@ -33,6 +33,21 @@ public enum PaywallCloseReason: Int, Codable, Equatable, Sendable { /// The paywall hasn't been closed yet. case none + public var description: String { + switch self { + case .systemLogic: + return "systemLogic" + case .forNextPaywall: + return "forNextPaywall" + case .webViewFailedToLoad: + return "webViewFailedToLoad" + case .manualClose: + return "manualClsoe" + case .none: + return "none" + } + } + /// Indicates whether the paywall state publisher should receive a completion. var stateShouldComplete: Bool { switch self { diff --git a/Sources/SuperwallKit/Paywall/Presentation/PaywallInfo.swift b/Sources/SuperwallKit/Paywall/Presentation/PaywallInfo.swift index 69bb2bd2d..12904b68d 100644 --- a/Sources/SuperwallKit/Paywall/Presentation/PaywallInfo.swift +++ b/Sources/SuperwallKit/Paywall/Presentation/PaywallInfo.swift @@ -232,7 +232,7 @@ public final class PaywallInfo: NSObject { forProduct product: StoreProduct? = nil, otherParams: [String: Any]? = nil ) async -> [String: Any] { - var output = customParams() + var output = audienceFilterParams() output += [ "paywalljs_version": paywalljsVersion as Any, @@ -256,7 +256,8 @@ public final class PaywallInfo: NSObject { "experiment_id": experiment?.id as Any, "variant_id": experiment?.variant.id as Any, "cache_key": cacheKey, - "build_id": buildId + "build_id": buildId, + "close_reason": closeReason.description ] var loadingVars: [String: Any] = [:] @@ -294,8 +295,8 @@ public final class PaywallInfo: NSObject { return output } - /// Parameters that can be used in rules. - func customParams() -> [String: Any] { + /// Parameters that can be used in audience filters. + func audienceFilterParams() -> [String: Any] { var output: [String: Any] = [ "paywall_id": databaseId, "paywall_name": name, @@ -330,7 +331,6 @@ public final class PaywallInfo: NSObject { // MARK: - Stubbable extension PaywallInfo: Stubbable { static func stub() -> PaywallInfo { - let dependencyContainer = DependencyContainer() return PaywallInfo( databaseId: "abc", identifier: "1", diff --git a/Sources/SuperwallKit/Paywall/Presentation/PublicPresentation.swift b/Sources/SuperwallKit/Paywall/Presentation/PublicPresentation.swift index 4bb37e4a8..49f162632 100644 --- a/Sources/SuperwallKit/Paywall/Presentation/PublicPresentation.swift +++ b/Sources/SuperwallKit/Paywall/Presentation/PublicPresentation.swift @@ -269,7 +269,7 @@ extension Superwall { let trackableEvent = UserInitiatedEvent.Track( rawName: event, canImplicitlyTriggerPaywall: false, - customParameters: params ?? [:], + audienceFilterParams: params ?? [:], isFeatureGatable: isFeatureGatable ) let trackResult = await track(trackableEvent) diff --git a/Sources/SuperwallKit/Paywall/View Controller/Web View/Message Handling/PaywallMessage.swift b/Sources/SuperwallKit/Paywall/View Controller/Web View/Message Handling/PaywallMessage.swift index b46e552fc..da76d7da6 100644 --- a/Sources/SuperwallKit/Paywall/View Controller/Web View/Message Handling/PaywallMessage.swift +++ b/Sources/SuperwallKit/Paywall/View Controller/Web View/Message Handling/PaywallMessage.swift @@ -45,6 +45,7 @@ enum PaywallMessage: Decodable, Equatable { case openDeepLink(url: URL) case purchase(productId: String) case custom(data: String) + case customPlacement(name: String, params: JSON) // All cases below here are sent from device to paywall case paywallClose @@ -70,6 +71,7 @@ enum PaywallMessage: Decodable, Equatable { case openDeepLink = "open_deep_link" case purchase case custom + case customPlacement = "register_placement" } // Everyone write to eventName, other may use the remaining keys @@ -80,6 +82,8 @@ enum PaywallMessage: Decodable, Equatable { case link case data case version + case name + case params } enum PaywallMessageError: Error { @@ -128,6 +132,12 @@ enum PaywallMessage: Decodable, Equatable { self = .custom(data: dataString) return } + case .customPlacement: + if let name = try? values.decode(String.self, forKey: .name), + let params = try? values.decode(JSON.self, forKey: .params) { + self = .customPlacement(name: name, params: params) + return + } } } diff --git a/Sources/SuperwallKit/Paywall/View Controller/Web View/Message Handling/PaywallMessageHandler.swift b/Sources/SuperwallKit/Paywall/View Controller/Web View/Message Handling/PaywallMessageHandler.swift index b71046a7e..9414581c3 100644 --- a/Sources/SuperwallKit/Paywall/View Controller/Web View/Message Handling/PaywallMessageHandler.swift +++ b/Sources/SuperwallKit/Paywall/View Controller/Web View/Message Handling/PaywallMessageHandler.swift @@ -152,6 +152,8 @@ final class PaywallMessageHandler: WebEventDelegate { purchaseProduct(withId: id) case .custom(data: let customEvent): handleCustomEvent(customEvent) + case let .customPlacement(name: name, params: params): + handleCustomPlacement(name: name, params: params) } } @@ -353,6 +355,10 @@ final class PaywallMessageHandler: WebEventDelegate { delegate?.eventDidOccur(.custom(string: customEvent)) } + private func handleCustomPlacement(name: String, params: JSON) { + delegate?.eventDidOccur(.customPlacement(name: name, params: params)) + } + private func detectHiddenPaywallEvent( _ eventName: String, userInfo: [String: Any]? = nil diff --git a/Sources/SuperwallKit/Paywall/View Controller/Web View/Message Handling/PaywallWebEvent.swift b/Sources/SuperwallKit/Paywall/View Controller/Web View/Message Handling/PaywallWebEvent.swift index 9c2691c20..58b27ba8b 100644 --- a/Sources/SuperwallKit/Paywall/View Controller/Web View/Message Handling/PaywallWebEvent.swift +++ b/Sources/SuperwallKit/Paywall/View Controller/Web View/Message Handling/PaywallWebEvent.swift @@ -15,4 +15,5 @@ enum PaywallWebEvent: Equatable { case openedURL(url: URL) case openedUrlInSafari(_ url: URL) case openedDeepLink(url: URL) + case customPlacement(name: String, params: JSON) } diff --git a/Sources/SuperwallKit/Paywall/View Controller/Web View/Templating/Models/DeviceTemplate.swift b/Sources/SuperwallKit/Paywall/View Controller/Web View/Templating/Models/DeviceTemplate.swift index 41aab91ee..58a20c46b 100644 --- a/Sources/SuperwallKit/Paywall/View Controller/Web View/Templating/Models/DeviceTemplate.swift +++ b/Sources/SuperwallKit/Paywall/View Controller/Web View/Templating/Models/DeviceTemplate.swift @@ -59,6 +59,8 @@ struct DeviceTemplate: Codable { var ipTimezone: String? var capabilities: String var capabilitiesConfig: JSON + var platformWrapper: String? + var platformWrapperVersion: String? func toDictionary() -> [String: Any] { guard let data = try? JSONEncoder().encode(self) else { diff --git a/Sources/SuperwallKit/Superwall.swift b/Sources/SuperwallKit/Superwall.swift index 3707a660a..9c738d7b7 100644 --- a/Sources/SuperwallKit/Superwall.swift +++ b/Sources/SuperwallKit/Superwall.swift @@ -17,6 +17,11 @@ public final class Superwall: NSObject, ObservableObject { } set { dependencyContainer.delegateAdapter.swiftDelegate = newValue + + let configAttributes = dependencyContainer.makeConfigAttributes() + Task { + await track(configAttributes) + } } } @@ -33,6 +38,11 @@ public final class Superwall: NSObject, ObservableObject { } set { dependencyContainer.delegateAdapter.objcDelegate = newValue + + let configAttributes = dependencyContainer.makeConfigAttributes() + Task { + await track(configAttributes) + } } } @@ -43,6 +53,11 @@ public final class Superwall: NSObject, ObservableObject { } set { options.logging.level = newValue + + let configAttributes = dependencyContainer.makeConfigAttributes() + Task { + await track(configAttributes) + } } } @@ -60,6 +75,11 @@ public final class Superwall: NSObject, ObservableObject { } set { options.localeIdentifier = newValue + + let configAttributes = dependencyContainer.makeConfigAttributes() + Task { + await track(configAttributes) + } } } @@ -128,7 +148,7 @@ public final class Superwall: NSObject, ObservableObject { /// Alternatively, you can use the completion handler from /// ``configure(apiKey:purchaseController:options:completion:)-52tke``. @Published - public var isConfigured = false + public private(set) var isConfigured = false /// The configured shared instance of ``Superwall``. /// @@ -228,6 +248,14 @@ public final class Superwall: NSObject, ObservableObject { _ = await (fetchConfig, configureIdentity) + await track( + InternalSuperwallEvent.ConfigAttributes( + options: dependencyContainer.configManager.options, + hasExternalPurchaseController: purchaseController != nil, + hasDelegate: delegate != nil + ) + ) + await MainActor.run { completion?() } @@ -419,15 +447,31 @@ public final class Superwall: NSObject, ObservableObject { } } - /// For internal use only. Do not use this. - public func setPlatformWrapper(_ platformWrapper: String) { + /// **For internal use only. Do not use this.** + public func setPlatformWrapper( + _ platformWrapper: String, + version: String + ) { dependencyContainer.deviceHelper.platformWrapper = platformWrapper + dependencyContainer.deviceHelper.platformWrapperVersion = version + + Task { + let deviceAttributes = await dependencyContainer.makeSessionDeviceAttributes() + let event = InternalSuperwallEvent.DeviceAttributes(deviceAttributes: deviceAttributes) + await track(event) + } } /// Sets the user interface style, which overrides the system setting. Set to `nil` to revert /// back to using the system setting. public func setInterfaceStyle(to interfaceStyle: InterfaceStyle?) { dependencyContainer.deviceHelper.interfaceStyleOverride = interfaceStyle + Task { + let deviceAttributes = await dependencyContainer.makeSessionDeviceAttributes() + await Superwall.shared.track( + InternalSuperwallEvent.DeviceAttributes(deviceAttributes: deviceAttributes) + ) + } } // MARK: - Deep Links @@ -528,6 +572,16 @@ extension Superwall: PaywallViewControllerEventDelegate { dependencyContainer.delegateAdapter.paywallWillOpenDeepLink(url: url) case .custom(let string): dependencyContainer.delegateAdapter.handleCustomPaywallAction(withName: string) + case let .customPlacement(name: name, params: params): + Task { + let paramsDict = params.dictionaryValue + let trackedEvent = InternalSuperwallEvent.CustomPlacement( + paywallInfo: paywallViewController.info, + name: name, + params: paramsDict + ) + await Superwall.shared.track(trackedEvent) + } } } } diff --git a/SuperwallKit.podspec b/SuperwallKit.podspec index 3c435381d..afad336e4 100644 --- a/SuperwallKit.podspec +++ b/SuperwallKit.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "SuperwallKit" - s.version = "3.7.0" + s.version = "3.7.1" s.summary = "Superwall: In-App Paywalls Made Easy" s.description = "Paywall infrastructure for mobile apps :) we make things like editing your paywall and running price tests as easy as clicking a few buttons. superwall.com" diff --git a/Tests/SuperwallKitTests/Analytics/Internal Tracking/TrackTests.swift b/Tests/SuperwallKitTests/Analytics/Internal Tracking/TrackTests.swift index 9ba543b04..dd89554c6 100644 --- a/Tests/SuperwallKitTests/Analytics/Internal Tracking/TrackTests.swift +++ b/Tests/SuperwallKitTests/Analytics/Internal Tracking/TrackTests.swift @@ -17,43 +17,43 @@ final class TrackingTests: XCTestCase { canImplicitlyTriggerPaywall: false, isFeatureGatable: false )) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertFalse(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertFalse(result.parameters.eventParams["$is_feature_gatable"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, eventName) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertFalse(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertFalse(result.parameters.audienceFilterParams["$is_feature_gatable"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, eventName) } func test_appOpen() async { let result = await Superwall.shared.track(InternalSuperwallEvent.AppOpen()) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "app_open") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "app_open") } func test_appInstall() async { let appInstalledAtString = "now" let result = await Superwall.shared.track(InternalSuperwallEvent.AppInstall(appInstalledAtString: appInstalledAtString, hasExternalPurchaseController: true)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertTrue(result.parameters.eventParams["$using_purchase_controller"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "app_install") - XCTAssertEqual(result.parameters.eventParams["$application_installed_at"] as! String, appInstalledAtString) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertTrue(result.parameters.audienceFilterParams["$using_purchase_controller"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "app_install") + XCTAssertEqual(result.parameters.audienceFilterParams["$application_installed_at"] as! String, appInstalledAtString) } func test_appLaunch() async { let result = await Superwall.shared.track(InternalSuperwallEvent.AppLaunch()) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "app_launch") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "app_launch") } func test_attributes() async { let appInstalledAtString = "now" let result = await Superwall.shared.track(InternalSuperwallEvent.Attributes(appInstalledAtString: appInstalledAtString)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "user_attributes") - XCTAssertEqual(result.parameters.eventParams["$application_installed_at"] as! String, appInstalledAtString) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "user_attributes") + XCTAssertEqual(result.parameters.audienceFilterParams["$application_installed_at"] as! String, appInstalledAtString) } func test_deepLink() async { @@ -61,37 +61,37 @@ final class TrackingTests: XCTestCase { let result = await Superwall.shared.track(InternalSuperwallEvent.DeepLink(url: url)) // "$app_session_id": "B993FB6C-556D-47E0-ADFE-E2E43365D732", "$is_standard_event": false, "$event_name": "" print(result) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "deepLink_open") - XCTAssertEqual(result.parameters.eventParams["$url"] as! String, url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$path"] as! String, url.path) - XCTAssertEqual(result.parameters.eventParams["$pathExtension"] as! String, url.pathExtension) - XCTAssertEqual(result.parameters.eventParams["$lastPathComponent"] as! String, url.lastPathComponent) - XCTAssertEqual(result.parameters.eventParams["$host"] as! String, url.host!) - XCTAssertEqual(result.parameters.eventParams["$query"] as! String, url.query!) - XCTAssertEqual(result.parameters.eventParams["$fragment"] as! String, url.fragment!) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "deepLink_open") + XCTAssertEqual(result.parameters.audienceFilterParams["$url"] as! String, url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$path"] as! String, url.path) + XCTAssertEqual(result.parameters.audienceFilterParams["$pathExtension"] as! String, url.pathExtension) + XCTAssertEqual(result.parameters.audienceFilterParams["$lastPathComponent"] as! String, url.lastPathComponent) + XCTAssertEqual(result.parameters.audienceFilterParams["$host"] as! String, url.host!) + XCTAssertEqual(result.parameters.audienceFilterParams["$query"] as! String, url.query!) + XCTAssertEqual(result.parameters.audienceFilterParams["$fragment"] as! String, url.fragment!) } func test_firstSeen() async { let result = await Superwall.shared.track(InternalSuperwallEvent.FirstSeen()) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "first_seen") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "first_seen") } func test_appClose() async { let result = await Superwall.shared.track(InternalSuperwallEvent.AppClose()) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "app_close") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "app_close") } func test_sessionStart() async { let result = await Superwall.shared.track(InternalSuperwallEvent.SessionStart()) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "session_start") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "session_start") } func test_surveyResponse() async { @@ -107,51 +107,51 @@ final class TrackingTests: XCTestCase { // When let result = await Superwall.shared.track(event) - print(result.parameters.eventParams) - - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "survey_response") - XCTAssertEqual(result.parameters.eventParams["$survey_id"] as! String, survey.id) - XCTAssertEqual(result.parameters.eventParams["$survey_selected_option_id"] as! String, survey.options.first!.id) - XCTAssertEqual(result.parameters.eventParams["$survey_assignment_key"] as! String, survey.assignmentKey) - XCTAssertNil(result.parameters.eventParams["$survey_custom_response"]) - XCTAssertEqual(result.parameters.eventParams["survey_selected_option_title"] as! String, survey.assignmentKey) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + print(result.parameters.audienceFilterParams) + + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "survey_response") + XCTAssertEqual(result.parameters.audienceFilterParams["$survey_id"] as! String, survey.id) + XCTAssertEqual(result.parameters.audienceFilterParams["$survey_selected_option_id"] as! String, survey.options.first!.id) + XCTAssertEqual(result.parameters.audienceFilterParams["$survey_assignment_key"] as! String, survey.assignmentKey) + XCTAssertNil(result.parameters.audienceFilterParams["$survey_custom_response"]) + XCTAssertEqual(result.parameters.audienceFilterParams["survey_selected_option_title"] as! String, survey.assignmentKey) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "survey_response") - XCTAssertEqual(result.parameters.eventParams["survey_selected_option_title"] as! String, survey.assignmentKey) - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "survey_response") + XCTAssertEqual(result.parameters.audienceFilterParams["survey_selected_option_title"] as! String, survey.assignmentKey) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) XCTAssertTrue(result.parameters.delegateParams["is_superwall"] as! Bool) @@ -165,7 +165,7 @@ final class TrackingTests: XCTestCase { XCTAssertEqual(result.parameters.delegateParams["paywall_name"] as! String, paywallInfo.name) XCTAssertEqual(result.parameters.delegateParams["paywall_url"] as! String, paywallInfo.url.absoluteString) XCTAssertEqual(result.parameters.delegateParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) XCTAssertEqual(result.parameters.delegateParams["presented_by"] as! String, paywallInfo.presentedBy) XCTAssertEqual(result.parameters.delegateParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) XCTAssertNotNil(result.parameters.delegateParams["primary_product_id"]) @@ -183,10 +183,10 @@ final class TrackingTests: XCTestCase { createdAt: Date() ) let result = await Superwall.shared.track(InternalSuperwallEvent.PaywallLoad(state: .start, eventData: eventData)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallResponseLoad_start") - XCTAssertTrue(result.parameters.eventParams["$is_triggered_from_event"] as! Bool) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallResponseLoad_start") + XCTAssertTrue(result.parameters.audienceFilterParams["$is_triggered_from_event"] as! Bool) } func test_paywallLoad_fail() async { @@ -198,10 +198,10 @@ final class TrackingTests: XCTestCase { createdAt: Date() ) let result = await Superwall.shared.track(InternalSuperwallEvent.PaywallLoad(state: .fail, eventData: eventData)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallResponseLoad_fail") - XCTAssertTrue(result.parameters.eventParams["$is_triggered_from_event"] as! Bool) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallResponseLoad_fail") + XCTAssertTrue(result.parameters.audienceFilterParams["$is_triggered_from_event"] as! Bool) } func test_paywallLoad_notFound() async { @@ -213,10 +213,10 @@ final class TrackingTests: XCTestCase { createdAt: Date() ) let result = await Superwall.shared.track(InternalSuperwallEvent.PaywallLoad(state: .notFound, eventData: eventData)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallResponseLoad_notFound") - XCTAssertTrue(result.parameters.eventParams["$is_triggered_from_event"] as! Bool) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallResponseLoad_notFound") + XCTAssertTrue(result.parameters.audienceFilterParams["$is_triggered_from_event"] as! Bool) } func test_paywallLoad_complete() async { @@ -229,60 +229,60 @@ final class TrackingTests: XCTestCase { ) let paywallInfo = PaywallInfo.stub() let result = await Superwall.shared.track(InternalSuperwallEvent.PaywallLoad(state: .complete(paywallInfo: paywallInfo), eventData: eventData)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallResponseLoad_complete") - XCTAssertTrue(result.parameters.eventParams["$is_triggered_from_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallResponseLoad_complete") + XCTAssertTrue(result.parameters.audienceFilterParams["$is_triggered_from_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "paywallResponseLoad_complete") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "paywallResponseLoad_complete") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_subscriptionStatusDidChange_active() async { let result = await Superwall.shared.track(InternalSuperwallEvent.SubscriptionStatusDidChange(subscriptionStatus: .active)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "subscriptionStatus_didChange") - XCTAssertEqual(result.parameters.eventParams["$subscription_status"] as! String, "ACTIVE") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "subscriptionStatus_didChange") + XCTAssertEqual(result.parameters.audienceFilterParams["$subscription_status"] as! String, "ACTIVE") } func test_subscriptionStatusDidChange_inactive() async { let result = await Superwall.shared.track(InternalSuperwallEvent.SubscriptionStatusDidChange(subscriptionStatus: .inactive)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "subscriptionStatus_didChange") - XCTAssertEqual(result.parameters.eventParams["$subscription_status"] as! String, "INACTIVE") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "subscriptionStatus_didChange") + XCTAssertEqual(result.parameters.audienceFilterParams["$subscription_status"] as! String, "INACTIVE") } func test_triggerFire_noRuleMatch() async { @@ -293,13 +293,13 @@ final class TrackingTests: XCTestCase { .init(source: .occurrence, experimentId: "2") ] let result = await Superwall.shared.track(InternalSuperwallEvent.TriggerFire(triggerResult: .noRuleMatch(unmatchedRules), triggerName: triggerName)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "trigger_fire") - XCTAssertEqual(result.parameters.eventParams["$result"] as! String, "no_rule_match") - XCTAssertEqual(result.parameters.eventParams["$trigger_name"] as! String, triggerName) - XCTAssertEqual(result.parameters.eventParams["$unmatched_rule_1"] as! String, "EXPRESSION") - XCTAssertEqual(result.parameters.eventParams["$unmatched_rule_2"] as! String, "OCCURRENCE") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "trigger_fire") + XCTAssertEqual(result.parameters.audienceFilterParams["$result"] as! String, "no_rule_match") + XCTAssertEqual(result.parameters.audienceFilterParams["$trigger_name"] as! String, triggerName) + XCTAssertEqual(result.parameters.audienceFilterParams["$unmatched_rule_1"] as! String, "EXPRESSION") + XCTAssertEqual(result.parameters.audienceFilterParams["$unmatched_rule_2"] as! String, "OCCURRENCE") // TODO: Missing test for trigger_session_id here. Need to figure out a way to activate it } @@ -308,14 +308,14 @@ final class TrackingTests: XCTestCase { let dependencyContainer = DependencyContainer() let experiment: Experiment = .stub() let result = await Superwall.shared.track(InternalSuperwallEvent.TriggerFire(triggerResult: .holdout(experiment), triggerName: triggerName)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "trigger_fire") - XCTAssertEqual(result.parameters.eventParams["$trigger_name"] as! String, triggerName) - XCTAssertEqual(result.parameters.eventParams["$result"] as! String, "holdout") - XCTAssertEqual(result.parameters.eventParams["$trigger_name"] as! String, triggerName) - XCTAssertEqual(result.parameters.eventParams["$variant_id"] as! String, experiment.variant.id) - XCTAssertEqual(result.parameters.eventParams["$experiment_id"] as! String, experiment.id) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "trigger_fire") + XCTAssertEqual(result.parameters.audienceFilterParams["$trigger_name"] as! String, triggerName) + XCTAssertEqual(result.parameters.audienceFilterParams["$result"] as! String, "holdout") + XCTAssertEqual(result.parameters.audienceFilterParams["$trigger_name"] as! String, triggerName) + XCTAssertEqual(result.parameters.audienceFilterParams["$variant_id"] as! String, experiment.variant.id) + XCTAssertEqual(result.parameters.audienceFilterParams["$experiment_id"] as! String, experiment.id) } func test_triggerFire_paywall() async { @@ -323,15 +323,15 @@ final class TrackingTests: XCTestCase { let dependencyContainer = DependencyContainer() let experiment: Experiment = .stub() let result = await Superwall.shared.track(InternalSuperwallEvent.TriggerFire(triggerResult: .paywall(experiment), triggerName: triggerName)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "trigger_fire") - XCTAssertEqual(result.parameters.eventParams["$trigger_name"] as! String, triggerName) - XCTAssertEqual(result.parameters.eventParams["$result"] as! String, "present") - XCTAssertEqual(result.parameters.eventParams["$trigger_name"] as! String, triggerName) - XCTAssertEqual(result.parameters.eventParams["$variant_id"] as! String, experiment.variant.id) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, experiment.variant.paywallId!) - XCTAssertEqual(result.parameters.eventParams["$experiment_id"] as! String, experiment.id) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "trigger_fire") + XCTAssertEqual(result.parameters.audienceFilterParams["$trigger_name"] as! String, triggerName) + XCTAssertEqual(result.parameters.audienceFilterParams["$result"] as! String, "present") + XCTAssertEqual(result.parameters.audienceFilterParams["$trigger_name"] as! String, triggerName) + XCTAssertEqual(result.parameters.audienceFilterParams["$variant_id"] as! String, experiment.variant.id) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, experiment.variant.paywallId!) + XCTAssertEqual(result.parameters.audienceFilterParams["$experiment_id"] as! String, experiment.id) } func test_triggerFire_eventNotFound() async { @@ -339,10 +339,10 @@ final class TrackingTests: XCTestCase { let dependencyContainer = DependencyContainer() let result = await Superwall.shared.track(InternalSuperwallEvent.TriggerFire(triggerResult: .eventNotFound, triggerName: triggerName)) print(result) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$result"] as! String, "eventNotFound") - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "trigger_fire") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$result"] as! String, "eventNotFound") + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "trigger_fire") } func test_triggerFire_error() async { @@ -351,10 +351,10 @@ final class TrackingTests: XCTestCase { let error = NSError(domain: "com.superwall", code: 400) let result = await Superwall.shared.track(InternalSuperwallEvent.TriggerFire(triggerResult: .error(error), triggerName: triggerName)) print(result) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$result"] as! String, "error") - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "trigger_fire") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$result"] as! String, "error") + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "trigger_fire") } func test_presentationRequest_userIsSubscribed() async { @@ -368,13 +368,13 @@ final class TrackingTests: XCTestCase { factory: dependencyContainer ) let result = await Superwall.shared.track(event) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallPresentationRequest") - XCTAssertEqual(result.parameters.eventParams["$source_event_name"] as! String, eventData.name) - XCTAssertEqual(result.parameters.eventParams["$status"] as! String, "no_presentation") - XCTAssertEqual(result.parameters.eventParams["$pipeline_type"] as! String, "getPaywallViewController") - XCTAssertEqual(result.parameters.eventParams["$status_reason"] as! String, "user_is_subscribed") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallPresentationRequest") + XCTAssertEqual(result.parameters.audienceFilterParams["$source_event_name"] as! String, eventData.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$status"] as! String, "no_presentation") + XCTAssertEqual(result.parameters.audienceFilterParams["$pipeline_type"] as! String, "getPaywallViewController") + XCTAssertEqual(result.parameters.audienceFilterParams["$status_reason"] as! String, "user_is_subscribed") } func test_presentationRequest_eventNotFound() async { @@ -388,13 +388,13 @@ final class TrackingTests: XCTestCase { factory: dependencyContainer ) let result = await Superwall.shared.track(event) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallPresentationRequest") - XCTAssertEqual(result.parameters.eventParams["$source_event_name"] as! String, eventData.name) - XCTAssertEqual(result.parameters.eventParams["$status"] as! String, "no_presentation") - XCTAssertEqual(result.parameters.eventParams["$pipeline_type"] as! String, "getPaywallViewController") - XCTAssertEqual(result.parameters.eventParams["$status_reason"] as! String, "event_not_found") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallPresentationRequest") + XCTAssertEqual(result.parameters.audienceFilterParams["$source_event_name"] as! String, eventData.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$status"] as! String, "no_presentation") + XCTAssertEqual(result.parameters.audienceFilterParams["$pipeline_type"] as! String, "getPaywallViewController") + XCTAssertEqual(result.parameters.audienceFilterParams["$status_reason"] as! String, "event_not_found") } func test_presentationRequest_noRuleMatch() async { @@ -408,14 +408,14 @@ final class TrackingTests: XCTestCase { factory: dependencyContainer ) let result = await Superwall.shared.track(event) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallPresentationRequest") - XCTAssertEqual(result.parameters.eventParams["$source_event_name"] as! String, eventData.name) - XCTAssertEqual(result.parameters.eventParams["$status"] as! String, "no_presentation") - XCTAssertEqual(result.parameters.eventParams["$pipeline_type"] as! String, "getPaywallViewController") - XCTAssertEqual(result.parameters.eventParams["$status_reason"] as! String, "no_rule_match") - XCTAssertNil(result.parameters.eventParams["$expression_params"] as? String) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallPresentationRequest") + XCTAssertEqual(result.parameters.audienceFilterParams["$source_event_name"] as! String, eventData.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$status"] as! String, "no_presentation") + XCTAssertEqual(result.parameters.audienceFilterParams["$pipeline_type"] as! String, "getPaywallViewController") + XCTAssertEqual(result.parameters.audienceFilterParams["$status_reason"] as! String, "no_rule_match") + XCTAssertNil(result.parameters.audienceFilterParams["$expression_params"] as? String) } func test_presentationRequest_expressionParams() async { @@ -430,14 +430,14 @@ final class TrackingTests: XCTestCase { factory: dependencyContainer ) let result = await Superwall.shared.track(event) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallPresentationRequest") - XCTAssertEqual(result.parameters.eventParams["$source_event_name"] as! String, eventData.name) - XCTAssertEqual(result.parameters.eventParams["$status"] as! String, "no_presentation") - XCTAssertEqual(result.parameters.eventParams["$pipeline_type"] as! String, "getPaywallViewController") - XCTAssertEqual(result.parameters.eventParams["$status_reason"] as! String, "no_rule_match") - XCTAssertNotNil(result.parameters.eventParams["$expression_params"] as! String) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallPresentationRequest") + XCTAssertEqual(result.parameters.audienceFilterParams["$source_event_name"] as! String, eventData.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$status"] as! String, "no_presentation") + XCTAssertEqual(result.parameters.audienceFilterParams["$pipeline_type"] as! String, "getPaywallViewController") + XCTAssertEqual(result.parameters.audienceFilterParams["$status_reason"] as! String, "no_rule_match") + XCTAssertNotNil(result.parameters.audienceFilterParams["$expression_params"] as! String) } func test_presentationRequest_alreadyPresented() async { @@ -451,13 +451,13 @@ final class TrackingTests: XCTestCase { factory: dependencyContainer ) let result = await Superwall.shared.track(event) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallPresentationRequest") - XCTAssertEqual(result.parameters.eventParams["$source_event_name"] as! String, eventData.name) - XCTAssertEqual(result.parameters.eventParams["$status"] as! String, "no_presentation") - XCTAssertEqual(result.parameters.eventParams["$pipeline_type"] as! String, "getPaywallViewController") - XCTAssertEqual(result.parameters.eventParams["$status_reason"] as! String, "paywall_already_presented") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallPresentationRequest") + XCTAssertEqual(result.parameters.audienceFilterParams["$source_event_name"] as! String, eventData.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$status"] as! String, "no_presentation") + XCTAssertEqual(result.parameters.audienceFilterParams["$pipeline_type"] as! String, "getPaywallViewController") + XCTAssertEqual(result.parameters.audienceFilterParams["$status_reason"] as! String, "paywall_already_presented") } // TODO: Add test for expression params func test_presentationRequest_debuggerLaunched() async { @@ -471,13 +471,13 @@ final class TrackingTests: XCTestCase { factory: dependencyContainer ) let result = await Superwall.shared.track(event) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallPresentationRequest") - XCTAssertEqual(result.parameters.eventParams["$source_event_name"] as! String, eventData.name) - XCTAssertEqual(result.parameters.eventParams["$status"] as! String, "no_presentation") - XCTAssertEqual(result.parameters.eventParams["$pipeline_type"] as! String, "getPaywallViewController") - XCTAssertEqual(result.parameters.eventParams["$status_reason"] as! String, "debugger_presented") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallPresentationRequest") + XCTAssertEqual(result.parameters.audienceFilterParams["$source_event_name"] as! String, eventData.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$status"] as! String, "no_presentation") + XCTAssertEqual(result.parameters.audienceFilterParams["$pipeline_type"] as! String, "getPaywallViewController") + XCTAssertEqual(result.parameters.audienceFilterParams["$status_reason"] as! String, "debugger_presented") } func test_presentationRequest_noPresenter() async { @@ -491,13 +491,13 @@ final class TrackingTests: XCTestCase { factory: dependencyContainer ) let result = await Superwall.shared.track(event) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallPresentationRequest") - XCTAssertEqual(result.parameters.eventParams["$source_event_name"] as! String, eventData.name) - XCTAssertEqual(result.parameters.eventParams["$status"] as! String, "no_presentation") - XCTAssertEqual(result.parameters.eventParams["$pipeline_type"] as! String, "getPaywallViewController") - XCTAssertEqual(result.parameters.eventParams["$status_reason"] as! String, "no_presenter") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallPresentationRequest") + XCTAssertEqual(result.parameters.audienceFilterParams["$source_event_name"] as! String, eventData.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$status"] as! String, "no_presentation") + XCTAssertEqual(result.parameters.audienceFilterParams["$pipeline_type"] as! String, "getPaywallViewController") + XCTAssertEqual(result.parameters.audienceFilterParams["$status_reason"] as! String, "no_presenter") } func test_presentationRequest_noPaywallViewController() async { @@ -511,13 +511,13 @@ final class TrackingTests: XCTestCase { factory: dependencyContainer ) let result = await Superwall.shared.track(event) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallPresentationRequest") - XCTAssertEqual(result.parameters.eventParams["$source_event_name"] as! String, eventData.name) - XCTAssertEqual(result.parameters.eventParams["$status"] as! String, "no_presentation") - XCTAssertEqual(result.parameters.eventParams["$pipeline_type"] as! String, "getPaywallViewController") - XCTAssertEqual(result.parameters.eventParams["$status_reason"] as! String, "no_paywall_view_controller") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallPresentationRequest") + XCTAssertEqual(result.parameters.audienceFilterParams["$source_event_name"] as! String, eventData.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$status"] as! String, "no_presentation") + XCTAssertEqual(result.parameters.audienceFilterParams["$pipeline_type"] as! String, "getPaywallViewController") + XCTAssertEqual(result.parameters.audienceFilterParams["$status_reason"] as! String, "no_paywall_view_controller") } func test_presentationRequest_holdout() async { @@ -531,57 +531,57 @@ final class TrackingTests: XCTestCase { factory: dependencyContainer ) let result = await Superwall.shared.track(event) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallPresentationRequest") - XCTAssertEqual(result.parameters.eventParams["$source_event_name"] as! String, eventData.name) - XCTAssertEqual(result.parameters.eventParams["$status"] as! String, "no_presentation") - XCTAssertEqual(result.parameters.eventParams["$pipeline_type"] as! String, "getPaywallViewController") - XCTAssertEqual(result.parameters.eventParams["$status_reason"] as! String, "holdout") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallPresentationRequest") + XCTAssertEqual(result.parameters.audienceFilterParams["$source_event_name"] as! String, eventData.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$status"] as! String, "no_presentation") + XCTAssertEqual(result.parameters.audienceFilterParams["$pipeline_type"] as! String, "getPaywallViewController") + XCTAssertEqual(result.parameters.audienceFilterParams["$status_reason"] as! String, "holdout") } func test_paywallOpen() async { let paywallInfo: PaywallInfo = .stub() let result = await Superwall.shared.track(InternalSuperwallEvent.PaywallOpen(paywallInfo: paywallInfo)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$presentation_source_type"] as? String, paywallInfo.presentationSourceType) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywall_open") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$presentation_source_type"] as? String, paywallInfo.presentationSourceType) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywall_open") // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "paywall_open") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "paywall_open") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_paywallClose_survey_show() async { @@ -594,46 +594,46 @@ final class TrackingTests: XCTestCase { surveyPresentationResult: .show ) ) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywall_close") - XCTAssertTrue(result.parameters.eventParams["$survey_attached"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$survey_presentation"] as! String, "show") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywall_close") + XCTAssertTrue(result.parameters.audienceFilterParams["$survey_attached"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$survey_presentation"] as! String, "show") // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "paywall_close") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "paywall_close") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_paywallClose_survey_noShow() async { @@ -646,46 +646,46 @@ final class TrackingTests: XCTestCase { surveyPresentationResult: .noShow ) ) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywall_close") - XCTAssertTrue(result.parameters.eventParams["$survey_attached"] as! Bool) - XCTAssertNil(result.parameters.eventParams["$survey_presentation"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywall_close") + XCTAssertTrue(result.parameters.audienceFilterParams["$survey_attached"] as! Bool) + XCTAssertNil(result.parameters.audienceFilterParams["$survey_presentation"]) // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "paywall_close") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "paywall_close") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_paywallClose_survey_holdout() async { @@ -698,46 +698,46 @@ final class TrackingTests: XCTestCase { surveyPresentationResult: .holdout ) ) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywall_close") - XCTAssertTrue(result.parameters.eventParams["$survey_attached"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$survey_presentation"] as! String, "holdout") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywall_close") + XCTAssertTrue(result.parameters.audienceFilterParams["$survey_attached"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$survey_presentation"] as! String, "holdout") // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "paywall_close") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "paywall_close") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_paywallClose_noSurvey() async { @@ -750,89 +750,89 @@ final class TrackingTests: XCTestCase { surveyPresentationResult: .noShow ) ) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywall_close") - XCTAssertFalse(result.parameters.eventParams["$survey_attached"] as! Bool) - XCTAssertNil(result.parameters.eventParams["$survey_presentation"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywall_close") + XCTAssertFalse(result.parameters.audienceFilterParams["$survey_attached"] as! Bool) + XCTAssertNil(result.parameters.audienceFilterParams["$survey_presentation"]) // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "paywall_close") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "paywall_close") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_paywallDecline() async { let paywallInfo: PaywallInfo = .stub() let result = await Superwall.shared.track(InternalSuperwallEvent.PaywallDecline(paywallInfo: paywallInfo)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywall_decline") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywall_decline") // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "paywall_decline") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "paywall_decline") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_transaction_start() async { @@ -843,78 +843,78 @@ final class TrackingTests: XCTestCase { let skTransaction = MockSKPaymentTransaction(state: .purchased) let transaction = await dependencyContainer.makeStoreTransaction(from: skTransaction) let result = await Superwall.shared.track(InternalSuperwallEvent.Transaction(state: .start(product), paywallInfo: paywallInfo, product: product, model: transaction)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["$product_id"] as! String, productId) - XCTAssertEqual(result.parameters.eventParams["$product_identifier"] as! String, productId) - XCTAssertNotNil(result.parameters.eventParams["$product_raw_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_alt"]) - XCTAssertNotNil(result.parameters.eventParams["$product_localized_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_periodly"]) - XCTAssertNotNil(result.parameters.eventParams["$product_weekly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_daily_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_monthly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_yearly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_text"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_end_date"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_locale"]) - XCTAssertNotNil(result.parameters.eventParams["$product_language_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_symbol"]) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$original_transaction_identifier"]) - XCTAssertNotNil(result.parameters.eventParams["$config_request_id"]) - XCTAssertEqual(result.parameters.eventParams["$state"] as! String, "PURCHASED") - XCTAssertNotNil(result.parameters.eventParams["$id"]) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "transaction_start") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_id"] as! String, productId) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_identifier"] as! String, productId) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_raw_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_alt"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_localized_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_periodly"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_weekly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_daily_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_monthly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_yearly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_text"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_end_date"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_locale"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_language_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_symbol"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$original_transaction_identifier"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$config_request_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["$state"] as! String, "PURCHASED") + XCTAssertNotNil(result.parameters.audienceFilterParams["$id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "transaction_start") // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "transaction_start") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "transaction_start") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_transaction_complete() async { @@ -925,78 +925,78 @@ final class TrackingTests: XCTestCase { let skTransaction = MockSKPaymentTransaction(state: .purchased) let transaction = await dependencyContainer.makeStoreTransaction(from: skTransaction) let result = await Superwall.shared.track(InternalSuperwallEvent.Transaction(state: .complete(product, transaction), paywallInfo: paywallInfo, product: product, model: transaction)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["$product_id"] as! String, productId) - XCTAssertEqual(result.parameters.eventParams["$product_identifier"] as! String, productId) - XCTAssertNotNil(result.parameters.eventParams["$product_raw_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_alt"]) - XCTAssertNotNil(result.parameters.eventParams["$product_localized_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_periodly"]) - XCTAssertNotNil(result.parameters.eventParams["$product_weekly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_daily_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_monthly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_yearly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_text"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_end_date"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_locale"]) - XCTAssertNotNil(result.parameters.eventParams["$product_language_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_symbol"]) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$original_transaction_identifier"]) - XCTAssertNotNil(result.parameters.eventParams["$config_request_id"]) - XCTAssertEqual(result.parameters.eventParams["$state"] as! String, "PURCHASED") - XCTAssertNotNil(result.parameters.eventParams["$id"]) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "transaction_complete") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_id"] as! String, productId) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_identifier"] as! String, productId) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_raw_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_alt"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_localized_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_periodly"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_weekly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_daily_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_monthly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_yearly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_text"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_end_date"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_locale"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_language_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_symbol"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$original_transaction_identifier"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$config_request_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["$state"] as! String, "PURCHASED") + XCTAssertNotNil(result.parameters.audienceFilterParams["$id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "transaction_complete") // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "transaction_complete") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "transaction_complete") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_transaction_restore() async { @@ -1007,79 +1007,79 @@ final class TrackingTests: XCTestCase { let skTransaction = MockSKPaymentTransaction(state: .purchased) let transaction = await dependencyContainer.makeStoreTransaction(from: skTransaction) let result = await Superwall.shared.track(InternalSuperwallEvent.Transaction(state: .restore(RestoreType.viaPurchase(transaction)), paywallInfo: paywallInfo, product: product, model: transaction)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertTrue(result.parameters.eventParams["$restore_via_purchase_attempt"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["$product_id"] as! String, productId) - XCTAssertEqual(result.parameters.eventParams["$product_identifier"] as! String, productId) - XCTAssertNotNil(result.parameters.eventParams["$product_raw_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_alt"]) - XCTAssertNotNil(result.parameters.eventParams["$product_localized_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_periodly"]) - XCTAssertNotNil(result.parameters.eventParams["$product_weekly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_daily_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_monthly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_yearly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_text"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_end_date"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_locale"]) - XCTAssertNotNil(result.parameters.eventParams["$product_language_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_symbol"]) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$original_transaction_identifier"]) - XCTAssertNotNil(result.parameters.eventParams["$config_request_id"]) - XCTAssertEqual(result.parameters.eventParams["$state"] as! String, "PURCHASED") - XCTAssertNotNil(result.parameters.eventParams["$id"]) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "transaction_restore") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertTrue(result.parameters.audienceFilterParams["$restore_via_purchase_attempt"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_id"] as! String, productId) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_identifier"] as! String, productId) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_raw_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_alt"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_localized_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_periodly"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_weekly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_daily_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_monthly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_yearly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_text"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_end_date"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_locale"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_language_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_symbol"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$original_transaction_identifier"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$config_request_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["$state"] as! String, "PURCHASED") + XCTAssertNotNil(result.parameters.audienceFilterParams["$id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "transaction_restore") // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "transaction_restore") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "transaction_restore") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_transaction_timeout() async { @@ -1090,78 +1090,78 @@ final class TrackingTests: XCTestCase { let skTransaction = MockSKPaymentTransaction(state: .purchased) let transaction = await dependencyContainer.makeStoreTransaction(from: skTransaction) let result = await Superwall.shared.track(InternalSuperwallEvent.Transaction(state: .timeout, paywallInfo: paywallInfo, product: product, model: transaction)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["$product_id"] as! String, productId) - XCTAssertEqual(result.parameters.eventParams["$product_identifier"] as! String, productId) - XCTAssertNotNil(result.parameters.eventParams["$product_raw_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_alt"]) - XCTAssertNotNil(result.parameters.eventParams["$product_localized_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_periodly"]) - XCTAssertNotNil(result.parameters.eventParams["$product_weekly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_daily_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_monthly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_yearly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_text"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_end_date"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_locale"]) - XCTAssertNotNil(result.parameters.eventParams["$product_language_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_symbol"]) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$original_transaction_identifier"]) - XCTAssertNotNil(result.parameters.eventParams["$config_request_id"]) - XCTAssertEqual(result.parameters.eventParams["$state"] as! String, "PURCHASED") - XCTAssertNotNil(result.parameters.eventParams["$id"]) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "transaction_timeout") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_id"] as! String, productId) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_identifier"] as! String, productId) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_raw_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_alt"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_localized_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_periodly"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_weekly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_daily_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_monthly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_yearly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_text"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_end_date"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_locale"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_language_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_symbol"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$original_transaction_identifier"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$config_request_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["$state"] as! String, "PURCHASED") + XCTAssertNotNil(result.parameters.audienceFilterParams["$id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "transaction_timeout") // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "transaction_timeout") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "transaction_timeout") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_transaction_fail() async { @@ -1173,75 +1173,75 @@ final class TrackingTests: XCTestCase { let transaction = await dependencyContainer.makeStoreTransaction(from: skTransaction) let error = TransactionError.failure("failed mate", product) let result = await Superwall.shared.track(InternalSuperwallEvent.Transaction(state: .fail(error), paywallInfo: paywallInfo, product: product, model: transaction)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["$product_id"] as! String, productId) - XCTAssertEqual(result.parameters.eventParams["$product_identifier"] as! String, productId) - XCTAssertNotNil(result.parameters.eventParams["$product_raw_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_alt"]) - XCTAssertNotNil(result.parameters.eventParams["$product_localized_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_periodly"]) - XCTAssertNotNil(result.parameters.eventParams["$product_weekly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_daily_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_monthly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_yearly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_text"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_end_date"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_locale"]) - XCTAssertNotNil(result.parameters.eventParams["$product_language_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_symbol"]) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertEqual(result.parameters.eventParams["$message"] as! String, "failed mate") - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "transaction_fail") + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_id"] as! String, productId) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_identifier"] as! String, productId) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_raw_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_alt"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_localized_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_periodly"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_weekly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_daily_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_monthly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_yearly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_text"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_end_date"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_locale"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_language_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_symbol"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["$message"] as! String, "failed mate") + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "transaction_fail") // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "transaction_fail") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "transaction_fail") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_subscriptionStart() async { @@ -1250,73 +1250,73 @@ final class TrackingTests: XCTestCase { let product = StoreProduct(sk1Product: MockSkProduct(productIdentifier: productId)) let result = await Superwall.shared.track(InternalSuperwallEvent.SubscriptionStart(paywallInfo: paywallInfo, product: product)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "subscription_start") - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["$product_id"] as! String, productId) - XCTAssertEqual(result.parameters.eventParams["$product_identifier"] as! String, productId) - XCTAssertNotNil(result.parameters.eventParams["$product_raw_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_alt"]) - XCTAssertNotNil(result.parameters.eventParams["$product_localized_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_periodly"]) - XCTAssertNotNil(result.parameters.eventParams["$product_weekly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_daily_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_monthly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_yearly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_text"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_end_date"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_locale"]) - XCTAssertNotNil(result.parameters.eventParams["$product_language_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_symbol"]) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "subscription_start") + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_id"] as! String, productId) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_identifier"] as! String, productId) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_raw_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_alt"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_localized_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_periodly"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_weekly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_daily_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_monthly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_yearly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_text"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_end_date"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_locale"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_language_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_symbol"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "subscription_start") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "subscription_start") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_freeTrialStart() async { @@ -1324,73 +1324,73 @@ final class TrackingTests: XCTestCase { let productId = "abc" let product = StoreProduct(sk1Product: MockSkProduct(productIdentifier: productId)) let result = await Superwall.shared.track(InternalSuperwallEvent.FreeTrialStart(paywallInfo: paywallInfo, product: product)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "freeTrial_start") - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["$product_id"] as! String, productId) - XCTAssertEqual(result.parameters.eventParams["$product_identifier"] as! String, productId) - XCTAssertNotNil(result.parameters.eventParams["$product_raw_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_alt"]) - XCTAssertNotNil(result.parameters.eventParams["$product_localized_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_periodly"]) - XCTAssertNotNil(result.parameters.eventParams["$product_weekly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_daily_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_monthly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_yearly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_text"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_end_date"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_locale"]) - XCTAssertNotNil(result.parameters.eventParams["$product_language_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_symbol"]) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "freeTrial_start") + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_id"] as! String, productId) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_identifier"] as! String, productId) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_raw_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_alt"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_localized_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_periodly"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_weekly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_daily_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_monthly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_yearly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_text"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_end_date"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_locale"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_language_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_symbol"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "freeTrial_start") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "freeTrial_start") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_nonRecurringProductPurchase() async { @@ -1398,396 +1398,396 @@ final class TrackingTests: XCTestCase { let productId = "abc" let product = StoreProduct(sk1Product: MockSkProduct(productIdentifier: productId)) let result = await Superwall.shared.track(InternalSuperwallEvent.NonRecurringProductPurchase(paywallInfo: paywallInfo, product: product)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "nonRecurringProduct_purchase") - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["$product_id"] as! String, productId) - XCTAssertEqual(result.parameters.eventParams["$product_identifier"] as! String, productId) - XCTAssertNotNil(result.parameters.eventParams["$product_raw_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_alt"]) - XCTAssertNotNil(result.parameters.eventParams["$product_localized_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period"]) - XCTAssertNotNil(result.parameters.eventParams["$product_periodly"]) - XCTAssertNotNil(result.parameters.eventParams["$product_weekly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_daily_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_monthly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_yearly_price"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_text"]) - XCTAssertNotNil(result.parameters.eventParams["$product_trial_period_end_date"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_days"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_weeks"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_months"]) - XCTAssertNotNil(result.parameters.eventParams["$product_period_years"]) - XCTAssertNotNil(result.parameters.eventParams["$product_locale"]) - XCTAssertNotNil(result.parameters.eventParams["$product_language_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_code"]) - XCTAssertNotNil(result.parameters.eventParams["$product_currency_symbol"]) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "nonRecurringProduct_purchase") + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_id"] as! String, productId) + XCTAssertEqual(result.parameters.audienceFilterParams["$product_identifier"] as! String, productId) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_raw_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_alt"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_localized_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_periodly"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_weekly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_daily_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_monthly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_yearly_price"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_text"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_trial_period_end_date"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_days"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_weeks"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_months"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_period_years"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_locale"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_language_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_code"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$product_currency_symbol"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "nonRecurringProduct_purchase") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "nonRecurringProduct_purchase") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_paywallWebviewLoad_start() async { let paywallInfo: PaywallInfo = .stub() let result = await Superwall.shared.track(InternalSuperwallEvent.PaywallWebviewLoad(state: .start, paywallInfo: paywallInfo)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallWebviewLoad_start") - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallWebviewLoad_start") + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "paywallWebviewLoad_start") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "paywallWebviewLoad_start") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_paywallWebviewLoad_fail() async { let paywallInfo: PaywallInfo = .stub() let result = await Superwall.shared.track(InternalSuperwallEvent.PaywallWebviewLoad(state: .fail(NetworkError.unknown, []), paywallInfo: paywallInfo)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallWebviewLoad_fail") - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallWebviewLoad_fail") + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "paywallWebviewLoad_fail") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "paywallWebviewLoad_fail") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_paywallWebviewLoad_complete() async { let paywallInfo: PaywallInfo = .stub() let result = await Superwall.shared.track(InternalSuperwallEvent.PaywallWebviewLoad(state: .complete, paywallInfo: paywallInfo)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallWebviewLoad_complete") - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallWebviewLoad_complete") + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "paywallWebviewLoad_complete") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "paywallWebviewLoad_complete") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_paywallWebviewLoad_timeout() async { let paywallInfo: PaywallInfo = .stub() let result = await Superwall.shared.track(InternalSuperwallEvent.PaywallWebviewLoad(state: .timeout, paywallInfo: paywallInfo)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallWebviewLoad_timeout") - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallWebviewLoad_timeout") + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "paywallWebviewLoad_timeout") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "paywallWebviewLoad_timeout") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_paywallProductsLoad_start() async { let paywallInfo: PaywallInfo = .stub() let eventData: EventData = .stub() let result = await Superwall.shared.track(InternalSuperwallEvent.PaywallProductsLoad(state: .start, paywallInfo: paywallInfo, eventData: eventData)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallProductsLoad_start") - XCTAssertTrue(result.parameters.eventParams["$is_triggered_from_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallProductsLoad_start") + XCTAssertTrue(result.parameters.audienceFilterParams["$is_triggered_from_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "paywallProductsLoad_start") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "paywallProductsLoad_start") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_paywallProductsLoad_fail() async { let paywallInfo: PaywallInfo = .stub() let eventData: EventData = .stub() let result = await Superwall.shared.track(InternalSuperwallEvent.PaywallProductsLoad(state: .fail(NetworkError.unknown), paywallInfo: paywallInfo, eventData: eventData)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallProductsLoad_fail") - XCTAssertTrue(result.parameters.eventParams["$is_triggered_from_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallProductsLoad_fail") + XCTAssertTrue(result.parameters.audienceFilterParams["$is_triggered_from_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "paywallProductsLoad_fail") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "paywallProductsLoad_fail") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } func test_paywallProductsLoad_complete() async { let paywallInfo: PaywallInfo = .stub() let eventData: EventData = .stub() let result = await Superwall.shared.track(InternalSuperwallEvent.PaywallProductsLoad(state: .complete, paywallInfo: paywallInfo, eventData: eventData)) - XCTAssertNotNil(result.parameters.eventParams["$app_session_id"]) - XCTAssertTrue(result.parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$event_name"] as! String, "paywallProductsLoad_complete") - XCTAssertTrue(result.parameters.eventParams["$is_triggered_from_event"] as! Bool) - XCTAssertEqual(result.parameters.eventParams["$paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) - XCTAssertEqual(result.parameters.eventParams["$paywall_identifier"] as! String, paywallInfo.identifier) - XCTAssertEqual(result.parameters.eventParams["$paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) - XCTAssertEqual(result.parameters.eventParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) - XCTAssertEqual(result.parameters.eventParams["$presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) - XCTAssertEqual(result.parameters.eventParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) - XCTAssertEqual(result.parameters.eventParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertNotNil(result.parameters.eventParams["$primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["$tertiary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$app_session_id"]) + XCTAssertTrue(result.parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$event_name"] as! String, "paywallProductsLoad_complete") + XCTAssertTrue(result.parameters.audienceFilterParams["$is_triggered_from_event"] as! Bool) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywalljs_version"] as? String, paywallInfo.paywalljsVersion) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_identifier"] as! String, paywallInfo.identifier) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_url"] as! String, paywallInfo.url.absoluteString) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_id"] as? String, paywallInfo.presentedByEventWithId) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by_event_timestamp"] as? String, paywallInfo.presentedByEventAt) + XCTAssertEqual(result.parameters.audienceFilterParams["$presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_start_time"] as! String, paywallInfo.responseLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_complete_time"] as! String, paywallInfo.responseLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_response_load_duration"] as? TimeInterval, paywallInfo.responseLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_start_time"] as! String, paywallInfo.webViewLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_complete_time"] as! String, paywallInfo.webViewLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_webview_load_duration"] as? TimeInterval, paywallInfo.webViewLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_start_time"] as! String, paywallInfo.productsLoadStartTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_complete_time"] as! String, paywallInfo.productsLoadCompleteTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_fail_time"] as! String, paywallInfo.productsLoadFailTime!) + XCTAssertEqual(result.parameters.audienceFilterParams["$paywall_products_load_duration"] as? TimeInterval, paywallInfo.productsLoadDuration) + XCTAssertEqual(result.parameters.audienceFilterParams["$is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertNotNil(result.parameters.audienceFilterParams["$primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["$tertiary_product_id"]) // Custom parameters - XCTAssertEqual(result.parameters.eventParams["event_name"] as! String, "paywallProductsLoad_complete") - XCTAssertEqual(result.parameters.eventParams["paywall_id"] as! String, paywallInfo.databaseId) - XCTAssertEqual(result.parameters.eventParams["paywall_name"] as! String, paywallInfo.name) - XCTAssertEqual(result.parameters.eventParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) - XCTAssertEqual(result.parameters.eventParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) - XCTAssertEqual(result.parameters.eventParams["presented_by"] as! String, paywallInfo.presentedBy) - XCTAssertEqual(result.parameters.eventParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) - XCTAssertNotNil(result.parameters.eventParams["primary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["secondary_product_id"]) - XCTAssertNotNil(result.parameters.eventParams["tertiary_product_id"]) - XCTAssertEqual(result.parameters.eventParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) + XCTAssertEqual(result.parameters.audienceFilterParams["event_name"] as! String, "paywallProductsLoad_complete") + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_id"] as! String, paywallInfo.databaseId) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_name"] as! String, paywallInfo.name) + XCTAssertEqual(result.parameters.audienceFilterParams["is_free_trial_available"] as! Bool, paywallInfo.isFreeTrialAvailable) + XCTAssertEqual(result.parameters.audienceFilterParams["feature_gating"] as! String, FeatureGatingBehavior.nonGated.description) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by"] as! String, paywallInfo.presentedBy) + XCTAssertEqual(result.parameters.audienceFilterParams["paywall_product_ids"] as? String, paywallInfo.productIds.joined(separator: ",")) + XCTAssertNotNil(result.parameters.audienceFilterParams["primary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["secondary_product_id"]) + XCTAssertNotNil(result.parameters.audienceFilterParams["tertiary_product_id"]) + XCTAssertEqual(result.parameters.audienceFilterParams["presented_by_event_name"] as? String, paywallInfo.presentedByEventWithName) } } diff --git a/Tests/SuperwallKitTests/Analytics/Internal Tracking/TrackingLogicTests.swift b/Tests/SuperwallKitTests/Analytics/Internal Tracking/TrackingLogicTests.swift index 4734b6d6f..ded070291 100644 --- a/Tests/SuperwallKitTests/Analytics/Internal Tracking/TrackingLogicTests.swift +++ b/Tests/SuperwallKitTests/Analytics/Internal Tracking/TrackingLogicTests.swift @@ -21,7 +21,7 @@ final class TrackingLogicTests: XCTestCase { appSessionId: "abc" ) - XCTAssertTrue(parameters.eventParams["$is_standard_event"] as! Bool) + XCTAssertTrue(parameters.audienceFilterParams["$is_standard_event"] as! Bool) XCTAssertTrue(parameters.delegateParams["is_superwall"] as! Bool) } /* @@ -38,9 +38,9 @@ final class TrackingLogicTests: XCTestCase { storage: storage ) - XCTAssertTrue(parameters.eventParams["$is_standard_event"] as! Bool) + XCTAssertTrue(parameters.audienceFilterParams["$is_standard_event"] as! Bool) XCTAssertTrue(parameters.delegateParams["is_superwall"] as! Bool) - XCTAssertEqual(parameters.eventParams["$count_24h"] as! Int, 2) + XCTAssertEqual(parameters.audienceFilterParams["$count_24h"] as! Int, 2) }*/ func testProcessParameters_userEvent_noParams() async { @@ -57,8 +57,8 @@ final class TrackingLogicTests: XCTestCase { appSessionId: "abc" ) - XCTAssertFalse(parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertFalse(parameters.eventParams["$is_feature_gatable"] as! Bool) + XCTAssertFalse(parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertFalse(parameters.audienceFilterParams["$is_feature_gatable"] as! Bool) XCTAssertTrue(parameters.delegateParams["is_superwall"] as! Bool) } /* @@ -78,9 +78,9 @@ final class TrackingLogicTests: XCTestCase { storage: storage ) - XCTAssertFalse(parameters.eventParams["$is_standard_event"] as! Bool) + XCTAssertFalse(parameters.audienceFilterParams["$is_standard_event"] as! Bool) XCTAssertTrue(parameters.delegateParams["is_superwall"] as! Bool) - XCTAssertEqual(parameters.eventParams["$count_24h"] as! Int, 2) + XCTAssertEqual(parameters.audienceFilterParams["$count_24h"] as! Int, 2) } */ @@ -99,9 +99,9 @@ final class TrackingLogicTests: XCTestCase { appSessionId: "abc" ) - XCTAssertTrue(parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertTrue(parameters.eventParams["$is_triggered_from_event"] as! Bool) - XCTAssertEqual(parameters.eventParams["$event_name"] as! String, "paywallResponseLoad_start") + XCTAssertTrue(parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertTrue(parameters.audienceFilterParams["$is_triggered_from_event"] as! Bool) + XCTAssertEqual(parameters.audienceFilterParams["$event_name"] as! String, "paywallResponseLoad_start") XCTAssertTrue(parameters.delegateParams["is_superwall"] as! Bool) XCTAssertTrue(parameters.delegateParams["is_triggered_from_event"] as! Bool) } @@ -110,7 +110,7 @@ final class TrackingLogicTests: XCTestCase { // Given let event = InternalSuperwallEvent.Attributes( appInstalledAtString: "abc", - customParameters: [ + audienceFilterParams: [ "myCustomParam": "hello", "otherParam": true ] @@ -121,11 +121,11 @@ final class TrackingLogicTests: XCTestCase { appSessionId: "abc" ) - XCTAssertTrue(parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(parameters.eventParams["$application_installed_at"] as! String, "abc") - XCTAssertEqual(parameters.eventParams["$event_name"] as! String, "user_attributes") - XCTAssertEqual(parameters.eventParams["myCustomParam"] as! String, "hello") - XCTAssertTrue(parameters.eventParams["otherParam"] as! Bool) + XCTAssertTrue(parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(parameters.audienceFilterParams["$application_installed_at"] as! String, "abc") + XCTAssertEqual(parameters.audienceFilterParams["$event_name"] as! String, "user_attributes") + XCTAssertEqual(parameters.audienceFilterParams["myCustomParam"] as! String, "hello") + XCTAssertTrue(parameters.audienceFilterParams["otherParam"] as! Bool) XCTAssertTrue(parameters.delegateParams["is_superwall"] as! Bool) XCTAssertEqual(parameters.delegateParams["application_installed_at"] as! String, "abc") XCTAssertEqual(parameters.delegateParams["myCustomParam"] as! String, "hello") @@ -136,7 +136,7 @@ final class TrackingLogicTests: XCTestCase { // Given let event = InternalSuperwallEvent.Attributes( appInstalledAtString: "abc", - customParameters: [ + audienceFilterParams: [ "$myCustomParam": "hello", "otherParam": true ] @@ -147,11 +147,11 @@ final class TrackingLogicTests: XCTestCase { appSessionId: "abc" ) - XCTAssertTrue(parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(parameters.eventParams["$application_installed_at"] as! String, "abc") - XCTAssertEqual(parameters.eventParams["$event_name"] as! String, "user_attributes") - XCTAssertNil(parameters.eventParams["$myCustomParam"]) - XCTAssertTrue(parameters.eventParams["otherParam"] as! Bool) + XCTAssertTrue(parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(parameters.audienceFilterParams["$application_installed_at"] as! String, "abc") + XCTAssertEqual(parameters.audienceFilterParams["$event_name"] as! String, "user_attributes") + XCTAssertNil(parameters.audienceFilterParams["$myCustomParam"]) + XCTAssertTrue(parameters.audienceFilterParams["otherParam"] as! Bool) XCTAssertTrue(parameters.delegateParams["is_superwall"] as! Bool) XCTAssertEqual(parameters.delegateParams["application_installed_at"] as! String, "abc") XCTAssertNil(parameters.delegateParams["$myCustomParam"]) @@ -162,7 +162,7 @@ final class TrackingLogicTests: XCTestCase { // Given let event = InternalSuperwallEvent.Attributes( appInstalledAtString: "abc", - customParameters: [ + audienceFilterParams: [ "myCustomParam": ["hello"], "otherParam": true ] @@ -173,11 +173,11 @@ final class TrackingLogicTests: XCTestCase { appSessionId: "abc" ) - XCTAssertTrue(parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(parameters.eventParams["$application_installed_at"] as! String, "abc") - XCTAssertEqual(parameters.eventParams["$event_name"] as! String, "user_attributes") - XCTAssertNil(parameters.eventParams["myCustomParam"]) - XCTAssertTrue(parameters.eventParams["otherParam"] as! Bool) + XCTAssertTrue(parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(parameters.audienceFilterParams["$application_installed_at"] as! String, "abc") + XCTAssertEqual(parameters.audienceFilterParams["$event_name"] as! String, "user_attributes") + XCTAssertNil(parameters.audienceFilterParams["myCustomParam"]) + XCTAssertTrue(parameters.audienceFilterParams["otherParam"] as! Bool) XCTAssertTrue(parameters.delegateParams["is_superwall"] as! Bool) XCTAssertEqual(parameters.delegateParams["application_installed_at"] as! String, "abc") XCTAssertNil(parameters.delegateParams["myCustomParam"]) @@ -188,7 +188,7 @@ final class TrackingLogicTests: XCTestCase { // Given let event = InternalSuperwallEvent.Attributes( appInstalledAtString: "abc", - customParameters: [ + audienceFilterParams: [ "myCustomParam": ["one": "two"], "otherParam": true ] @@ -199,11 +199,11 @@ final class TrackingLogicTests: XCTestCase { appSessionId: "abc" ) - XCTAssertTrue(parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(parameters.eventParams["$application_installed_at"] as! String, "abc") - XCTAssertEqual(parameters.eventParams["$event_name"] as! String, "user_attributes") - XCTAssertNil(parameters.eventParams["myCustomParam"]) - XCTAssertTrue(parameters.eventParams["otherParam"] as! Bool) + XCTAssertTrue(parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(parameters.audienceFilterParams["$application_installed_at"] as! String, "abc") + XCTAssertEqual(parameters.audienceFilterParams["$event_name"] as! String, "user_attributes") + XCTAssertNil(parameters.audienceFilterParams["myCustomParam"]) + XCTAssertTrue(parameters.audienceFilterParams["otherParam"] as! Bool) XCTAssertTrue(parameters.delegateParams["is_superwall"] as! Bool) XCTAssertEqual(parameters.delegateParams["application_installed_at"] as! String, "abc") XCTAssertNil(parameters.delegateParams["myCustomParam"]) @@ -215,7 +215,7 @@ final class TrackingLogicTests: XCTestCase { let date = Date(timeIntervalSince1970: 1650534735) let event = InternalSuperwallEvent.Attributes( appInstalledAtString: "abc", - customParameters: [ + audienceFilterParams: [ "myCustomParam": date, "otherParam": true ] @@ -226,11 +226,11 @@ final class TrackingLogicTests: XCTestCase { appSessionId: "abc" ) - XCTAssertTrue(parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(parameters.eventParams["$application_installed_at"] as! String, "abc") - XCTAssertEqual(parameters.eventParams["$event_name"] as! String, "user_attributes") - XCTAssertEqual(parameters.eventParams["myCustomParam"] as! String, date.isoString) - XCTAssertTrue(parameters.eventParams["otherParam"] as! Bool) + XCTAssertTrue(parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(parameters.audienceFilterParams["$application_installed_at"] as! String, "abc") + XCTAssertEqual(parameters.audienceFilterParams["$event_name"] as! String, "user_attributes") + XCTAssertEqual(parameters.audienceFilterParams["myCustomParam"] as! String, date.isoString) + XCTAssertTrue(parameters.audienceFilterParams["otherParam"] as! Bool) XCTAssertTrue(parameters.delegateParams["is_superwall"] as! Bool) XCTAssertEqual(parameters.delegateParams["application_installed_at"] as! String, "abc") XCTAssertEqual(parameters.delegateParams["myCustomParam"] as! String, date.isoString) @@ -242,7 +242,7 @@ final class TrackingLogicTests: XCTestCase { let url = URL(string: "https://www.google.com")! let event = InternalSuperwallEvent.Attributes( appInstalledAtString: "abc", - customParameters: [ + audienceFilterParams: [ "myCustomParam": url, "otherParam": true ] @@ -253,11 +253,11 @@ final class TrackingLogicTests: XCTestCase { appSessionId: "abc" ) - XCTAssertTrue(parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(parameters.eventParams["$application_installed_at"] as! String, "abc") - XCTAssertEqual(parameters.eventParams["$event_name"] as! String, "user_attributes") - XCTAssertEqual(parameters.eventParams["myCustomParam"] as! String, url.absoluteString) - XCTAssertTrue(parameters.eventParams["otherParam"] as! Bool) + XCTAssertTrue(parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(parameters.audienceFilterParams["$application_installed_at"] as! String, "abc") + XCTAssertEqual(parameters.audienceFilterParams["$event_name"] as! String, "user_attributes") + XCTAssertEqual(parameters.audienceFilterParams["myCustomParam"] as! String, url.absoluteString) + XCTAssertTrue(parameters.audienceFilterParams["otherParam"] as! Bool) XCTAssertTrue(parameters.delegateParams["is_superwall"] as! Bool) XCTAssertEqual(parameters.delegateParams["application_installed_at"] as! String, "abc") XCTAssertEqual(parameters.delegateParams["myCustomParam"] as! String, url.absoluteString) @@ -268,7 +268,7 @@ final class TrackingLogicTests: XCTestCase { // Given let event = InternalSuperwallEvent.Attributes( appInstalledAtString: "abc", - customParameters: [ + audienceFilterParams: [ "myCustomParam": nil, "otherParam": true ] @@ -279,11 +279,11 @@ final class TrackingLogicTests: XCTestCase { appSessionId: "abc" ) - XCTAssertTrue(parameters.eventParams["$is_standard_event"] as! Bool) - XCTAssertEqual(parameters.eventParams["$application_installed_at"] as! String, "abc") - XCTAssertEqual(parameters.eventParams["$event_name"] as! String, "user_attributes") - XCTAssertNil(parameters.eventParams["myCustomParam"]) - XCTAssertTrue(parameters.eventParams["otherParam"] as! Bool) + XCTAssertTrue(parameters.audienceFilterParams["$is_standard_event"] as! Bool) + XCTAssertEqual(parameters.audienceFilterParams["$application_installed_at"] as! String, "abc") + XCTAssertEqual(parameters.audienceFilterParams["$event_name"] as! String, "user_attributes") + XCTAssertNil(parameters.audienceFilterParams["myCustomParam"]) + XCTAssertTrue(parameters.audienceFilterParams["otherParam"] as! Bool) XCTAssertTrue(parameters.delegateParams["is_superwall"] as! Bool) XCTAssertEqual(parameters.delegateParams["application_installed_at"] as! String, "abc") XCTAssertNil(parameters.delegateParams["myCustomParam"])