Skip to content

Commit 5c5de21

Browse files
authored
Merge pull request #1017 from OneSignal/feat/OSInAppMessage-jsonRepresentation
Add `jsonRepresentation` to OSInAppMessage
2 parents 1640f91 + 9330f7d commit 5c5de21

File tree

6 files changed

+53
-4
lines changed

6 files changed

+53
-4
lines changed

iOS_SDK/OneSignalSDK/Source/OSInAppMessageInternal.m

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@
3030
#import "OneSignalCommonDefines.h"
3131

3232
@implementation OSInAppMessage
33+
34+
- (NSDictionary *)jsonRepresentation {
35+
NSMutableDictionary *json = [NSMutableDictionary new];
36+
json[@"messageId"] = self.messageId;
37+
return json;
38+
}
39+
3340
@end
3441

3542
@interface OSInAppMessageInternal ()
@@ -92,6 +99,7 @@ + (instancetype)instanceWithData:(NSData *)data {
9299
+ (instancetype)instanceWithJson:(NSDictionary * _Nonnull)json {
93100
let message = [OSInAppMessageInternal new];
94101

102+
// "id" is expected instead of "messageId" when parsing JSON from the backend
95103
if (json[@"id"] && [json[@"id"] isKindOfClass:[NSString class]])
96104
message.messageId = json[@"id"];
97105
else
@@ -156,7 +164,7 @@ + (instancetype)instancePreviewFromNotification:(OSNotification *)notification {
156164
-(NSDictionary *)jsonRepresentation {
157165
let json = [NSMutableDictionary new];
158166

159-
json[@"id"] = self.messageId;
167+
json[@"messageId"] = self.messageId;
160168
json[@"variants"] = self.variants;
161169

162170
let triggers = [NSMutableArray new];

iOS_SDK/OneSignalSDK/Source/OneSignal.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,9 @@ typedef NS_ENUM(NSUInteger, OSNotificationActionType) {
166166

167167
@property (strong, nonatomic, nonnull) NSString *messageId;
168168

169+
// Convert the object into a NSDictionary
170+
- (NSDictionary *_Nonnull)jsonRepresentation;
171+
169172
@end
170173

171174
@interface OSInAppMessageOutcome : NSObject

iOS_SDK/OneSignalSDK/UnitTests/InAppMessagingIntegrationTests.m

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,8 @@ - (void)testIAMClickLaunchesAPIRequestMultipleTimes_Redisplay {
490490
let firstTrigger = [OSTrigger customTriggerWithProperty:@"prop1" withOperator:OSTriggerOperatorTypeExists withValue:nil];
491491

492492
let message = [OSInAppMessageTestHelper testMessageWithTriggers:@[@[firstTrigger]] withRedisplayLimit:limit delay:@(delay)];
493-
let registrationResponse = [OSInAppMessageTestHelper testRegistrationJsonWithMessages:@[message.jsonRepresentation]];
493+
NSDictionary* json = [OSInAppMessageTestHelper convertIAMtoJson:message];
494+
let registrationResponse = [OSInAppMessageTestHelper testRegistrationJsonWithMessages:@[json]];
494495

495496
[OneSignalClientOverrider setMockResponseForRequest:NSStringFromClass([OSRequestRegisterUser class]) withResponse:registrationResponse];
496497

@@ -1525,7 +1526,8 @@ - (void)testInAppMessageDisplayMultipleTimesSessionDurationTrigger {
15251526
[OneSignal pauseInAppMessages:NO];
15261527
let trigger = [OSTrigger dynamicTriggerWithKind:OS_DYNAMIC_TRIGGER_KIND_SESSION_TIME withOperator:OSTriggerOperatorTypeGreaterThanOrEqualTo withValue:@0];
15271528
let message = [OSInAppMessageTestHelper testMessageWithTriggers:@[@[trigger]] withRedisplayLimit:5 delay:@30];
1528-
let registrationJson = [OSInAppMessageTestHelper testRegistrationJsonWithMessages:@[message.jsonRepresentation]];
1529+
NSDictionary* json = [OSInAppMessageTestHelper convertIAMtoJson:message];
1530+
let registrationJson = [OSInAppMessageTestHelper testRegistrationJsonWithMessages:@[json]];
15291531

15301532
//Time interval mock
15311533
NSDateComponents* comps = [[NSDateComponents alloc]init];
@@ -1642,7 +1644,8 @@ - (void)testIAMLifecyleEventsFired {
16421644
Mock response JSON and initializes the OneSignal SDK
16431645
*/
16441646
- (void)initOneSignalWithInAppMessage:(OSInAppMessageInternal *)message {
1645-
let registrationJson = [OSInAppMessageTestHelper testRegistrationJsonWithMessages:@[message.jsonRepresentation]];
1647+
NSDictionary* json = [OSInAppMessageTestHelper convertIAMtoJson:message];
1648+
let registrationJson = [OSInAppMessageTestHelper testRegistrationJsonWithMessages:@[json]];
16461649
[self initOneSignalWithRegistrationJSON:registrationJson];
16471650
}
16481651

iOS_SDK/OneSignalSDK/UnitTests/OSInAppMessagingHelpers.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ NS_ASSUME_NONNULL_BEGIN
6161
+ (OSInAppMessageInternal *)testMessageWithTriggers:(NSArray <NSArray<OSTrigger *> *> *)triggers;
6262
+ (OSInAppMessageInternal *)testMessageWithTriggers:(NSArray <NSArray<OSTrigger *> *> *)triggers withRedisplayLimit:(NSInteger)limit delay:(NSNumber *)delay;
6363
+ (OSInAppMessageInternal *)testMessageWithPastEndTime:(BOOL)pastEndTime;
64+
+ (NSDictionary *)convertIAMtoJson:(OSInAppMessageInternal *)message;
6465
+ (NSDictionary *)testRegistrationJsonWithMessages:(NSArray<NSDictionary *> *)messages;
6566
+ (NSDictionary *)testMessageJsonWithTriggerPropertyName:(NSString *)property withId:(NSString *)triggerId withOperator:(OSTriggerOperatorType)type withValue:(id)value;
6667
+ (NSDictionary*)testInAppMessageGetContainsWithHTML:(NSString *)html;

iOS_SDK/OneSignalSDK/UnitTests/OSInAppMessagingHelpers.m

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,14 @@ + (OSInAppMessageInternal *)testMessageWithTriggers:(NSArray <NSArray<OSTrigger
245245
return message;
246246
}
247247

248+
// jsonRepresentation uses key of "messageId" but we need to use key of "id" for creating IAM, etc.
249+
+ (NSDictionary *)convertIAMtoJson:(OSInAppMessageInternal *)message {
250+
NSMutableDictionary *json = [message.jsonRepresentation mutableCopy];
251+
json[@"id"] = message.messageId;
252+
[json removeObjectForKey:@"messageId"];
253+
return json;
254+
}
255+
248256
+ (NSDictionary *)testRegistrationJsonWithMessages:(NSArray<NSDictionary *> *)messages {
249257
return @{
250258
@"id" : @"1234",

iOS_SDK/OneSignalSDK/UnitTests/UnitTests.m

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3265,6 +3265,32 @@ - (void)testNotificationJson {
32653265
XCTAssertEqualObjects(json[@"templateName"], @"Template name");
32663266
}
32673267

3268+
- (void)testInAppMessageInternalJson {
3269+
NSDictionary *messageJson = @{
3270+
@"id" : OS_TEST_MESSAGE_ID,
3271+
@"variants" : @{
3272+
@"ios" : @{
3273+
@"default" : OS_TEST_MESSAGE_VARIANT_ID,
3274+
@"en" : OS_TEST_ENGLISH_VARIANT_ID
3275+
},
3276+
@"all" : @{
3277+
@"default" : @"some_message_id"
3278+
}
3279+
},
3280+
@"triggers" : @[],
3281+
@"has_liquid" : @true,
3282+
};
3283+
OSInAppMessageInternal *message = [OSInAppMessageInternal instanceWithJson:messageJson];
3284+
NSDictionary *json = [message jsonRepresentation];
3285+
3286+
XCTAssertEqualObjects(json[@"messageId"], OS_TEST_MESSAGE_ID);
3287+
XCTAssertNil(json[@"id"]);
3288+
XCTAssertEqualObjects(json[@"variants"][@"ios"][@"default"], OS_TEST_MESSAGE_VARIANT_ID);
3289+
XCTAssertEqualObjects(json[@"variants"][@"all"][@"default"], @"some_message_id");
3290+
XCTAssertEqualObjects(json[@"triggers"], @[]);
3291+
XCTAssertTrue(json[@"has_liquid"]);
3292+
}
3293+
32683294
- (void)testLaunchURL {
32693295

32703296
// 1. Init OneSignal with app start

0 commit comments

Comments
 (0)