aboutsummaryrefslogtreecommitdiffhomepage
path: root/Example
diff options
context:
space:
mode:
authorGravatar Ryan Wilson <wilsonryan@google.com>2018-05-21 21:49:57 -0400
committerGravatar GitHub <noreply@github.com>2018-05-21 21:49:57 -0400
commit503d2debdddd85331ce2e8556bbd50d53f3aa19d (patch)
tree609f6d8a584f91c081f5b80d383b46d3234ef813 /Example
parent11933c038df81f57c0e7d15f5a8795b74e874843 (diff)
Add conformance to data collection switch for Analytics. (#1296)
* Add conformance to data collection switch for Analytics. * Fix method documentation per PR comments.
Diffstat (limited to 'Example')
-rw-r--r--Example/Core/Tests/FIRAppTest.m38
-rw-r--r--Example/Core/Tests/FIROptionsTest.m128
2 files changed, 166 insertions, 0 deletions
diff --git a/Example/Core/Tests/FIRAppTest.m b/Example/Core/Tests/FIRAppTest.m
index abf1d38..549c1ab 100644
--- a/Example/Core/Tests/FIRAppTest.m
+++ b/Example/Core/Tests/FIRAppTest.m
@@ -14,6 +14,7 @@
#import "FIRTestCase.h"
+#import <FirebaseCore/FIRAnalyticsConfiguration+Internal.h>
#import <FirebaseCore/FIRAppInternal.h>
#import <FirebaseCore/FIROptionsInternal.h>
@@ -682,6 +683,43 @@ NSString *const kFIRTestAppName2 = @"test-app-name-2";
[[FIRApp defaultApp] sendLogsWithServiceName:@"Service" version:@"Version" error:error];
}
+#pragma mark - Analytics Flag Tests
+
+- (void)testAnalyticsSetByGlobalDataCollectionSwitch {
+ // Test that the global data collection switch triggers setting Analytics when no explicit flag is
+ // set.
+ [FIRApp configure];
+
+ id configurationMock = OCMClassMock([FIRAnalyticsConfiguration class]);
+ OCMStub([configurationMock sharedInstance]).andReturn(configurationMock);
+ OCMStub([configurationMock setAnalyticsCollectionEnabled:OCMOCK_ANY persistSetting:OCMOCK_ANY]);
+ OCMStub([self.optionsInstanceMock isAnalyticsCollectionExpicitlySet]).andReturn(NO);
+
+ // Ensure Analytics is set after the global flag is set.
+ [[FIRApp defaultApp] setAutomaticDataCollectionEnabled:YES];
+ OCMVerify([configurationMock setAnalyticsCollectionEnabled:YES persistSetting:NO]);
+
+ [[FIRApp defaultApp] setAutomaticDataCollectionEnabled:NO];
+ OCMVerify([configurationMock setAnalyticsCollectionEnabled:NO persistSetting:NO]);
+}
+
+- (void)testAnalyticsNotSetByGlobalDataCollectionSwitch {
+ // Test that the global data collection switch doesn't override an explicitly set Analytics flag.
+ [FIRApp configure];
+
+ id configurationMock = OCMClassMock([FIRAnalyticsConfiguration class]);
+ OCMStub([configurationMock sharedInstance]).andReturn(configurationMock);
+ OCMStub([configurationMock setAnalyticsCollectionEnabled:OCMOCK_ANY persistSetting:OCMOCK_ANY]);
+ OCMStub([self.optionsInstanceMock isAnalyticsCollectionExpicitlySet]).andReturn(YES);
+
+ // Reject any changes to Analytics when the data collection changes.
+ [[FIRApp defaultApp] setAutomaticDataCollectionEnabled:YES];
+ OCMReject([configurationMock setAnalyticsCollectionEnabled:OCMOCK_ANY persistSetting:OCMOCK_ANY]);
+
+ [[FIRApp defaultApp] setAutomaticDataCollectionEnabled:NO];
+ OCMReject([configurationMock setAnalyticsCollectionEnabled:OCMOCK_ANY persistSetting:OCMOCK_ANY]);
+}
+
#pragma mark - Internal Methods
- (void)testAuthGetUID {
diff --git a/Example/Core/Tests/FIROptionsTest.m b/Example/Core/Tests/FIROptionsTest.m
index 064745a..f257cbb 100644
--- a/Example/Core/Tests/FIROptionsTest.m
+++ b/Example/Core/Tests/FIROptionsTest.m
@@ -428,6 +428,134 @@ extern NSString *const kFIRLibraryVersionID;
XCTAssertEqual(mainSizeCount[3], 8);
}
+- (void)testAnalyticsCollectionGlobalSwitchEnabled {
+ // Stub the default app, and set the global switch to YES.
+ id appMock = OCMClassMock([FIRApp class]);
+ OCMStub([appMock isDefaultAppConfigured]).andReturn(YES);
+ OCMStub([appMock defaultApp]).andReturn(appMock);
+ OCMStub([appMock isAutomaticDataCollectionEnabled]).andReturn(YES);
+
+ // With no other settings, Analytics collection should default to the app's flag.
+ FIROptions *options = [[FIROptions alloc] initInternalWithOptionsDictionary:@{}];
+ XCTAssertTrue(options.isAnalyticsCollectionEnabled);
+ XCTAssertTrue(options.isMeasurementEnabled);
+
+ [appMock stopMocking];
+}
+
+- (void)testAnalyticsCollectionGlobalSwitchDisabled {
+ // Stub the default app, and set the global switch to NO.
+ id appMock = OCMClassMock([FIRApp class]);
+ OCMStub([appMock isDefaultAppConfigured]).andReturn(YES);
+ OCMStub([appMock defaultApp]).andReturn(appMock);
+ OCMStub([appMock isAutomaticDataCollectionEnabled]).andReturn(NO);
+
+ // With no other settings, Analytics collection should default to the app's flag.
+ FIROptions *options = [[FIROptions alloc] initInternalWithOptionsDictionary:@{}];
+ XCTAssertFalse(options.isAnalyticsCollectionEnabled);
+ XCTAssertFalse(options.isMeasurementEnabled);
+
+ [appMock stopMocking];
+}
+
+- (void)testAnalyticsCollectionGlobalSwitchOverrideToDisable {
+ // Stub the default app, and set the global switch to YES.
+ id appMock = OCMClassMock([FIRApp class]);
+ OCMStub([appMock isDefaultAppConfigured]).andReturn(YES);
+ OCMStub([appMock defaultApp]).andReturn(appMock);
+ OCMStub([appMock isAutomaticDataCollectionEnabled]).andReturn(YES);
+
+ // Test the three Analytics flags that override to disable Analytics collection.
+ FIROptions *collectionEnabledOptions = [[FIROptions alloc] initInternalWithOptionsDictionary:@{
+ kFIRIsAnalyticsCollectionEnabled : @NO
+ }];
+ XCTAssertFalse(collectionEnabledOptions.isAnalyticsCollectionEnabled);
+
+ FIROptions *collectionDeactivatedOptions =
+ [[FIROptions alloc] initInternalWithOptionsDictionary:@{
+ kFIRIsAnalyticsCollectionDeactivated : @YES
+ }];
+ XCTAssertFalse(collectionDeactivatedOptions.isAnalyticsCollectionEnabled);
+
+ FIROptions *measurementEnabledOptions = [[FIROptions alloc] initInternalWithOptionsDictionary:@{
+ kFIRIsMeasurementEnabled : @NO
+ }];
+ XCTAssertFalse(measurementEnabledOptions.isAnalyticsCollectionEnabled);
+}
+
+- (void)testAnalyticsCollectionGlobalSwitchOverrideToEnable {
+ // Stub the default app, and set the global switch to YES.
+ id appMock = OCMClassMock([FIRApp class]);
+ OCMStub([appMock isDefaultAppConfigured]).andReturn(YES);
+ OCMStub([appMock defaultApp]).andReturn(appMock);
+ OCMStub([appMock isAutomaticDataCollectionEnabled]).andReturn(NO);
+
+ // Test the two Analytics flags that can override and enable collection.
+ FIROptions *collectionEnabledOptions = [[FIROptions alloc] initInternalWithOptionsDictionary:@{
+ kFIRIsAnalyticsCollectionEnabled : @YES
+ }];
+ XCTAssertTrue(collectionEnabledOptions.isAnalyticsCollectionEnabled);
+
+ FIROptions *measurementEnabledOptions = [[FIROptions alloc] initInternalWithOptionsDictionary:@{
+ kFIRIsMeasurementEnabled : @YES
+ }];
+ XCTAssertTrue(measurementEnabledOptions.isAnalyticsCollectionEnabled);
+}
+
+- (void)testAnalyticsCollectionExplicitlySet {
+ NSDictionary *optionsDictionary = @{};
+ FIROptions *options = [[FIROptions alloc] initInternalWithOptionsDictionary:optionsDictionary];
+ NSDictionary *analyticsOptions = [options analyticsOptionsDictionaryWithInfoDictionary:@{}];
+ XCTAssertFalse([options isAnalyticsCollectionExpicitlySet]);
+
+ // Test deactivation flag.
+ optionsDictionary = @{ kFIRIsAnalyticsCollectionDeactivated : @YES };
+ options = [[FIROptions alloc] initInternalWithOptionsDictionary:optionsDictionary];
+ analyticsOptions = [options analyticsOptionsDictionaryWithInfoDictionary:@{}];
+ XCTAssertTrue([options isAnalyticsCollectionExpicitlySet]);
+
+ // If "deactivated" == NO, that doesn't mean it's explicitly set / enabled so it should be treated
+ // as if it's not set.
+ optionsDictionary = @{ kFIRIsAnalyticsCollectionDeactivated : @NO };
+ options = [[FIROptions alloc] initInternalWithOptionsDictionary:optionsDictionary];
+ analyticsOptions = [options analyticsOptionsDictionaryWithInfoDictionary:@{}];
+ XCTAssertFalse([options isAnalyticsCollectionExpicitlySet]);
+
+ // Test the collection enabled flag.
+ optionsDictionary = @{ kFIRIsAnalyticsCollectionEnabled : @YES };
+ options = [[FIROptions alloc] initInternalWithOptionsDictionary:optionsDictionary];
+ analyticsOptions = [options analyticsOptionsDictionaryWithInfoDictionary:@{}];
+ XCTAssertTrue([options isAnalyticsCollectionExpicitlySet]);
+
+ optionsDictionary = @{ kFIRIsAnalyticsCollectionEnabled : @NO };
+ options = [[FIROptions alloc] initInternalWithOptionsDictionary:optionsDictionary];
+ analyticsOptions = [options analyticsOptionsDictionaryWithInfoDictionary:@{}];
+ XCTAssertTrue([options isAnalyticsCollectionExpicitlySet]);
+
+ // Test the old measurement flag.
+ options = [[FIROptions alloc] initInternalWithOptionsDictionary:@{}];
+ analyticsOptions = [options analyticsOptionsDictionaryWithInfoDictionary:@{
+ kFIRIsMeasurementEnabled : @YES
+ }];
+ XCTAssertTrue([options isAnalyticsCollectionExpicitlySet]);
+
+ options = [[FIROptions alloc] initInternalWithOptionsDictionary:@{}];
+ analyticsOptions = [options analyticsOptionsDictionaryWithInfoDictionary:@{
+ kFIRIsMeasurementEnabled : @NO
+ }];
+ XCTAssertTrue([options isAnalyticsCollectionExpicitlySet]);
+
+ // For good measure, a combination of all 3 (even if they conflict).
+ optionsDictionary =
+ @{ kFIRIsAnalyticsCollectionDeactivated : @YES,
+ kFIRIsAnalyticsCollectionEnabled : @YES };
+ options = [[FIROptions alloc] initInternalWithOptionsDictionary:optionsDictionary];
+ analyticsOptions = [options analyticsOptionsDictionaryWithInfoDictionary:@{
+ kFIRIsMeasurementEnabled : @NO
+ }];
+ XCTAssertTrue([options isAnalyticsCollectionExpicitlySet]);
+}
+
- (void)testVersionFormat {
NSRegularExpression *sLibraryVersionRegex =
[NSRegularExpression regularExpressionWithPattern:@"^[0-9]{8,}$" options:0 error:NULL];