diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/operations/OperationModelStoreTests.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/operations/OperationModelStoreTests.kt new file mode 100644 index 000000000..ad76493d5 --- /dev/null +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/operations/OperationModelStoreTests.kt @@ -0,0 +1,56 @@ +package com.onesignal.core.internal.operations + +import com.onesignal.core.internal.operations.impl.OperationModelStore +import com.onesignal.core.internal.preferences.PreferenceOneSignalKeys +import com.onesignal.core.internal.preferences.PreferenceStores +import com.onesignal.debug.LogLevel +import com.onesignal.debug.internal.logging.Logging +import com.onesignal.mocks.MockPreferencesService +import com.onesignal.user.internal.operations.LoginUserOperation +import com.onesignal.user.internal.operations.SetPropertyOperation +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.shouldBe +import io.kotest.matchers.shouldNotBe +import org.json.JSONArray +import java.util.UUID + +class OperationModelStoreTests : FunSpec({ + + beforeAny { + Logging.logLevel = LogLevel.NONE + } + + test("does not load invalid cached operations") { + // Given + val prefs = MockPreferencesService() + val operationModelStore = OperationModelStore(prefs) + val jsonArray = JSONArray() + + // Create a valid Operation with onesignalId + val validOperation = SetPropertyOperation(UUID.randomUUID().toString(), UUID.randomUUID().toString(), "property", "value") + validOperation.id = UUID.randomUUID().toString() + + // Create a valid operation missing onesignalId + val validOperationMissing = LoginUserOperation() + validOperationMissing.id = UUID.randomUUID().toString() + + // Create an invalid Operation missing onesignalId + val invalidOperation = SetPropertyOperation() + invalidOperation.id = UUID.randomUUID().toString() + + // Add the Operations to the cache + jsonArray.put(validOperation.toJSON()) + jsonArray.put(validOperationMissing.toJSON()) + jsonArray.put(invalidOperation.toJSON()) + prefs.saveString(PreferenceStores.ONESIGNAL, PreferenceOneSignalKeys.MODEL_STORE_PREFIX + "operations", jsonArray.toString()) + + // When + operationModelStore.loadOperations() + + // Then + operationModelStore.list().count() shouldBe 2 + operationModelStore.get(validOperation.id) shouldNotBe null + operationModelStore.get(validOperationMissing.id) shouldNotBe null + operationModelStore.get(invalidOperation.id) shouldBe null + } +})