Skip to content

Commit 8332f95

Browse files
committed
Add test cases
1 parent dca0c81 commit 8332f95

File tree

2 files changed

+175
-21
lines changed

2 files changed

+175
-21
lines changed

Sources/SkipFirebaseAnalytics/SkipFirebaseAnalytics.swift

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,14 @@ public final class Analytics {
6666
instance.resetAnalyticsData()
6767
}
6868

69-
public static func appInstanceID() async -> String? {
70-
return instance.getAppInstanceId().await()
69+
public static func appInstanceID() -> String? {
70+
// Android's getAppInstanceId() returns Task<String>; block to match synchronous iOS API
71+
return com.google.android.gms.tasks.Tasks.await(instance.getAppInstanceId())
7172
}
7273

73-
public static func sessionID() async throws -> Int64 {
74+
public static func sessionID() async throws -> Int64? {
7475
let id = instance.getSessionId().await()
75-
return id as Int64
76+
return id as? Int64
7677
}
7778

7879
public static func setSessionTimeoutInterval(_ seconds: TimeInterval) {
@@ -88,30 +89,44 @@ public final class Analytics {
8889
}
8990
}
9091

91-
public enum ConsentType {
92-
case adPersonalization
93-
case adStorage
94-
case adUserData
95-
case analyticsStorage
92+
public struct ConsentType: Hashable {
93+
public let rawValue: String
94+
95+
public init(rawValue: String) {
96+
self.rawValue = rawValue
97+
}
98+
99+
public static let adPersonalization = ConsentType(rawValue: "ad_personalization")
100+
public static let adStorage = ConsentType(rawValue: "ad_storage")
101+
public static let adUserData = ConsentType(rawValue: "ad_user_data")
102+
public static let analyticsStorage = ConsentType(rawValue: "analytics_storage")
96103

97104
public var platformValue: com.google.firebase.analytics.FirebaseAnalytics.ConsentType {
98-
switch self {
99-
case .adPersonalization: return com.google.firebase.analytics.FirebaseAnalytics.ConsentType.AD_PERSONALIZATION
100-
case .adStorage: return com.google.firebase.analytics.FirebaseAnalytics.ConsentType.AD_STORAGE
101-
case .adUserData: return com.google.firebase.analytics.FirebaseAnalytics.ConsentType.AD_USER_DATA
102-
case .analyticsStorage: return com.google.firebase.analytics.FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE
105+
switch rawValue {
106+
case "ad_personalization": return com.google.firebase.analytics.FirebaseAnalytics.ConsentType.AD_PERSONALIZATION
107+
case "ad_storage": return com.google.firebase.analytics.FirebaseAnalytics.ConsentType.AD_STORAGE
108+
case "ad_user_data": return com.google.firebase.analytics.FirebaseAnalytics.ConsentType.AD_USER_DATA
109+
case "analytics_storage": return com.google.firebase.analytics.FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE
110+
default: return com.google.firebase.analytics.FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE
103111
}
104112
}
105113
}
106114

107-
public enum ConsentStatus {
108-
case granted
109-
case denied
115+
public struct ConsentStatus: Hashable {
116+
public let rawValue: String
117+
118+
public init(rawValue: String) {
119+
self.rawValue = rawValue
120+
}
121+
122+
public static let granted = ConsentStatus(rawValue: "granted")
123+
public static let denied = ConsentStatus(rawValue: "denied")
110124

111125
public var platformValue: com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus {
112-
switch self {
113-
case .granted: return com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus.GRANTED
114-
case .denied: return com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus.DENIED
126+
switch rawValue {
127+
case "granted": return com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus.GRANTED
128+
case "denied": return com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus.DENIED
129+
default: return com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus.DENIED
115130
}
116131
}
117132
}

Tests/SkipFirebaseAnalyticsTests/SkipFirebaseAnalyticsTests.swift

Lines changed: 140 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,144 @@ let logger: Logger = Logger(subsystem: "SkipFirebaseAnalyticsTests", category: "
1616
func testSkipFirebaseAnalyticsTests() async throws {
1717
Analytics.logEvent("x", parameters: ["a": [1, 2, false]])
1818
}
19-
}
2019

20+
func testLogEventWithNoParameters() {
21+
// Verify logEvent compiles with no parameters
22+
let _: (String, [String: Any]?) -> Void = Analytics.logEvent
23+
}
24+
25+
func testLogEventWithStringParameters() {
26+
let _: (String, [String: Any]?) -> Void = Analytics.logEvent
27+
// Verify parameter types compile
28+
let params: [String: Any] = [
29+
AnalyticsParameterItemName: "test_item",
30+
AnalyticsParameterPrice: 9.99,
31+
AnalyticsParameterQuantity: 1,
32+
AnalyticsParameterCurrency: "USD"
33+
]
34+
_ = params
35+
}
36+
37+
func testSetUserProperty() {
38+
let _: (String?, String) -> Void = Analytics.setUserProperty(_:forName:)
39+
}
40+
41+
func testSetUserID() {
42+
let _: (String?) -> Void = Analytics.setUserID
43+
}
44+
45+
func testSetAnalyticsCollectionEnabled() {
46+
let _: (Bool) -> Void = Analytics.setAnalyticsCollectionEnabled
47+
}
48+
49+
func testSetDefaultEventParameters() {
50+
let _: ([String: Any]?) -> Void = Analytics.setDefaultEventParameters
51+
}
52+
53+
func testResetAnalyticsData() {
54+
let _: () -> Void = Analytics.resetAnalyticsData
55+
}
56+
57+
func testAppInstanceID() {
58+
let _: () -> String? = Analytics.appInstanceID
59+
}
60+
61+
func testSessionID() {
62+
// sessionID is async throws -> Int64?
63+
let _: () async throws -> Int64? = Analytics.sessionID
64+
}
65+
66+
func testSetSessionTimeoutInterval() {
67+
let _: (TimeInterval) -> Void = Analytics.setSessionTimeoutInterval
68+
}
69+
70+
func testConsentTypes() {
71+
// Verify ConsentType static members exist and are the right type
72+
let _: ConsentType = .adPersonalization
73+
let _: ConsentType = .adStorage
74+
let _: ConsentType = .adUserData
75+
let _: ConsentType = .analyticsStorage
76+
}
77+
78+
func testConsentStatus() {
79+
// Verify ConsentStatus static members exist and are the right type
80+
let _: ConsentStatus = .granted
81+
let _: ConsentStatus = .denied
82+
}
83+
84+
func testSetConsent() {
85+
let _: ([ConsentType: ConsentStatus]) -> Void = Analytics.setConsent
86+
}
87+
88+
func testEventNameConstants() {
89+
// Verify event name constants exist and are strings
90+
let events: [String] = [
91+
AnalyticsEventAdImpression,
92+
AnalyticsEventAddPaymentInfo,
93+
AnalyticsEventAddShippingInfo,
94+
AnalyticsEventAddToCart,
95+
AnalyticsEventAddToWishlist,
96+
AnalyticsEventAppOpen,
97+
AnalyticsEventBeginCheckout,
98+
AnalyticsEventCampaignDetails,
99+
AnalyticsEventEarnVirtualCurrency,
100+
AnalyticsEventGenerateLead,
101+
AnalyticsEventJoinGroup,
102+
AnalyticsEventLevelEnd,
103+
AnalyticsEventLevelStart,
104+
AnalyticsEventLevelUp,
105+
AnalyticsEventLogin,
106+
AnalyticsEventPostScore,
107+
AnalyticsEventPurchase,
108+
AnalyticsEventRefund,
109+
AnalyticsEventRemoveFromCart,
110+
AnalyticsEventScreenView,
111+
AnalyticsEventSearch,
112+
AnalyticsEventSelectContent,
113+
AnalyticsEventSelectItem,
114+
AnalyticsEventSelectPromotion,
115+
AnalyticsEventShare,
116+
AnalyticsEventSignUp,
117+
AnalyticsEventSpendVirtualCurrency,
118+
AnalyticsEventTutorialBegin,
119+
AnalyticsEventTutorialComplete,
120+
AnalyticsEventUnlockAchievement,
121+
AnalyticsEventViewCart,
122+
AnalyticsEventViewItem,
123+
AnalyticsEventViewItemList,
124+
AnalyticsEventViewPromotion,
125+
AnalyticsEventViewSearchResults,
126+
]
127+
XCTAssertFalse(events.isEmpty)
128+
}
129+
130+
func testParameterNameConstants() {
131+
// Verify a representative set of parameter constants exist and are strings
132+
let params: [String] = [
133+
AnalyticsParameterItemName,
134+
AnalyticsParameterItemID,
135+
AnalyticsParameterPrice,
136+
AnalyticsParameterQuantity,
137+
AnalyticsParameterCurrency,
138+
AnalyticsParameterValue,
139+
AnalyticsParameterScreenName,
140+
AnalyticsParameterScreenClass,
141+
AnalyticsParameterSearchTerm,
142+
AnalyticsParameterMethod,
143+
AnalyticsParameterScore,
144+
AnalyticsParameterLevel,
145+
AnalyticsParameterContent,
146+
AnalyticsParameterContentType,
147+
AnalyticsParameterCoupon,
148+
AnalyticsParameterTransactionID,
149+
AnalyticsParameterShipping,
150+
AnalyticsParameterTax,
151+
]
152+
XCTAssertFalse(params.isEmpty)
153+
}
154+
155+
func testUserPropertyConstants() {
156+
let _: String = AnalyticsUserPropertyAllowAdPersonalizationSignals
157+
let _: String = AnalyticsUserPropertySignUpMethod
158+
}
159+
}

0 commit comments

Comments
 (0)