@react-native-firebase/analytics 26.3.3 → 27.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/RNFBAnalytics.podspec +49 -2
- package/android/src/main/java/io/invertase/firebase/analytics/UniversalFirebaseAnalyticsModule.java +17 -15
- package/android/src/reactnative/java/io/invertase/firebase/analytics/NativeRNFBTurboAnalytics.java +4 -3
- package/dist/module/index.js +26 -11
- package/dist/module/index.js.map +1 -1
- package/dist/module/version.js +1 -1
- package/dist/module/web/api.js +42 -19
- package/dist/module/web/api.js.map +1 -1
- package/dist/typescript/lib/index.d.ts +2 -2
- package/dist/typescript/lib/index.d.ts.map +1 -1
- package/dist/typescript/lib/version.d.ts +1 -1
- package/dist/typescript/lib/web/api.d.ts +4 -1
- package/dist/typescript/lib/web/api.d.ts.map +1 -1
- package/ios/RNFBAnalytics/RNFBAnalyticsConsentSettingsMapper.swift +98 -0
- package/ios/RNFBAnalytics/RNFBAnalyticsHelper.h +111 -0
- package/ios/RNFBAnalytics/RNFBAnalyticsHelper.m +338 -0
- package/ios/RNFBAnalytics/RNFBAnalyticsJavascriptParamsCleaner.swift +167 -0
- package/ios/RNFBAnalytics/RNFBAnalyticsLogTransaction.swift +2 -2
- package/ios/RNFBAnalytics/RNFBAnalyticsModule.mm +32 -251
- package/ios/RNFBAnalytics.xcodeproj/project.pbxproj +16 -2
- package/ios/RNFBAnalyticsUnitTests/HostStubs/Firebase/FIRAnalyticsHostStub.m +304 -0
- package/ios/RNFBAnalyticsUnitTests/HostStubs/Firebase/Firebase.h +71 -0
- package/ios/RNFBAnalyticsUnitTests/HostStubs/RNFBAnalytics/RNFBAnalyticsLogTransactionHostStub.h +20 -0
- package/ios/RNFBAnalyticsUnitTests/HostStubs/RNFBAnalytics/RNFBAnalyticsLogTransactionHostStub.m +43 -0
- package/ios/RNFBAnalyticsUnitTests/HostStubs/RNFBApp/RNFBSharedUtils.h +21 -0
- package/ios/RNFBAnalyticsUnitTests/HostStubs/RNFBApp/RNFBSharedUtilsHostStub.m +26 -0
- package/ios/RNFBAnalyticsUnitTests/HostStubs/React/RCTBridgeModule.h +10 -0
- package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsConsentSettingsMapperHostStubTests.m +62 -0
- package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsConsentSettingsMapperTests.swift +91 -0
- package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsHelperHostStubTests.m +542 -0
- package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsJavascriptParamsCleanerHostStubTests.m +59 -0
- package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsJavascriptParamsCleanerTests.swift +205 -0
- package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsNullSentinelDecodeTests.m +111 -0
- package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsUnitTests.xcodeproj/project.pbxproj +302 -0
- package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsUnitTests.xcodeproj/xcshareddata/xcschemes/RNFBAnalyticsUnitTests.xcscheme +69 -0
- package/lib/index.ts +38 -10
- package/lib/version.ts +1 -1
- package/lib/web/api.ts +51 -19
- package/package.json +5 -4
|
@@ -0,0 +1,542 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2016-present Invertase Limited & Contributors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this library except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#import <XCTest/XCTest.h>
|
|
18
|
+
|
|
19
|
+
#import <Firebase/Firebase.h>
|
|
20
|
+
#import "RNFBAnalytics/RNFBAnalyticsLogTransactionHostStub.h"
|
|
21
|
+
#import "RNFBAnalyticsHelper.h"
|
|
22
|
+
|
|
23
|
+
@interface RNFBAnalyticsHelperHostStubTests : XCTestCase
|
|
24
|
+
@end
|
|
25
|
+
|
|
26
|
+
@implementation RNFBAnalyticsHelperHostStubTests
|
|
27
|
+
|
|
28
|
+
- (void)setUp {
|
|
29
|
+
[super setUp];
|
|
30
|
+
[FIRAnalytics resetTestState];
|
|
31
|
+
[RNFBAnalyticsLogTransaction resetTestState];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
- (void)tearDown {
|
|
35
|
+
[FIRAnalytics resetTestState];
|
|
36
|
+
[RNFBAnalyticsLogTransaction resetTestState];
|
|
37
|
+
[super tearDown];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
- (void)testLogEvent_cleansJavascriptParamsBeforeForwarding {
|
|
41
|
+
__block id resolved = @"unset";
|
|
42
|
+
[RNFBAnalyticsHelper logEvent:@"purchase"
|
|
43
|
+
params:@{@"quantity" : @"2", @"success" : @"true"}
|
|
44
|
+
resolve:^(id result) {
|
|
45
|
+
resolved = result;
|
|
46
|
+
}
|
|
47
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
48
|
+
(void)code;
|
|
49
|
+
(void)message;
|
|
50
|
+
(void)error;
|
|
51
|
+
XCTFail(@"unexpected reject");
|
|
52
|
+
}];
|
|
53
|
+
|
|
54
|
+
XCTAssertEqualObjects(resolved, [NSNull null]);
|
|
55
|
+
XCTAssertEqualObjects(FIRAnalytics.lastLogEventName, @"purchase");
|
|
56
|
+
XCTAssertEqualObjects(FIRAnalytics.lastLogEventParameters[@"quantity"], @2);
|
|
57
|
+
XCTAssertEqualObjects(FIRAnalytics.lastLogEventParameters[@"success"], @1);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
- (void)testSetUserId_convertsNSNullToNil {
|
|
61
|
+
[RNFBAnalyticsHelper setUserId:(NSString *)[NSNull null]
|
|
62
|
+
resolve:^(id result) {
|
|
63
|
+
(void)result;
|
|
64
|
+
}
|
|
65
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
66
|
+
(void)code;
|
|
67
|
+
(void)message;
|
|
68
|
+
(void)error;
|
|
69
|
+
XCTFail(@"unexpected reject");
|
|
70
|
+
}];
|
|
71
|
+
|
|
72
|
+
XCTAssertNil(FIRAnalytics.userIDValue);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
- (void)testSetUserProperties_appliesEachEntryWithNSNullCoercion {
|
|
76
|
+
[RNFBAnalyticsHelper setUserProperties:@{@"a" : @"1", @"b" : [NSNull null]}
|
|
77
|
+
resolve:^(id result) {
|
|
78
|
+
(void)result;
|
|
79
|
+
}
|
|
80
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
81
|
+
(void)code;
|
|
82
|
+
(void)message;
|
|
83
|
+
(void)error;
|
|
84
|
+
XCTFail(@"unexpected reject");
|
|
85
|
+
}];
|
|
86
|
+
|
|
87
|
+
XCTAssertEqualObjects(FIRAnalytics.userProperties[@"a"], @"1");
|
|
88
|
+
XCTAssertNil(FIRAnalytics.userProperties[@"b"]);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
- (void)testSetSessionTimeoutDuration_convertsMillisecondsToSeconds {
|
|
92
|
+
[RNFBAnalyticsHelper setSessionTimeoutDuration:1500
|
|
93
|
+
resolve:^(id result) {
|
|
94
|
+
(void)result;
|
|
95
|
+
}
|
|
96
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
97
|
+
(void)code;
|
|
98
|
+
(void)message;
|
|
99
|
+
(void)error;
|
|
100
|
+
XCTFail(@"unexpected reject");
|
|
101
|
+
}];
|
|
102
|
+
|
|
103
|
+
XCTAssertEqualWithAccuracy(FIRAnalytics.sessionTimeoutIntervalValue, 1.5, 0.0001);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
- (void)testGetAppInstanceId_forwardsStubValue {
|
|
107
|
+
FIRAnalytics.appInstanceIDValue = @"instance-42";
|
|
108
|
+
__block id resolved = @"unset";
|
|
109
|
+
[RNFBAnalyticsHelper
|
|
110
|
+
getAppInstanceId:^(id result) {
|
|
111
|
+
resolved = result;
|
|
112
|
+
}
|
|
113
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
114
|
+
(void)code;
|
|
115
|
+
(void)message;
|
|
116
|
+
(void)error;
|
|
117
|
+
XCTFail(@"unexpected reject");
|
|
118
|
+
}];
|
|
119
|
+
|
|
120
|
+
XCTAssertEqualObjects(resolved, @"instance-42");
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
- (void)testGetSessionId_success_resolvesNumber {
|
|
124
|
+
FIRAnalytics.sessionIDCompletionValue = 99;
|
|
125
|
+
__block id resolved = @"unset";
|
|
126
|
+
XCTestExpectation *expectation = [self expectationWithDescription:@"session id"];
|
|
127
|
+
|
|
128
|
+
[RNFBAnalyticsHelper
|
|
129
|
+
getSessionId:^(id result) {
|
|
130
|
+
resolved = result;
|
|
131
|
+
[expectation fulfill];
|
|
132
|
+
}
|
|
133
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
134
|
+
(void)code;
|
|
135
|
+
(void)message;
|
|
136
|
+
(void)error;
|
|
137
|
+
XCTFail(@"unexpected reject");
|
|
138
|
+
}];
|
|
139
|
+
|
|
140
|
+
[self waitForExpectationsWithTimeout:1.0 handler:nil];
|
|
141
|
+
XCTAssertEqualObjects(resolved, @99);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
- (void)testGetSessionId_zeroWithoutError_resolvesNull {
|
|
145
|
+
FIRAnalytics.sessionIDCompletionValue = 0;
|
|
146
|
+
__block id resolved = @"unset";
|
|
147
|
+
XCTestExpectation *expectation = [self expectationWithDescription:@"session id zero"];
|
|
148
|
+
|
|
149
|
+
[RNFBAnalyticsHelper
|
|
150
|
+
getSessionId:^(id result) {
|
|
151
|
+
resolved = result;
|
|
152
|
+
[expectation fulfill];
|
|
153
|
+
}
|
|
154
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
155
|
+
(void)code;
|
|
156
|
+
(void)message;
|
|
157
|
+
(void)error;
|
|
158
|
+
XCTFail(@"unexpected reject");
|
|
159
|
+
}];
|
|
160
|
+
|
|
161
|
+
[self waitForExpectationsWithTimeout:1.0 handler:nil];
|
|
162
|
+
XCTAssertEqualObjects(resolved, [NSNull null]);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
- (void)testGetSessionId_error_resolvesNull {
|
|
166
|
+
FIRAnalytics.sessionIDCompletionError =
|
|
167
|
+
[NSError errorWithDomain:@"test" code:1 userInfo:@{NSLocalizedDescriptionKey : @"boom"}];
|
|
168
|
+
__block id resolved = @"unset";
|
|
169
|
+
XCTestExpectation *expectation = [self expectationWithDescription:@"session id error"];
|
|
170
|
+
|
|
171
|
+
[RNFBAnalyticsHelper
|
|
172
|
+
getSessionId:^(id result) {
|
|
173
|
+
resolved = result;
|
|
174
|
+
[expectation fulfill];
|
|
175
|
+
}
|
|
176
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
177
|
+
(void)code;
|
|
178
|
+
(void)message;
|
|
179
|
+
(void)error;
|
|
180
|
+
XCTFail(@"unexpected reject");
|
|
181
|
+
}];
|
|
182
|
+
|
|
183
|
+
[self waitForExpectationsWithTimeout:1.0 handler:nil];
|
|
184
|
+
XCTAssertEqualObjects(resolved, [NSNull null]);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
- (void)testHashedEmail_invalidHex_rejects {
|
|
188
|
+
__block NSString *rejectCode = nil;
|
|
189
|
+
__block NSString *rejectMessage = nil;
|
|
190
|
+
__block BOOL resolved = NO;
|
|
191
|
+
|
|
192
|
+
[RNFBAnalyticsHelper initiateOnDeviceConversionMeasurementWithHashedEmailAddress:@"deadbeef"
|
|
193
|
+
resolve:^(id result) {
|
|
194
|
+
(void)result;
|
|
195
|
+
resolved = YES;
|
|
196
|
+
}
|
|
197
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
198
|
+
(void)error;
|
|
199
|
+
rejectCode = code;
|
|
200
|
+
rejectMessage = message;
|
|
201
|
+
}];
|
|
202
|
+
|
|
203
|
+
XCTAssertFalse(resolved);
|
|
204
|
+
XCTAssertEqualObjects(rejectCode, @"firebase_analytics");
|
|
205
|
+
XCTAssertEqualObjects(rejectMessage, @"Expected a 64-character SHA-256 hex string");
|
|
206
|
+
XCTAssertNil(FIRAnalytics.lastHashedEmail);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
- (void)testHashedEmail_validHex_forwardsData {
|
|
210
|
+
NSString *hex = [@"" stringByPaddingToLength:64 withString:@"ab" startingAtIndex:0];
|
|
211
|
+
__block BOOL resolved = NO;
|
|
212
|
+
|
|
213
|
+
[RNFBAnalyticsHelper initiateOnDeviceConversionMeasurementWithHashedEmailAddress:hex
|
|
214
|
+
resolve:^(id result) {
|
|
215
|
+
(void)result;
|
|
216
|
+
resolved = YES;
|
|
217
|
+
}
|
|
218
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
219
|
+
(void)code;
|
|
220
|
+
(void)message;
|
|
221
|
+
(void)error;
|
|
222
|
+
XCTFail(@"unexpected reject");
|
|
223
|
+
}];
|
|
224
|
+
|
|
225
|
+
XCTAssertTrue(resolved);
|
|
226
|
+
XCTAssertEqual(FIRAnalytics.lastHashedEmail.length, 32u);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
- (void)testHashedPhone_invalidHex_rejects {
|
|
230
|
+
__block NSString *rejectCode = nil;
|
|
231
|
+
__block BOOL resolved = NO;
|
|
232
|
+
|
|
233
|
+
[RNFBAnalyticsHelper initiateOnDeviceConversionMeasurementWithHashedPhoneNumber:@"short"
|
|
234
|
+
resolve:^(id result) {
|
|
235
|
+
(void)result;
|
|
236
|
+
resolved = YES;
|
|
237
|
+
}
|
|
238
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
239
|
+
(void)message;
|
|
240
|
+
(void)error;
|
|
241
|
+
rejectCode = code;
|
|
242
|
+
}];
|
|
243
|
+
|
|
244
|
+
XCTAssertFalse(resolved);
|
|
245
|
+
XCTAssertEqualObjects(rejectCode, @"firebase_analytics");
|
|
246
|
+
XCTAssertNil(FIRAnalytics.lastHashedPhone);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
- (void)testSetConsent_mapsSettingsAndForwards {
|
|
250
|
+
[RNFBAnalyticsHelper setConsent:@{@"analytics_storage" : @YES, @"ad_storage" : @NO}
|
|
251
|
+
resolve:^(id result) {
|
|
252
|
+
(void)result;
|
|
253
|
+
}
|
|
254
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
255
|
+
(void)code;
|
|
256
|
+
(void)message;
|
|
257
|
+
(void)error;
|
|
258
|
+
XCTFail(@"unexpected reject");
|
|
259
|
+
}];
|
|
260
|
+
|
|
261
|
+
XCTAssertEqualObjects(FIRAnalytics.lastConsent[@"analytics_storage"], @"granted");
|
|
262
|
+
XCTAssertEqualObjects(FIRAnalytics.lastConsent[@"ad_storage"], @"denied");
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
- (void)testLogTransaction_forwardsToSwiftFacade {
|
|
266
|
+
[RNFBAnalyticsHelper logTransaction:@"12345"
|
|
267
|
+
resolve:^(id result) {
|
|
268
|
+
(void)result;
|
|
269
|
+
}
|
|
270
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
271
|
+
(void)code;
|
|
272
|
+
(void)message;
|
|
273
|
+
(void)error;
|
|
274
|
+
XCTFail(@"unexpected reject");
|
|
275
|
+
}];
|
|
276
|
+
|
|
277
|
+
XCTAssertEqual(RNFBAnalyticsLogTransaction.logCallCount, 1u);
|
|
278
|
+
XCTAssertEqualObjects(RNFBAnalyticsLogTransaction.lastTransactionId, @"12345");
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
- (void)testSetAnalyticsCollectionEnabled_andReset {
|
|
282
|
+
[RNFBAnalyticsHelper setAnalyticsCollectionEnabled:YES
|
|
283
|
+
resolve:^(id result) {
|
|
284
|
+
(void)result;
|
|
285
|
+
}
|
|
286
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
287
|
+
(void)code;
|
|
288
|
+
(void)message;
|
|
289
|
+
(void)error;
|
|
290
|
+
XCTFail(@"unexpected reject");
|
|
291
|
+
}];
|
|
292
|
+
[RNFBAnalyticsHelper
|
|
293
|
+
resetAnalyticsData:^(id result) {
|
|
294
|
+
(void)result;
|
|
295
|
+
}
|
|
296
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
297
|
+
(void)code;
|
|
298
|
+
(void)message;
|
|
299
|
+
(void)error;
|
|
300
|
+
XCTFail(@"unexpected reject");
|
|
301
|
+
}];
|
|
302
|
+
|
|
303
|
+
XCTAssertTrue(FIRAnalytics.analyticsCollectionEnabledValue);
|
|
304
|
+
XCTAssertEqual(FIRAnalytics.resetAnalyticsDataCallCount, 1u);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
- (void)testSetUserProperty_forwardsValue {
|
|
308
|
+
[RNFBAnalyticsHelper setUserProperty:@"tier"
|
|
309
|
+
value:@"gold"
|
|
310
|
+
resolve:^(id result) {
|
|
311
|
+
(void)result;
|
|
312
|
+
}
|
|
313
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
314
|
+
(void)code;
|
|
315
|
+
(void)message;
|
|
316
|
+
(void)error;
|
|
317
|
+
XCTFail(@"unexpected reject");
|
|
318
|
+
}];
|
|
319
|
+
|
|
320
|
+
XCTAssertEqualObjects(FIRAnalytics.userProperties[@"tier"], @"gold");
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
- (void)testSetDefaultEventParameters_cleansBeforeForwarding {
|
|
324
|
+
[RNFBAnalyticsHelper setDefaultEventParameters:@{@"quantity" : @"3"}
|
|
325
|
+
resolve:^(id result) {
|
|
326
|
+
(void)result;
|
|
327
|
+
}
|
|
328
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
329
|
+
(void)code;
|
|
330
|
+
(void)message;
|
|
331
|
+
(void)error;
|
|
332
|
+
XCTFail(@"unexpected reject");
|
|
333
|
+
}];
|
|
334
|
+
|
|
335
|
+
XCTAssertEqualObjects(FIRAnalytics.lastDefaultEventParameters[@"quantity"], @3);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
- (void)testConversionEmailAndPhone_forwardPlainValues {
|
|
339
|
+
[RNFBAnalyticsHelper initiateOnDeviceConversionMeasurementWithEmailAddress:@"a@b.c"
|
|
340
|
+
resolve:^(id result) {
|
|
341
|
+
(void)result;
|
|
342
|
+
}
|
|
343
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
344
|
+
(void)code;
|
|
345
|
+
(void)message;
|
|
346
|
+
(void)error;
|
|
347
|
+
XCTFail(@"unexpected reject");
|
|
348
|
+
}];
|
|
349
|
+
[RNFBAnalyticsHelper initiateOnDeviceConversionMeasurementWithPhoneNumber:@"+15551212"
|
|
350
|
+
resolve:^(id result) {
|
|
351
|
+
(void)result;
|
|
352
|
+
}
|
|
353
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
354
|
+
(void)code;
|
|
355
|
+
(void)message;
|
|
356
|
+
(void)error;
|
|
357
|
+
XCTFail(@"unexpected reject");
|
|
358
|
+
}];
|
|
359
|
+
|
|
360
|
+
XCTAssertEqualObjects(FIRAnalytics.lastConversionEmail, @"a@b.c");
|
|
361
|
+
XCTAssertEqualObjects(FIRAnalytics.lastConversionPhone, @"+15551212");
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
- (void)testHashedPhone_validHex_forwardsData {
|
|
365
|
+
NSString *hex = [@"" stringByPaddingToLength:64 withString:@"cd" startingAtIndex:0];
|
|
366
|
+
[RNFBAnalyticsHelper initiateOnDeviceConversionMeasurementWithHashedPhoneNumber:hex
|
|
367
|
+
resolve:^(id result) {
|
|
368
|
+
(void)result;
|
|
369
|
+
}
|
|
370
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
371
|
+
(void)code;
|
|
372
|
+
(void)message;
|
|
373
|
+
(void)error;
|
|
374
|
+
XCTFail(@"unexpected reject");
|
|
375
|
+
}];
|
|
376
|
+
|
|
377
|
+
XCTAssertEqual(FIRAnalytics.lastHashedPhone.length, 32u);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
- (void)testLogEvent_sdkException_rejects {
|
|
381
|
+
FIRAnalytics.shouldThrowOnNextCall = YES;
|
|
382
|
+
__block NSString *rejectCode = nil;
|
|
383
|
+
__block NSString *rejectMessage = nil;
|
|
384
|
+
__block BOOL resolved = NO;
|
|
385
|
+
|
|
386
|
+
[RNFBAnalyticsHelper logEvent:@"x"
|
|
387
|
+
params:@{}
|
|
388
|
+
resolve:^(id result) {
|
|
389
|
+
(void)result;
|
|
390
|
+
resolved = YES;
|
|
391
|
+
}
|
|
392
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
393
|
+
(void)error;
|
|
394
|
+
rejectCode = code;
|
|
395
|
+
rejectMessage = message;
|
|
396
|
+
}];
|
|
397
|
+
|
|
398
|
+
XCTAssertFalse(resolved);
|
|
399
|
+
XCTAssertEqualObjects(rejectCode, @"unknown");
|
|
400
|
+
XCTAssertEqualObjects(rejectMessage, @"stub throw");
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
- (void)testSetConsent_sdkException_rejects {
|
|
404
|
+
FIRAnalytics.shouldThrowOnNextCall = YES;
|
|
405
|
+
__block NSString *rejectMessage = nil;
|
|
406
|
+
|
|
407
|
+
[RNFBAnalyticsHelper setConsent:@{@"analytics_storage" : @YES}
|
|
408
|
+
resolve:^(id result) {
|
|
409
|
+
(void)result;
|
|
410
|
+
XCTFail(@"unexpected resolve");
|
|
411
|
+
}
|
|
412
|
+
reject:^(NSString *code, NSString *message, NSError *error) {
|
|
413
|
+
(void)code;
|
|
414
|
+
(void)error;
|
|
415
|
+
rejectMessage = message;
|
|
416
|
+
}];
|
|
417
|
+
|
|
418
|
+
XCTAssertEqualObjects(rejectMessage, @"stub throw");
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
- (void)testRemainingSdkExceptionPaths_reject {
|
|
422
|
+
NSArray<void (^)(void)> *calls = @[
|
|
423
|
+
^{
|
|
424
|
+
[RNFBAnalyticsHelper setUserId:@"u"
|
|
425
|
+
resolve:^(id r) {
|
|
426
|
+
(void)r;
|
|
427
|
+
XCTFail(@"resolve");
|
|
428
|
+
}
|
|
429
|
+
reject:^(NSString *c, NSString *m, NSError *e) {
|
|
430
|
+
(void)c;
|
|
431
|
+
(void)e;
|
|
432
|
+
XCTAssertEqualObjects(m, @"stub throw");
|
|
433
|
+
}];
|
|
434
|
+
},
|
|
435
|
+
^{
|
|
436
|
+
[RNFBAnalyticsHelper setUserProperty:@"k"
|
|
437
|
+
value:@"v"
|
|
438
|
+
resolve:^(id r) {
|
|
439
|
+
(void)r;
|
|
440
|
+
XCTFail(@"resolve");
|
|
441
|
+
}
|
|
442
|
+
reject:^(NSString *c, NSString *m, NSError *e) {
|
|
443
|
+
(void)c;
|
|
444
|
+
(void)e;
|
|
445
|
+
XCTAssertEqualObjects(m, @"stub throw");
|
|
446
|
+
}];
|
|
447
|
+
},
|
|
448
|
+
^{
|
|
449
|
+
[RNFBAnalyticsHelper setUserProperties:@{@"k" : @"v"}
|
|
450
|
+
resolve:^(id r) {
|
|
451
|
+
(void)r;
|
|
452
|
+
XCTFail(@"resolve");
|
|
453
|
+
}
|
|
454
|
+
reject:^(NSString *c, NSString *m, NSError *e) {
|
|
455
|
+
(void)c;
|
|
456
|
+
(void)e;
|
|
457
|
+
XCTAssertEqualObjects(m, @"stub throw");
|
|
458
|
+
}];
|
|
459
|
+
},
|
|
460
|
+
^{
|
|
461
|
+
[RNFBAnalyticsHelper
|
|
462
|
+
resetAnalyticsData:^(id r) {
|
|
463
|
+
(void)r;
|
|
464
|
+
XCTFail(@"resolve");
|
|
465
|
+
}
|
|
466
|
+
reject:^(NSString *c, NSString *m, NSError *e) {
|
|
467
|
+
(void)c;
|
|
468
|
+
(void)e;
|
|
469
|
+
XCTAssertEqualObjects(m, @"stub throw");
|
|
470
|
+
}];
|
|
471
|
+
},
|
|
472
|
+
^{
|
|
473
|
+
[RNFBAnalyticsHelper setDefaultEventParameters:@{}
|
|
474
|
+
resolve:^(id r) {
|
|
475
|
+
(void)r;
|
|
476
|
+
XCTFail(@"resolve");
|
|
477
|
+
}
|
|
478
|
+
reject:^(NSString *c, NSString *m, NSError *e) {
|
|
479
|
+
(void)c;
|
|
480
|
+
(void)e;
|
|
481
|
+
XCTAssertEqualObjects(m, @"stub throw");
|
|
482
|
+
}];
|
|
483
|
+
},
|
|
484
|
+
^{
|
|
485
|
+
[RNFBAnalyticsHelper initiateOnDeviceConversionMeasurementWithEmailAddress:@"a@b.c"
|
|
486
|
+
resolve:^(id r) {
|
|
487
|
+
(void)r;
|
|
488
|
+
XCTFail(@"resolve");
|
|
489
|
+
}
|
|
490
|
+
reject:^(NSString *c, NSString *m, NSError *e) {
|
|
491
|
+
(void)c;
|
|
492
|
+
(void)e;
|
|
493
|
+
XCTAssertEqualObjects(m, @"stub throw");
|
|
494
|
+
}];
|
|
495
|
+
},
|
|
496
|
+
^{
|
|
497
|
+
[RNFBAnalyticsHelper initiateOnDeviceConversionMeasurementWithPhoneNumber:@"+1"
|
|
498
|
+
resolve:^(id r) {
|
|
499
|
+
(void)r;
|
|
500
|
+
XCTFail(@"resolve");
|
|
501
|
+
}
|
|
502
|
+
reject:^(NSString *c, NSString *m, NSError *e) {
|
|
503
|
+
(void)c;
|
|
504
|
+
(void)e;
|
|
505
|
+
XCTAssertEqualObjects(m, @"stub throw");
|
|
506
|
+
}];
|
|
507
|
+
},
|
|
508
|
+
^{
|
|
509
|
+
NSString *hex = [@"" stringByPaddingToLength:64 withString:@"ab" startingAtIndex:0];
|
|
510
|
+
[RNFBAnalyticsHelper initiateOnDeviceConversionMeasurementWithHashedEmailAddress:hex
|
|
511
|
+
resolve:^(id r) {
|
|
512
|
+
(void)r;
|
|
513
|
+
XCTFail(@"resolve");
|
|
514
|
+
}
|
|
515
|
+
reject:^(NSString *c, NSString *m, NSError *e) {
|
|
516
|
+
(void)c;
|
|
517
|
+
(void)e;
|
|
518
|
+
XCTAssertEqualObjects(m, @"stub throw");
|
|
519
|
+
}];
|
|
520
|
+
},
|
|
521
|
+
^{
|
|
522
|
+
NSString *hex = [@"" stringByPaddingToLength:64 withString:@"ab" startingAtIndex:0];
|
|
523
|
+
[RNFBAnalyticsHelper initiateOnDeviceConversionMeasurementWithHashedPhoneNumber:hex
|
|
524
|
+
resolve:^(id r) {
|
|
525
|
+
(void)r;
|
|
526
|
+
XCTFail(@"resolve");
|
|
527
|
+
}
|
|
528
|
+
reject:^(NSString *c, NSString *m, NSError *e) {
|
|
529
|
+
(void)c;
|
|
530
|
+
(void)e;
|
|
531
|
+
XCTAssertEqualObjects(m, @"stub throw");
|
|
532
|
+
}];
|
|
533
|
+
},
|
|
534
|
+
];
|
|
535
|
+
|
|
536
|
+
for (void (^call)(void) in calls) {
|
|
537
|
+
FIRAnalytics.shouldThrowOnNextCall = YES;
|
|
538
|
+
call();
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
@end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2016-present Invertase Limited & Contributors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this library except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#import <XCTest/XCTest.h>
|
|
18
|
+
|
|
19
|
+
#import <Firebase/Firebase.h>
|
|
20
|
+
|
|
21
|
+
#if __has_include("RNFBAnalyticsJavascriptParamsCleaner-Swift.inc")
|
|
22
|
+
#import "RNFBAnalyticsJavascriptParamsCleaner-Swift.inc"
|
|
23
|
+
#elif __has_include("RNFBAnalyticsUnitTests-Swift.h")
|
|
24
|
+
#import "RNFBAnalyticsUnitTests-Swift.h"
|
|
25
|
+
#else
|
|
26
|
+
#error "RNFBAnalyticsJavascriptParamsCleaner Swift interface not found"
|
|
27
|
+
#endif
|
|
28
|
+
|
|
29
|
+
@interface RNFBAnalyticsJavascriptParamsCleanerHostStubTests : XCTestCase
|
|
30
|
+
@end
|
|
31
|
+
|
|
32
|
+
@implementation RNFBAnalyticsJavascriptParamsCleanerHostStubTests
|
|
33
|
+
|
|
34
|
+
- (void)testLongNumericKeys_matchHostStubFirebaseConstants {
|
|
35
|
+
NSArray<NSString *> *expected = @[
|
|
36
|
+
kFIRParameterQuantity,
|
|
37
|
+
kFIRParameterIndex,
|
|
38
|
+
kFIRParameterLevel,
|
|
39
|
+
kFIRParameterNumberOfNights,
|
|
40
|
+
kFIRParameterNumberOfPassengers,
|
|
41
|
+
kFIRParameterNumberOfRooms,
|
|
42
|
+
kFIRParameterScore,
|
|
43
|
+
];
|
|
44
|
+
XCTAssertEqualObjects(RNFBAnalyticsJavascriptParamsCleaner.longNumericParameterKeys, expected);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
- (void)testCleanJavascriptParams_usesHostStubItemsSuccessExtendSessionKeys {
|
|
48
|
+
NSDictionary *cleaned = [RNFBAnalyticsJavascriptParamsCleaner cleanJavascriptParams:@{
|
|
49
|
+
kFIRParameterItems : @[ @{kFIRParameterQuantity : @2.7} ],
|
|
50
|
+
kFIRParameterSuccess : @"yes",
|
|
51
|
+
kFIRParameterExtendSession : @1,
|
|
52
|
+
}];
|
|
53
|
+
XCTAssertEqualObjects(cleaned[kFIRParameterSuccess], @1);
|
|
54
|
+
XCTAssertEqualObjects(cleaned[kFIRParameterExtendSession], @YES);
|
|
55
|
+
NSArray *items = cleaned[kFIRParameterItems];
|
|
56
|
+
XCTAssertEqualObjects(items[0][kFIRParameterQuantity], @2);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@end
|