Skip to content

Commit 378a638

Browse files
committed
Check if reminder was already set before updating in BloggingRemindersResolver
1 parent e3ff64b commit 378a638

2 files changed

Lines changed: 36 additions & 9 deletions

File tree

WordPress/src/main/java/org/wordpress/android/bloggingreminders/resolver/BloggingRemindersResolver.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.wordpress.android.bloggingreminders.resolver
33
import android.database.Cursor
44
import com.google.gson.reflect.TypeToken
55
import kotlinx.coroutines.CoroutineScope
6+
import kotlinx.coroutines.flow.first
67
import kotlinx.coroutines.launch
78
import org.wordpress.android.bloggingreminders.BloggingRemindersSyncAnalyticsTracker
89
import org.wordpress.android.bloggingreminders.BloggingRemindersSyncAnalyticsTracker.ErrorType
@@ -81,7 +82,9 @@ class BloggingRemindersResolver @Inject constructor(
8182
continue
8283
}
8384
val siteLocalId = siteStore.getLocalIdForRemoteSiteId(siteId)
84-
if (siteLocalId != 0) {
85+
val isBloggingReminderAlreadySet = bloggingRemindersStore.bloggingRemindersModel(siteLocalId)
86+
.first().enabledDays.isNotEmpty()
87+
if (siteLocalId != 0 && !isBloggingReminderAlreadySet) {
8588
bloggingRemindersStore.updateBloggingReminders(bloggingReminder.copy(siteId = siteLocalId))
8689
}
8790
}

WordPress/src/test/java/org/wordpress/android/bloggingreminders/resolver/BloggingRemindersResolverTest.kt

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.nhaarman.mockitokotlin2.times
1010
import com.nhaarman.mockitokotlin2.verify
1111
import com.nhaarman.mockitokotlin2.whenever
1212
import kotlinx.coroutines.ExperimentalCoroutinesApi
13+
import kotlinx.coroutines.flow.flowOf
1314
import org.junit.Before
1415
import org.junit.Rule
1516
import org.junit.Test
@@ -62,6 +63,9 @@ class BloggingRemindersResolverTest {
6263
private val mockCursor: MatrixCursor = mock()
6364
private val wordPressCurrentPackageId = "packageId"
6465
private val uriValue = "content://$wordPressCurrentPackageId.${BloggingRemindersProvider::class.simpleName}"
66+
private val validLocalId = 123
67+
private val userSetBloggingRemindersModel = BloggingRemindersModel(validLocalId, setOf(MONDAY))
68+
private val defaultBloggingRemindersModel = BloggingRemindersModel(validLocalId)
6569

6670
@Before
6771
fun setup() {
@@ -161,7 +165,9 @@ class BloggingRemindersResolverTest {
161165

162166
@Test
163167
fun `Should track success if result map has entries`() = test {
164-
whenever(siteStore.getLocalIdForRemoteSiteId(123)).thenReturn(123)
168+
whenever(bloggingRemindersStore.bloggingRemindersModel(validLocalId))
169+
.thenReturn(flowOf(userSetBloggingRemindersModel))
170+
whenever(siteStore.getLocalIdForRemoteSiteId(123L)).thenReturn(validLocalId)
165171
featureEnabled()
166172
whenever(mockCursor.getString(0)).thenReturn("{\"123\":{\"enabledDays\":[\"MONDAY\"],\"hour\":5" +
167173
",\"isPromptIncluded\":false,\"minute\":43,\"siteId\":123}}")
@@ -171,7 +177,9 @@ class BloggingRemindersResolverTest {
171177

172178
@Test
173179
fun `Should trigger success callback if result map has entries`() = test {
174-
whenever(siteStore.getLocalIdForRemoteSiteId(123)).thenReturn(123)
180+
whenever(bloggingRemindersStore.bloggingRemindersModel(validLocalId))
181+
.thenReturn(flowOf(userSetBloggingRemindersModel))
182+
whenever(siteStore.getLocalIdForRemoteSiteId(123L)).thenReturn(validLocalId)
175183
featureEnabled()
176184
whenever(mockCursor.getString(0)).thenReturn("{\"123\":{\"enabledDays\":[\"MONDAY\"],\"hour\":5" +
177185
",\"isPromptIncluded\":false,\"minute\":43,\"siteId\":123}}")
@@ -181,16 +189,17 @@ class BloggingRemindersResolverTest {
181189
}
182190

183191
@Test
184-
fun `Should update blogging reminder if site local ID is valid`() = test {
185-
val localId = 456
186-
whenever(siteStore.getLocalIdForRemoteSiteId(123)).thenReturn(localId)
192+
fun `Should update blogging reminder if site local ID is valid AND store returns default reminder`() = test {
193+
whenever(siteStore.getLocalIdForRemoteSiteId(123)).thenReturn(validLocalId)
194+
whenever(bloggingRemindersStore.bloggingRemindersModel(validLocalId))
195+
.thenReturn(flowOf(defaultBloggingRemindersModel))
187196
featureEnabled()
188197
whenever(mockCursor.getString(0)).thenReturn("{\"123\":{\"enabledDays\":[\"MONDAY\"],\"hour\":5" +
189198
",\"isPromptIncluded\":false,\"minute\":43,\"siteId\":123}}")
190199
classToTest.trySyncBloggingReminders({}, {})
191200
verify(bloggingRemindersStore, times(1)).updateBloggingReminders(
192201
BloggingRemindersModel(
193-
siteId = localId,
202+
siteId = validLocalId,
194203
enabledDays = setOf(MONDAY),
195204
hour = 5,
196205
minute = 43,
@@ -200,15 +209,30 @@ class BloggingRemindersResolverTest {
200209
}
201210

202211
@Test
203-
fun `Should NOT update blogging reminder if site local ID is 0`() = test {
204-
whenever(siteStore.getLocalIdForRemoteSiteId(123)).thenReturn(0)
212+
fun `Should NOT update blogging reminder if site local ID is invalid`() = test {
213+
val invalidLocalId = 0
214+
whenever(bloggingRemindersStore.bloggingRemindersModel(invalidLocalId))
215+
.thenReturn(flowOf(defaultBloggingRemindersModel))
216+
whenever(siteStore.getLocalIdForRemoteSiteId(123)).thenReturn(invalidLocalId)
205217
featureEnabled()
206218
whenever(mockCursor.getString(0)).thenReturn("{\"123\":{\"enabledDays\":[\"MONDAY\"],\"hour\":5" +
207219
",\"isPromptIncluded\":false,\"minute\":43,\"siteId\":123}}")
208220
classToTest.trySyncBloggingReminders({}, {})
209221
verify(bloggingRemindersStore, times(0)).updateBloggingReminders(any())
210222
}
211223

224+
@Test
225+
fun `Should NOT update blogging reminder if reminder is already set`() = test {
226+
whenever(bloggingRemindersStore.bloggingRemindersModel(validLocalId))
227+
.thenReturn(flowOf(userSetBloggingRemindersModel))
228+
whenever(siteStore.getLocalIdForRemoteSiteId(123)).thenReturn(validLocalId)
229+
featureEnabled()
230+
whenever(mockCursor.getString(0)).thenReturn("{\"123\":{\"enabledDays\":[],\"hour\":5" +
231+
",\"isPromptIncluded\":false,\"minute\":43,\"siteId\":123}}")
232+
classToTest.trySyncBloggingReminders({}, {})
233+
verify(bloggingRemindersStore, times(0)).updateBloggingReminders(any())
234+
}
235+
212236
private fun featureEnabled() {
213237
whenever(appPrefsWrapper.getIsFirstTryBloggingRemindersSyncJetpack()).thenReturn(true)
214238
whenever(jetpackBloggingRemindersSyncFlag.isEnabled()).thenReturn(true)

0 commit comments

Comments
 (0)