Skip to content

Commit c7004bb

Browse files
committed
Fix equal trigger when using number
* Trim ceros for string equal matching
1 parent 1d4a539 commit c7004bb

File tree

2 files changed

+61
-2
lines changed

2 files changed

+61
-2
lines changed

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import com.onesignal.OSDynamicTriggerController.OSDynamicTriggerControllerObserver;
77

8+
import java.text.DecimalFormat;
89
import java.util.ArrayList;
910
import java.util.Collection;
1011
import java.util.Map;
@@ -116,8 +117,16 @@ private boolean triggerMatchesFlex(@Nullable Object triggerValue, @NonNull Objec
116117
return false;
117118

118119
// If operator is equal or not equals ignore type by comparing on toString values
119-
if (operator.checksEquality())
120-
return triggerMatchesStringValue(triggerValue.toString(), deviceValue.toString(), operator);
120+
if (operator.checksEquality()) {
121+
String triggerValueString = triggerValue.toString();
122+
String deviceValueString = deviceValue.toString();
123+
if (deviceValue instanceof Number) {
124+
// User may have an input text that converts 5 to 5.0, we only care about the raw value on equals
125+
DecimalFormat format = new DecimalFormat("0.#");
126+
deviceValueString = format.format(deviceValue);
127+
}
128+
return triggerMatchesStringValue(triggerValueString, deviceValueString, operator);
129+
}
121130

122131
if (deviceValue instanceof String &&
123132
triggerValue instanceof Number)

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

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
import static com.onesignal.OneSignalPackagePrivateHelper.OneSignal_setSharedPreferences;
6767
import static com.onesignal.OneSignalPackagePrivateHelper.OneSignal_setTime;
6868
import static com.onesignal.OneSignalPackagePrivateHelper.OneSignal_setTrackerFactory;
69+
import static com.onesignal.OneSignalPackagePrivateHelper.dismissCurrentMessage;
6970
import static com.onesignal.ShadowOneSignalRestClient.setRemoteParamsGetHtmlResponse;
7071
import static com.test.onesignal.RestClientAsserts.assertMeasureOnV2AtIndex;
7172
import static com.test.onesignal.TestHelpers.assertMainThread;
@@ -398,6 +399,55 @@ public void testTimedMessageDisplayedAfterAllTriggersValid() throws Exception {
398399
assertFalse(ShadowDynamicTimer.hasScheduledTimer);
399400
}
400401

402+
@Test
403+
public void testMessageDisplayedAfterAddTriggerEqualWithStringVsNumber() throws Exception {
404+
// Set IAM with EQUAL trigger with number value as string
405+
final OSTestInAppMessage message =
406+
InAppMessagingHelpers.buildTestMessageWithSingleTrigger(OSTriggerKind.CUSTOM, "test", OSTestTrigger.OSTriggerOperator.EQUAL_TO.toString(), "5");
407+
408+
setMockRegistrationResponseWithMessages(new ArrayList<OSTestInAppMessage>() {{
409+
add(message);
410+
}});
411+
412+
OneSignalInit();
413+
threadAndTaskWait();
414+
415+
assertEquals(0, OneSignalPackagePrivateHelper.getInAppMessageDisplayQueue().size());
416+
417+
// after setting this trigger the message should be displayed immediately
418+
OneSignal.addTrigger("test", 5.0);
419+
threadAndTaskWait();
420+
421+
// the message should now have been displayed
422+
assertEquals(1, OneSignalPackagePrivateHelper.getInAppMessageDisplayQueue().size());
423+
dismissCurrentMessage();
424+
}
425+
426+
427+
@Test
428+
public void testMessageDisplayedAfterAddTriggerEqualWithStringVsNumberFloat() throws Exception {
429+
// Set IAM with EQUAL trigger with number value as string
430+
final OSTestInAppMessage message =
431+
InAppMessagingHelpers.buildTestMessageWithSingleTrigger(OSTriggerKind.CUSTOM, "test", OSTestTrigger.OSTriggerOperator.EQUAL_TO.toString(), "5.5");
432+
433+
setMockRegistrationResponseWithMessages(new ArrayList<OSTestInAppMessage>() {{
434+
add(message);
435+
}});
436+
437+
OneSignalInit();
438+
threadAndTaskWait();
439+
440+
assertEquals(0, OneSignalPackagePrivateHelper.getInAppMessageDisplayQueue().size());
441+
442+
// after setting this trigger the message should be displayed immediately
443+
OneSignal.addTrigger("test", 5.50);
444+
threadAndTaskWait();
445+
446+
// the message should now have been displayed
447+
assertEquals(1, OneSignalPackagePrivateHelper.getInAppMessageDisplayQueue().size());
448+
dismissCurrentMessage();
449+
}
450+
401451
@Test
402452
public void useCachedInAppListOnQuickColdRestart() throws Exception {
403453
// 1. Start app

0 commit comments

Comments
 (0)