Skip to content

Commit

Permalink
fix: update active kits header (#147)
Browse files Browse the repository at this point in the history
The `x-mp-kits` header field was previously sending a list of kits that were actively receiving events. Now it will send a list of kits that have been configured, even if they are not actively receiving events due to the SDK state. For example, a kit that was shut down due to the current user's logged-in status not matching its configurations directive previous would not have been included in this list, but now will be included.
  • Loading branch information
willpassidomo authored and einsteinx2 committed May 17, 2022
1 parent 6a93096 commit d196723
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 14 deletions.
91 changes: 91 additions & 0 deletions UnitTests/MPKitContainerTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -560,6 +560,9 @@ - (void)testForwardLoggedOutUser {
activeKits = [kitContainer activeKitsRegistry];

XCTAssertEqual(activeKits.count, 0);
NSArray<NSNumber *> *configuredKits = [kitContainer configuredKitsRegistry];
XCTAssertEqual(configuredKits.count, 1);
XCTAssertTrue([configuredKits containsObject:@42]);
}

- (void)testForwardLoggedOutUserWithMultipleKits {
Expand Down Expand Up @@ -614,9 +617,88 @@ - (void)testForwardLoggedOutUserWithMultipleKits {
[kitContainer configureKits:configurations];

activeKits = [kitContainer activeKitsRegistry];
XCTAssertEqual(activeKits.count, 1);
XCTAssertEqual(activeKits[0].code, @314);

NSArray<NSNumber *> *configuredKits = [kitContainer configuredKitsRegistry];
XCTAssertEqual(configuredKits.count, 2);
XCTAssertTrue([configuredKits containsObject:@42]);
XCTAssertTrue([configuredKits containsObject:@314]);
}

- (void)testConfiguredKits {
NSArray *configurations = @[
@{
@"id":@(42),
@"as":@{
@"secretKey":@"MySecretKey",
@"sendTransactionData":@"true"
}
},
@{
@"id":@314,
@"as":@{
@"secretKey":@"MySecretKey",
@"sendTransactionData":@"true"
},
@"eau":@false
}
];

MPKitConfiguration *kitConfiguration = [[MPKitConfiguration alloc] initWithDictionary:configurations[1]];
[[kitContainer startKit:@314 configuration:kitConfiguration] start];

[kitContainer configureKits:nil];
[kitContainer configureKits:configurations];

NSArray<id<MPExtensionKitProtocol>> *activeKits = [kitContainer activeKitsRegistry];

XCTAssertEqual(activeKits.count, 2);
NSArray<NSNumber *> *configuredKits = [kitContainer configuredKitsRegistry];
XCTAssertEqual(configuredKits.count, 2);
XCTAssertTrue([configuredKits containsObject:@42]);
XCTAssertTrue([configuredKits containsObject:@314]);

configurations = @[
@{
@"id":@(42),
@"as":@{
@"secretKey":@"MySecretKey",
@"sendTransactionData":@"true"
},
@"eau":@true
},
@{
@"id":@314,
@"as":@{
@"secretKey":@"MySecretKey",
@"sendTransactionData":@"true"
},
@"eau":@false
},
@{
@"id":@92,
@"as":@{
@"secretKey":@"MySecretKey",
@"sendTransactionData":@"true"
},
@"eau":@false
}
];

[kitContainer configureKits:nil];
[kitContainer configureKits:configurations];

activeKits = [kitContainer activeKitsRegistry];
XCTAssertEqual(activeKits.count, 1);
XCTAssertEqual(activeKits[0].code, @314);

configuredKits = [kitContainer configuredKitsRegistry];
XCTAssertEqual(configuredKits.count, 3);
XCTAssertTrue([configuredKits containsObject:@42]);
XCTAssertTrue([configuredKits containsObject:@92]);
XCTAssertTrue([configuredKits containsObject:@314]);

}

- (void)testForwardLoggedInUserWithMultipleKits {
Expand Down Expand Up @@ -653,6 +735,11 @@ - (void)testForwardLoggedInUserWithMultipleKits {
XCTAssertTrue([activeKits[0].code integerValue] == 42 || [activeKits[0].code integerValue] == 314);
XCTAssertTrue([activeKits[1].code integerValue] == 42 || [activeKits[1].code integerValue] == 314);

NSArray<NSNumber *> *configuredKits = [kitContainer configuredKitsRegistry];
XCTAssertEqual(configuredKits.count, 2);
XCTAssertTrue([configuredKits containsObject:@42]);
XCTAssertTrue([configuredKits containsObject:@314]);

configurations = @[
@{
@"id":@(42),
Expand Down Expand Up @@ -680,6 +767,10 @@ - (void)testForwardLoggedInUserWithMultipleKits {
XCTAssertEqual(activeKits.count, 2);
XCTAssertTrue([activeKits[0].code integerValue] == 42 || [activeKits[0].code integerValue] == 314);
XCTAssertTrue([activeKits[1].code integerValue] == 42 || [activeKits[1].code integerValue] == 314);
configuredKits = [kitContainer configuredKitsRegistry];
XCTAssertEqual(configuredKits.count, 2);
XCTAssertTrue([configuredKits containsObject:@42]);
XCTAssertTrue([configuredKits containsObject:@314]);
}

- (void)testFilterMessageType {
Expand Down
6 changes: 2 additions & 4 deletions UnitTests/MPURLRequestBuilderTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -375,9 +375,8 @@ - (void)testEventRequest {
[[[mockWebView stub] andReturn:agent] userAgent];

id mockKitContainer = OCMClassMock([MPKitContainer class]);
id mockKit = OCMProtocolMock(@protocol(MPExtensionKitProtocol));
[(id<MPExtensionKitProtocol>)[[mockKit stub] andReturn:@42] code];
[[[mockKitContainer stub] andReturn:@[mockKit]] activeKitsRegistry];
NSNumber *mockKitId = @42;
[[[mockKitContainer stub] andReturn:@[mockKitId]] configuredKitsRegistry];

id mockMParticle = OCMPartialMock(sharedInstance);
[[[mockMParticle stub] andReturn:mockWebView] webView];
Expand Down Expand Up @@ -432,7 +431,6 @@ - (void)testEventRequest {
}
[mockMParticle stopMocking];
[mockKitContainer stopMocking];
[mockKit stopMocking];
[mockWebView stopMocking];
}

Expand Down
1 change: 1 addition & 0 deletions mParticle-Apple-SDK/Kits/MPKitContainer.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
+ (nullable NSSet<id<MPExtensionKitProtocol>> *)registeredKits;

- (nullable NSArray<id<MPExtensionKitProtocol>> *)activeKitsRegistry;
- (nullable NSArray<NSNumber *> *)configuredKitsRegistry;
- (void)configureKits:(nullable NSArray<NSDictionary *> *)kitsConfiguration;
- (nullable NSArray<NSNumber *> *)supportedKits;
- (void)initializeKits;
Expand Down
15 changes: 15 additions & 0 deletions mParticle-Apple-SDK/Kits/MPKitContainer.mm
Original file line number Diff line number Diff line change
Expand Up @@ -1890,6 +1890,21 @@ - (void)project:(id<MPExtensionKitProtocol>)kitRegister event:(MPEvent *const)ev
completionHandler(projectedEvents, appliedProjections);
}

- (nullable NSArray<NSNumber *> *)configuredKitsRegistry {
BOOL anyKitsIncluded = self.supportedKits.count > 0;
BOOL anyKitsConfigured = self.kitConfigurations.count > 0;
if (!anyKitsIncluded || !anyKitsConfigured) {
return nil;
}
NSMutableArray<NSNumber *> *configuredKits = [[NSMutableArray alloc] initWithCapacity:self.kitConfigurations.count];
for (NSNumber *kitId in self.kitConfigurations.allKeys) {
if ([self.supportedKits containsObject:kitId]) {
[configuredKits addObject:kitId];
}
}
return configuredKits;
}

#pragma mark Public methods
- (nullable NSArray<id<MPExtensionKitProtocol>> *)activeKitsRegistry {
if (kitsRegistry.count == 0) {
Expand Down
11 changes: 1 addition & 10 deletions mParticle-Apple-SDK/Network/MPURLRequestBuilder.m
Original file line number Diff line number Diff line change
Expand Up @@ -170,16 +170,7 @@ - (NSMutableURLRequest *)build {
kits = nil;
}

NSArray<id<MPExtensionKitProtocol>> *activeKitsRegistry = [[MParticle sharedInstance].kitContainer activeKitsRegistry];
if (activeKitsRegistry.count > 0) {
NSMutableArray<NSNumber *> *activeKitIds = [[NSMutableArray alloc] initWithCapacity:activeKitsRegistry.count];

for (id<MPExtensionKitProtocol> kitRegister in activeKitsRegistry) {
[activeKitIds addObject:kitRegister.code];
}

kits = [activeKitIds componentsJoinedByString:@","];
}
kits = [MParticle.sharedInstance.kitContainer.configuredKitsRegistry componentsJoinedByString:@","];

range = [_message rangeOfString:kMPMessageTypeNetworkPerformance];
if (range.location != NSNotFound) {
Expand Down

0 comments on commit d196723

Please sign in to comment.