Skip to content

Commit 68b6789

Browse files
authored
E2-1736: Message archive handles all kinds of text (#245)
* only take if object is string * refcator * refactor into helper methods * add unit tests
1 parent b36c97b commit 68b6789

File tree

2 files changed

+90
-13
lines changed

2 files changed

+90
-13
lines changed

Example/Tests/Classes/LeanplumTest.m

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ @interface Leanplum (Test)
4949
+ (NSSet<NSString *> *)parseEnabledCountersFromResponse:(NSDictionary *)response;
5050
+ (NSSet<NSString *> *)parseEnabledFeatureFlagsFromResponse:(NSDictionary *)response;
5151
+ (void)triggerMessageDisplayed:(LPActionContext *)context;
52+
+ (LPMessageArchiveData *)messageArchiveDataFromContext:(LPActionContext *)context;
53+
+ (NSString *)messageBodyFromContext:(LPActionContext *)context;
5254

5355
+ (void)trackGeofence:(LPGeofenceEventType *)event withValue:(double)value andInfo:(NSString *)info andArgs:(NSDictionary *)args andParameters:(NSDictionary *)params;
5456

@@ -1835,4 +1837,60 @@ -(void)test_triggerMessageDisplayedCallsCallback
18351837
XCTAssertTrue(blockCalled);
18361838
}
18371839

1840+
/**
1841+
* Test that method messageBodyFromContext gets the correct message body for string.
1842+
*/
1843+
-(void)test_messageBodyFromContextGetsCorrectBodyForString
1844+
{
1845+
NSString *messageID = @"testMessageID";
1846+
NSString *messageBody = @"testMessageBody";
1847+
NSString *recipientUserID = @"recipientUserID";
1848+
1849+
LPActionContext *actionContext = [[LPActionContext alloc] init];
1850+
id actionContextMock = OCMPartialMock(actionContext);
1851+
1852+
OCMStub([actionContextMock messageId]).andReturn(messageID);
1853+
OCMStub([actionContextMock args]).andReturn(@{@"Message":messageBody});
1854+
1855+
XCTAssertTrue([[Leanplum messageBodyFromContext:actionContext] isEqualToString:messageBody]);
1856+
}
1857+
1858+
/**
1859+
* Test that method messageBodyFromContext gets the correct message body for
1860+
* dictionary with key "Text".
1861+
*/
1862+
-(void)test_messageBodyFromContextGetsCorrectBodyForDictionaryKeyText
1863+
{
1864+
NSString *messageID = @"testMessageID";
1865+
NSString *messageBody = @"testMessageBody";
1866+
NSString *recipientUserID = @"recipientUserID";
1867+
1868+
LPActionContext *actionContext = [[LPActionContext alloc] init];
1869+
id actionContextMock = OCMPartialMock(actionContext);
1870+
1871+
OCMStub([actionContextMock messageId]).andReturn(messageID);
1872+
OCMStub([actionContextMock args]).andReturn(@{@"Message":@{@"Text":messageBody}});
1873+
1874+
XCTAssertTrue([[Leanplum messageBodyFromContext:actionContext] isEqualToString:messageBody]);
1875+
}
1876+
1877+
/**
1878+
* Test that method messageBodyFromContext gets the correct message body for
1879+
* dictionary with key "Text Value".
1880+
*/
1881+
-(void)test_messageBodyFromContextGetsCorrectBodyForDictionaryKeyTextValue
1882+
{
1883+
NSString *messageID = @"testMessageID";
1884+
NSString *messageBody = @"testMessageBody";
1885+
NSString *recipientUserID = @"recipientUserID";
1886+
1887+
LPActionContext *actionContext = [[LPActionContext alloc] init];
1888+
id actionContextMock = OCMPartialMock(actionContext);
1889+
1890+
OCMStub([actionContextMock messageId]).andReturn(messageID);
1891+
OCMStub([actionContextMock args]).andReturn(@{@"Message":@{@"Text Value":messageBody}});
1892+
1893+
XCTAssertTrue([[Leanplum messageBodyFromContext:actionContext] isEqualToString:messageBody]);
1894+
}
1895+
18381896
@end

Leanplum-SDK/Classes/Internal/Leanplum.m

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -510,26 +510,45 @@ + (void)triggerVariablesChangedAndNoDownloadsPending
510510
+ (void)triggerMessageDisplayed:(LPActionContext *)context
511511
{
512512
LP_BEGIN_USER_CODE
513-
NSString *messageID = context.messageId;
514-
NSString *messageKey = @"Message";
515-
NSString *messageBody = @"";
516-
if ([context.args valueForKey:messageKey]) {
517-
messageBody = [context.args valueForKey:messageKey];
518-
}
519-
NSString *recipientUserID = [Leanplum userId];
520-
NSDate *deliveryDateTime = [NSDate date];
513+
LPMessageArchiveData *messageArchiveData = [self messageArchiveDataFromContext:context];
521514
for (LeanplumMessageDisplayedCallbackBlock block in [LPInternalState sharedState]
522515
.messageDisplayedBlocks.copy) {
523-
LPMessageArchiveData *messageArchiveData = [[LPMessageArchiveData alloc]
524-
initWithMessageID: messageID
525-
messageBody:messageBody
526-
recipientUserID:recipientUserID
527-
deliveryDateTime:deliveryDateTime];
528516
block(messageArchiveData);
529517
}
530518
LP_END_USER_CODE
531519
}
532520

521+
+ (LPMessageArchiveData *)messageArchiveDataFromContext:(LPActionContext *)context {
522+
NSString *messageID = context.messageId;
523+
NSString *messageBody = [self messageBodyFromContext:context];
524+
NSString *recipientUserID = [Leanplum userId];
525+
NSDate *deliveryDateTime = [NSDate date];
526+
527+
return [[LPMessageArchiveData alloc] initWithMessageID: messageID
528+
messageBody:messageBody
529+
recipientUserID:recipientUserID
530+
deliveryDateTime:deliveryDateTime];
531+
}
532+
533+
+ (NSString *)messageBodyFromContext:(LPActionContext *)context {
534+
NSString *messageBody = @"";
535+
NSString *messageKey = @"Message";
536+
id messageObject = [context.args valueForKey:messageKey];
537+
if (messageObject) {
538+
if ([messageObject isKindOfClass:[NSString class]]) {
539+
messageBody = messageObject;
540+
} else if ([messageObject isKindOfClass:[NSDictionary class]]) {
541+
NSDictionary *messageDict = (NSDictionary *) messageObject;
542+
if ([[messageDict objectForKey:@"Text"] isKindOfClass:[NSString class]]) {
543+
messageBody = [messageDict objectForKey:@"Text"];
544+
} else if ([[messageDict objectForKey:@"Text Value"] isKindOfClass:[NSString class]]) {
545+
messageBody = [messageDict objectForKey:@"Text Value"];
546+
}
547+
}
548+
}
549+
return messageBody;
550+
}
551+
533552
+ (void)triggerAction:(LPActionContext *)context
534553
{
535554
[self triggerAction:context handledBlock:nil];

0 commit comments

Comments
 (0)