88#import " MParticleSwift.h"
99#import " MPIConstants.h"
1010
11+ // Rokt kit identifier for testing
12+ static NSNumber * const kTestRoktKitId = @181 ;
13+
14+ // Test helper class that simulates a kit with getSessionId method
15+ @interface MPRoktTestKitInstance : NSObject
16+ @property (nonatomic , copy ) NSString *sessionIdToReturn;
17+ - (NSString *)getSessionId ;
18+ @end
19+
20+ @implementation MPRoktTestKitInstance
21+ - (NSString *)getSessionId {
22+ return self.sessionIdToReturn ;
23+ }
24+ @end
25+
1126@interface MPRokt ()
1227- (NSArray <NSDictionary<NSString *, NSString *> *> *)getRoktPlacementAttributesMapping ;
1328- (NSNumber *)getRoktHashedEmailUserIdentityType ;
@@ -293,7 +308,7 @@ - (void)testGetRoktPlacementAttributesMapping {
293308 self.mockInstance = OCMPartialMock (instance);
294309 self.mockContainer = OCMClassMock ([MPKitContainer_PRIVATE class ]);
295310 NSArray *kitConfig = @[@{
296- @" id" : @ 181 ,
311+ @" id" : kTestRoktKitId ,
297312 kMPRemoteConfigKitConfigurationKey : @{
298313 @" AllowJavaScriptResponse" : @" True" ,
299314 @" accountId" : @12345 ,
@@ -322,7 +337,7 @@ - (void)testGetRoktHashedEmailUserIdentityType {
322337 self.mockInstance = OCMPartialMock (instance);
323338 self.mockContainer = OCMClassMock ([MPKitContainer_PRIVATE class ]);
324339 NSArray *kitConfig = @[@{
325- @" id" : @ 181 ,
340+ @" id" : kTestRoktKitId ,
326341 kMPRemoteConfigKitConfigurationKey : @{
327342 @" AllowJavaScriptResponse" : @" True" ,
328343 @" accountId" : @12345 ,
@@ -344,7 +359,7 @@ - (void)testGetRoktHashedEmailUserIdentityTypeReturnsNilWhenNotConfigured {
344359 self.mockInstance = OCMPartialMock (instance);
345360 self.mockContainer = OCMClassMock ([MPKitContainer_PRIVATE class ]);
346361 NSArray *kitConfig = @[@{
347- @" id" : @ 181 ,
362+ @" id" : kTestRoktKitId ,
348363 kMPRemoteConfigKitConfigurationKey : @{
349364 @" AllowJavaScriptResponse" : @" True" ,
350365 @" accountId" : @12345 ,
@@ -745,4 +760,93 @@ - (void)testEventsWithIdentifierCallbackInvocation {
745760 OCMVerifyAll (self.mockContainer );
746761}
747762
763+ #pragma mark - setSessionId Tests
764+
765+ - (void )testSetSessionIdForwardsToKitContainer {
766+ MParticle *instance = [MParticle sharedInstance ];
767+ self.mockInstance = OCMPartialMock (instance);
768+ self.mockContainer = OCMClassMock ([MPKitContainer_PRIVATE class ]);
769+ [[[self .mockInstance stub ] andReturn: self .mockContainer] kitContainer_PRIVATE ];
770+ [[[self .mockInstance stub ] andReturn: self .mockInstance] sharedInstance ];
771+
772+ // Set up test parameters
773+ NSString *sessionId = @" test-session-id-12345" ;
774+
775+ // Set up expectations for kit container
776+ XCTestExpectation *expectation = [self expectationWithDescription: @" Wait for async operation" ];
777+ SEL roktSelector = @selector (setSessionId: );
778+ OCMExpect ([self .mockContainer forwardSDKCall: roktSelector
779+ event: nil
780+ parameters: [OCMArg checkWithBlock: ^BOOL (MPForwardQueueParameters *params) {
781+ XCTAssertEqualObjects (params[0 ], sessionId);
782+ return true ;
783+ }]
784+ messageType: MPMessageTypeEvent
785+ userInfo: nil ]).andDo (^(NSInvocation *invocation) {
786+ [expectation fulfill ];
787+ });
788+
789+ // Execute method
790+ [self .rokt setSessionId: sessionId];
791+
792+ // Wait for async operation
793+ [self waitForExpectationsWithTimeout: 0.2 handler: nil ];
794+
795+ // Verify
796+ OCMVerifyAll (self.mockContainer );
797+ }
798+
799+ #pragma mark - getSessionId Tests
800+
801+ - (void )testGetSessionIdReturnsSessionIdFromKit {
802+ MParticle *instance = [MParticle sharedInstance ];
803+ self.mockInstance = OCMPartialMock (instance);
804+ self.mockContainer = OCMClassMock ([MPKitContainer_PRIVATE class ]);
805+ [[[self .mockInstance stub ] andReturn: self .mockContainer] kitContainer_PRIVATE ];
806+ [[[self .mockInstance stub ] andReturn: self .mockInstance] sharedInstance ];
807+
808+ // Create a mock kit register with Rokt kit code
809+ id mockKitRegister = OCMProtocolMock (@protocol (MPExtensionKitProtocol));
810+ OCMStub ([(id <MPExtensionKitProtocol>)mockKitRegister code ]).andReturn (kTestRoktKitId );
811+
812+ // Create a real kit instance that responds to getSessionId
813+ NSString *expectedSessionId = @" mock-session-id-67890" ;
814+ MPRoktTestKitInstance *kitInstance = [[MPRoktTestKitInstance alloc ] init ];
815+ kitInstance.sessionIdToReturn = expectedSessionId;
816+ OCMStub ([mockKitRegister wrapperInstance ]).andReturn (kitInstance);
817+
818+ // Return the mock kit register from activeKitsRegistry
819+ NSArray *activeKits = @[mockKitRegister];
820+ OCMStub ([self .mockContainer activeKitsRegistry ]).andReturn (activeKits);
821+
822+ // Execute method
823+ NSString *result = [self .rokt getSessionId ];
824+
825+ // Verify
826+ XCTAssertEqualObjects (result, expectedSessionId, @" Should return the session id from the kit" );
827+ }
828+
829+ - (void )testGetSessionIdReturnsNilWhenKitInstanceIsNil {
830+ MParticle *instance = [MParticle sharedInstance ];
831+ self.mockInstance = OCMPartialMock (instance);
832+ self.mockContainer = OCMClassMock ([MPKitContainer_PRIVATE class ]);
833+ [[[self .mockInstance stub ] andReturn: self .mockContainer] kitContainer_PRIVATE ];
834+ [[[self .mockInstance stub ] andReturn: self .mockInstance] sharedInstance ];
835+
836+ // Create a mock kit register with Rokt kit code but nil wrapperInstance
837+ id mockKitRegister = OCMProtocolMock (@protocol (MPExtensionKitProtocol));
838+ OCMStub ([(id <MPExtensionKitProtocol>)mockKitRegister code ]).andReturn (kTestRoktKitId );
839+ OCMStub ([mockKitRegister wrapperInstance ]).andReturn (nil );
840+
841+ // Return the mock kit register from activeKitsRegistry
842+ NSArray *activeKits = @[mockKitRegister];
843+ OCMStub ([self .mockContainer activeKitsRegistry ]).andReturn (activeKits);
844+
845+ // Execute method
846+ NSString *result = [self .rokt getSessionId ];
847+
848+ // Verify
849+ XCTAssertNil (result, @" Should return nil when kit wrapper instance is nil" );
850+ }
851+
748852@end
0 commit comments