FIRDLScionLoggingTest.m 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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. - (nonnull NSArray<FIRAConditionalUserProperty *> *)
  48. conditionalUserProperties:(nonnull NSString *)origin
  49. propertyNamePrefix:(nonnull NSString *)propertyNamePrefix {
  50. return @[];
  51. }
  52. - (NSInteger)maxUserProperties:(nonnull NSString *)origin {
  53. return -1;
  54. }
  55. - (void)setConditionalUserProperty:(nonnull FIRAConditionalUserProperty *)conditionalUserProperty {
  56. }
  57. - (void)setUserPropertyWithOrigin:(nonnull NSString *)origin
  58. name:(nonnull NSString *)name
  59. value:(nonnull id)value {
  60. }
  61. - (void)checkLastNotificationForOrigin:(nonnull NSString *)origin
  62. queue:(nonnull dispatch_queue_t)queue
  63. callback:(nonnull void (^)(NSString *_Nullable))
  64. currentLastNotificationProperty {
  65. }
  66. - (void)registerAnalyticsListener:(nonnull id<FIRAnalyticsInteropListener>)listener
  67. withOrigin:(nonnull NSString *)origin {
  68. }
  69. - (void)unregisterAnalyticsListenerWithOrigin:(nonnull NSString *)origin {
  70. }
  71. @end
  72. @interface FIRDLScionLoggingTest : XCTestCase
  73. @end
  74. @implementation FIRDLScionLoggingTest
  75. - (void)testGINLogEventToScionCallsLogMethodWithFirstOpen {
  76. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  77. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  78. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *parameters) {
  79. [expectation fulfill];
  80. }];
  81. FIRDLLogEventToScion(FIRDLLogEventFirstOpen, nil, nil, nil, analytics);
  82. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  83. }
  84. - (void)testGINLogEventToScionContainsCorrectNameWithFirstOpen {
  85. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  86. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  87. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *parameters) {
  88. XCTAssertEqualObjects(name, @"dynamic_link_first_open", @"scion name param was incorrect");
  89. [expectation fulfill];
  90. }];
  91. FIRDLLogEventToScion(FIRDLLogEventFirstOpen, nil, nil, nil, analytics);
  92. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  93. }
  94. - (void)testGINLogEventToScionCallsLogMethodWithAppOpen {
  95. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  96. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  97. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *parameters) {
  98. [expectation fulfill];
  99. }];
  100. FIRDLLogEventToScion(FIRDLLogEventAppOpen, nil, nil, nil, analytics);
  101. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  102. }
  103. - (void)testGINLogEventToScionContainsCorrectNameWithAppOpen {
  104. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  105. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  106. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *parameters) {
  107. XCTAssertEqualObjects(name, @"dynamic_link_app_open", @"scion name param was incorrect");
  108. [expectation fulfill];
  109. }];
  110. FIRDLLogEventToScion(FIRDLLogEventAppOpen, nil, nil, nil, analytics);
  111. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  112. }
  113. - (void)testGINLogEventToScionLogsParametersCorrectly {
  114. NSString *source = @"9-2nkg";
  115. NSString *medium = @"fjg0";
  116. NSString *campaign = @"gjoo3u5";
  117. NSString *sourceKey = @"source";
  118. NSString *mediumKey = @"medium";
  119. NSString *campaignKey = @"campaign";
  120. XCTestExpectation *expectation = [self expectationWithDescription:@"completion"];
  121. FakeAnalytics *analytics = [[FakeAnalytics alloc]
  122. initWithHandler:^(NSString *origin, NSString *name, NSDictionary *params) {
  123. XCTAssertEqualObjects(params[sourceKey], source, @"scion logger has incorrect source.");
  124. XCTAssertEqualObjects(params[mediumKey], medium, @"scion logger has incorrect medium.");
  125. XCTAssertEqualObjects(params[campaignKey], campaign,
  126. @"scion logger has incorrect campaign.");
  127. [expectation fulfill];
  128. }];
  129. FIRDLLogEventToScion(FIRDLLogEventAppOpen, source, medium, campaign, analytics);
  130. [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
  131. }
  132. @end