FIRDLScionLoggingTest.m 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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 "DynamicLinks/FIRDLScionLogging.h"
  18. #import "OCMock.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. @end
  78. @interface FIRDLScionLoggingTest : XCTestCase
  79. @end
  80. @implementation FIRDLScionLoggingTest
  81. - (void)testGINLogEventToScionCallsLogMethodWithFirstOpen {
  82. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  83. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  84. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *parameters) {
  85. [expectation fulfill];
  86. }];
  87. FIRDLLogEventToScion(FIRDLLogEventFirstOpen, nil, nil, nil, analytics);
  88. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  89. }
  90. - (void)testGINLogEventToScionContainsCorrectNameWithFirstOpen {
  91. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  92. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  93. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *parameters) {
  94. XCTAssertEqualObjects(name, @"dynamic_link_first_open", @"scion name param was incorrect");
  95. [expectation fulfill];
  96. }];
  97. FIRDLLogEventToScion(FIRDLLogEventFirstOpen, nil, nil, nil, analytics);
  98. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  99. }
  100. - (void)testGINLogEventToScionCallsLogMethodWithAppOpen {
  101. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  102. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  103. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *parameters) {
  104. [expectation fulfill];
  105. }];
  106. FIRDLLogEventToScion(FIRDLLogEventAppOpen, nil, nil, nil, analytics);
  107. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  108. }
  109. - (void)testGINLogEventToScionContainsCorrectNameWithAppOpen {
  110. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  111. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  112. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *parameters) {
  113. XCTAssertEqualObjects(name, @"dynamic_link_app_open", @"scion name param was incorrect");
  114. [expectation fulfill];
  115. }];
  116. FIRDLLogEventToScion(FIRDLLogEventAppOpen, nil, nil, nil, analytics);
  117. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  118. }
  119. - (void)testGINLogEventToScionLogsParametersCorrectly {
  120. NSString *source = @"9-2nkg";
  121. NSString *medium = @"fjg0";
  122. NSString *campaign = @"gjoo3u5";
  123. NSString *sourceKey = @"source";
  124. NSString *mediumKey = @"medium";
  125. NSString *campaignKey = @"campaign";
  126. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  127. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  128. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *params) {
  129. XCTAssertEqualObjects(params[sourceKey], source, @"scion logger has incorrect source.");
  130. XCTAssertEqualObjects(params[mediumKey], medium, @"scion logger has incorrect medium.");
  131. XCTAssertEqualObjects(params[campaignKey], campaign,
  132. @"scion logger has incorrect campaign.");
  133. [expectation fulfill];
  134. }];
  135. FIRDLLogEventToScion(FIRDLLogEventAppOpen, source, medium, campaign, analytics);
  136. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  137. }
  138. @end