FIRDLScionLoggingTest.m 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. /*
  2. * Copyright 2018 Google
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file 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. #import <XCTest/XCTest.h>
  17. #import <OCMock/OCMock.h>
  18. #import "FirebaseDynamicLinks/Sources/FIRDLScionLogging.h"
  19. static const NSTimeInterval kAsyncTestTimout = 0.5;
  20. typedef void (^FakeAnalyticsLogEventWithOriginNameParametersHandler)(NSString *origin,
  21. NSString *name,
  22. NSDictionary *parameters);
  23. @interface FakeAnalytics : NSObject <FIRAnalyticsInterop>
  24. - (instancetype)initWithHandler:(FakeAnalyticsLogEventWithOriginNameParametersHandler)handler;
  25. @end
  26. @implementation FakeAnalytics
  27. static FakeAnalyticsLogEventWithOriginNameParametersHandler _handler;
  28. - (instancetype)initWithHandler:(FakeAnalyticsLogEventWithOriginNameParametersHandler)handler {
  29. self = [super init];
  30. if (self) {
  31. _handler = handler;
  32. }
  33. return self;
  34. }
  35. - (void)logEventWithOrigin:(nonnull NSString *)origin
  36. name:(nonnull NSString *)name
  37. parameters:(nullable NSDictionary<NSString *, id> *)parameters {
  38. if (_handler) {
  39. _handler(origin, name, parameters);
  40. }
  41. }
  42. // Stubs
  43. - (void)clearConditionalUserProperty:(nonnull NSString *)userPropertyName
  44. clearEventName:(nonnull NSString *)clearEventName
  45. clearEventParameters:(nonnull NSDictionary *)clearEventParameters {
  46. }
  47. - (NSInteger)maxUserProperties:(nonnull NSString *)origin {
  48. return -1;
  49. }
  50. - (void)setUserPropertyWithOrigin:(nonnull NSString *)origin
  51. name:(nonnull NSString *)name
  52. value:(nonnull id)value {
  53. }
  54. - (void)checkLastNotificationForOrigin:(nonnull NSString *)origin
  55. queue:(nonnull dispatch_queue_t)queue
  56. callback:(nonnull void (^)(NSString *_Nullable))
  57. currentLastNotificationProperty {
  58. }
  59. - (void)registerAnalyticsListener:(nonnull id<FIRAnalyticsInteropListener>)listener
  60. withOrigin:(nonnull NSString *)origin {
  61. }
  62. - (void)unregisterAnalyticsListenerWithOrigin:(nonnull NSString *)origin {
  63. }
  64. - (void)clearConditionalUserProperty:(nonnull NSString *)userPropertyName
  65. forOrigin:(nonnull NSString *)origin
  66. clearEventName:(nonnull NSString *)clearEventName
  67. clearEventParameters:
  68. (nonnull NSDictionary<NSString *, NSString *> *)clearEventParameters {
  69. }
  70. - (nonnull NSArray<NSDictionary<NSString *, NSString *> *> *)
  71. conditionalUserProperties:(nonnull NSString *)origin
  72. propertyNamePrefix:(nonnull NSString *)propertyNamePrefix {
  73. return nil;
  74. }
  75. - (void)setConditionalUserProperty:(nonnull NSDictionary<NSString *, id> *)conditionalUserProperty {
  76. }
  77. - (void)getUserPropertiesWithCallback:(nonnull FIRAInteropUserPropertiesCallback)callback {
  78. }
  79. @end
  80. @interface FIRDLScionLoggingTest : XCTestCase
  81. @end
  82. @implementation FIRDLScionLoggingTest
  83. - (void)testGINLogEventToScionCallsLogMethodWithFirstOpen {
  84. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  85. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  86. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *parameters) {
  87. [expectation fulfill];
  88. }];
  89. FIRDLLogEventToScion(FIRDLLogEventFirstOpen, nil, nil, nil, analytics);
  90. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  91. }
  92. - (void)testGINLogEventToScionContainsCorrectNameWithFirstOpen {
  93. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  94. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  95. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *parameters) {
  96. XCTAssertEqualObjects(name, @"dynamic_link_first_open", @"scion name param was incorrect");
  97. [expectation fulfill];
  98. }];
  99. FIRDLLogEventToScion(FIRDLLogEventFirstOpen, nil, nil, nil, analytics);
  100. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  101. }
  102. - (void)testGINLogEventToScionCallsLogMethodWithAppOpen {
  103. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  104. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  105. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *parameters) {
  106. [expectation fulfill];
  107. }];
  108. FIRDLLogEventToScion(FIRDLLogEventAppOpen, nil, nil, nil, analytics);
  109. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  110. }
  111. - (void)testGINLogEventToScionContainsCorrectNameWithAppOpen {
  112. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  113. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  114. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *parameters) {
  115. XCTAssertEqualObjects(name, @"dynamic_link_app_open", @"scion name param was incorrect");
  116. [expectation fulfill];
  117. }];
  118. FIRDLLogEventToScion(FIRDLLogEventAppOpen, nil, nil, nil, analytics);
  119. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  120. }
  121. - (void)testGINLogEventToScionLogsParametersCorrectly {
  122. NSString *source = @"9-2nkg";
  123. NSString *medium = @"fjg0";
  124. NSString *campaign = @"gjoo3u5";
  125. NSString *sourceKey = @"source";
  126. NSString *mediumKey = @"medium";
  127. NSString *campaignKey = @"campaign";
  128. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  129. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  130. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *params) {
  131. XCTAssertEqualObjects(params[sourceKey], source, @"scion logger has incorrect source.");
  132. XCTAssertEqualObjects(params[mediumKey], medium, @"scion logger has incorrect medium.");
  133. XCTAssertEqualObjects(params[campaignKey], campaign,
  134. @"scion logger has incorrect campaign.");
  135. [expectation fulfill];
  136. }];
  137. FIRDLLogEventToScion(FIRDLLogEventAppOpen, source, medium, campaign, analytics);
  138. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  139. }
  140. @end