Skip to content

Commit 2a5f4d6

Browse files
committed
robolectric 3.4.2 and fcm payload channel fixes
* Updating to robolectric 3.4.2 from 3.4.0 requires switching to targeting api 26 from 10000. * Fixed chanel payload was not correctly being process through FCM due to string conversion.
1 parent 92c4c20 commit 2a5f4d6

File tree

3 files changed

+19
-8
lines changed

3 files changed

+19
-8
lines changed

OneSignalSDK/onesignal/src/main/java/com/onesignal/NotificationChannelManager.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,14 @@ static String createNotificationChannel(Context context, JSONObject jsonPayload)
9494
// Language dependent fields will be passed localized
9595
@RequiresApi(api = Build.VERSION_CODES.O)
9696
private static String createChannel(Context context, NotificationManager notificationManager, JSONObject payload) throws JSONException {
97-
JSONObject channelPayload = payload.optJSONObject("chnl");
97+
// 'chnl' will be a string if coming from FCM and it will be a JSONObject when coming from
98+
// a cold start sync.
99+
Object objChannelPayload = payload.opt("chnl");
100+
JSONObject channelPayload = null;
101+
if (objChannelPayload instanceof String)
102+
channelPayload = new JSONObject((String)objChannelPayload);
103+
else if (objChannelPayload instanceof JSONObject)
104+
channelPayload = (JSONObject)objChannelPayload;
98105

99106
String channel_id = channelPayload.optString("id", DEFAULT_CHANNEL_ID);
100107
// Ensure we don't try to use the system reserved id
@@ -121,7 +128,7 @@ private static String createChannel(Context context, NotificationManager notific
121128
notificationManager.createNotificationChannelGroup(new NotificationChannelGroup(group_id, group_name));
122129
channel.setGroup(group_id);
123130
}
124-
131+
125132
channel.enableLights(payload.optInt("led", 1) == 1);
126133
if (payload.has("ledc")) {
127134
BigInteger ledColor = new BigInteger(payload.optString("ledc"), 16);

OneSignalSDK/unittest/src/test/java/com/test/onesignal/MainOneSignalClassRunner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ public void testNullProjectNumberSetsErrorType() throws Exception {
349349
}
350350

351351
@Test
352-
@Config(shadows = {ShadowRoboNotificationManager.class}, sdk = 10000)
352+
@Config(shadows = {ShadowRoboNotificationManager.class}, sdk = 26)
353353
public void testNotificationChannelListPayload() throws Exception {
354354
NotificationChannelManagerRunner testHelper = new NotificationChannelManagerRunner().setContext(blankActivity);
355355
JSONObject payloadList = testHelper.createBasicChannelListPayload();

OneSignalSDK/unittest/src/test/java/com/test/onesignal/NotificationChannelManagerRunner.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.robolectric.android.controller.ActivityController;
2323
import org.robolectric.annotation.Config;
2424
import org.robolectric.shadows.ShadowLog;
25-
import org.robolectric.shadows.ShadowNotificationManager;
2625

2726
import static com.onesignal.OneSignalPackagePrivateHelper.NotificationChannelManager_createNotificationChannel;
2827
import static com.onesignal.OneSignalPackagePrivateHelper.NotificationChannelManager_processChannelList;
@@ -38,7 +37,7 @@
3837
ShadowOSUtils.class,
3938
ShadowRoboNotificationManager.class},
4039
instrumentedPackages = {"com.onesignal"},
41-
sdk = 10000)
40+
sdk = 26)
4241
@RunWith(RobolectricTestRunner.class)
4342
public class NotificationChannelManagerRunner {
4443

@@ -81,7 +80,7 @@ public void createNotificationChannelCreateBasicChannel() throws Exception {
8180
JSONObject payload = new JSONObject();
8281
JSONObject chnl = new JSONObject();
8382
chnl.put("id", "test_id");
84-
payload.put("chnl", chnl);
83+
payload.put("chnl", chnl.toString());
8584

8685
String ret = NotificationChannelManager_createNotificationChannel(blankActivity, payload);
8786

@@ -114,7 +113,7 @@ public void createNotificationChannelWithALlOptions() throws Exception {
114113
payload.put("bdg", 1);
115114
payload.put("bdnd", 1);
116115

117-
payload.put("chnl", chnl);
116+
payload.put("chnl", chnl.toString());
118117

119118
String ret = NotificationChannelManager_createNotificationChannel(blankActivity, payload);
120119

@@ -146,7 +145,7 @@ public void useOtherChannelWhenItIsAvailable() throws Exception {
146145

147146
JSONObject chnl = new JSONObject();
148147
chnl.put("id", "test_id");
149-
payload.put("chnl", chnl);
148+
payload.put("chnl", chnl.toString());
150149

151150
String ret = NotificationChannelManager_createNotificationChannel(blankActivity, payload);
152151

@@ -159,6 +158,9 @@ public void useOtherChannelWhenItIsAvailable() throws Exception {
159158
assertEquals("existing_id", ret);
160159
}
161160

161+
162+
// Starting cold start sync tests
163+
162164
@Test
163165
public void processPayloadWithOutChannelList() throws Exception {
164166
createChannel("local_existing_id");
@@ -226,6 +228,8 @@ public void processChannelListWithMultiLanguage() throws Exception {
226228
assertEquals("en_grp_nm", ShadowRoboNotificationManager.lastChannelGroup.getName());
227229
}
228230

231+
// Starting helper methods
232+
229233
JSONObject createBasicChannelListPayload() throws JSONException {
230234
createChannel("local_existing_id");
231235
createChannel("OS_existing_id");

0 commit comments

Comments
 (0)