@@ -26,9 +26,13 @@ import org.wordpress.android.fluxc.store.SiteStore
2626import org.wordpress.android.provider.query.QueryResult
2727import org.wordpress.android.resolver.ContentResolverWrapper
2828import org.wordpress.android.test
29+ import org.wordpress.android.ui.bloggingreminders.BloggingRemindersModelMapper
30+ import org.wordpress.android.ui.bloggingreminders.BloggingRemindersUiModel
2931import org.wordpress.android.ui.prefs.AppPrefsWrapper
3032import org.wordpress.android.util.publicdata.WordPressPublicData
3133import org.wordpress.android.viewmodel.ContextProvider
34+ import org.wordpress.android.workers.reminder.ReminderScheduler
35+ import java.time.DayOfWeek
3236
3337@ExperimentalCoroutinesApi
3438class BloggingRemindersResolverTest {
@@ -44,6 +48,8 @@ class BloggingRemindersResolverTest {
4448 private val bloggingRemindersSyncAnalyticsTracker: BloggingRemindersSyncAnalyticsTracker = mock()
4549 private val siteStore: SiteStore = mock()
4650 private val bloggingRemindersStore: BloggingRemindersStore = mock()
51+ private val reminderScheduler: ReminderScheduler = mock()
52+ private val bloggingRemindersModelMapper: BloggingRemindersModelMapper = mock()
4753 private val classToTest = BloggingRemindersResolver (
4854 jetpackBloggingRemindersSyncFlag,
4955 contextProvider,
@@ -54,7 +60,9 @@ class BloggingRemindersResolverTest {
5460 bloggingRemindersSyncAnalyticsTracker,
5561 siteStore,
5662 bloggingRemindersStore,
57- coroutineScope
63+ coroutineScope,
64+ reminderScheduler,
65+ bloggingRemindersModelMapper
5866 )
5967
6068 private val context: Context = mock()
@@ -63,8 +71,11 @@ class BloggingRemindersResolverTest {
6371 private val wordPressCurrentPackageId = " packageId"
6472 private val uriValue = " content://$wordPressCurrentPackageId .${BloggingRemindersProvider ::class .simpleName} "
6573 private val validLocalId = 123
66- private val userSetBloggingRemindersModel = BloggingRemindersModel (validLocalId, setOf (MONDAY ))
74+ private val userSetBloggingRemindersModel = BloggingRemindersModel (validLocalId, setOf (MONDAY ), 5 , 43 , false )
6775 private val defaultBloggingRemindersModel = BloggingRemindersModel (validLocalId)
76+ private val bloggingRemindersUiModel = BloggingRemindersUiModel (
77+ validLocalId, setOf (DayOfWeek .MONDAY ), 5 , 43 , false
78+ )
6879
6980 @Before
7081 fun setup () {
@@ -164,12 +175,15 @@ class BloggingRemindersResolverTest {
164175
165176 @Test
166177 fun `Should track success if result map has entries` () = test {
178+ whenever(bloggingRemindersModelMapper.toUiModel(any())).thenReturn(bloggingRemindersUiModel)
167179 whenever(siteStore.getLocalIdForRemoteSiteId(123L )).thenReturn(validLocalId)
168180 whenever(bloggingRemindersStore.bloggingRemindersModel(validLocalId))
169181 .thenReturn(flowOf(defaultBloggingRemindersModel))
170182 featureEnabled()
171- whenever(mockCursor.getString(0 )).thenReturn(" {\" 123\" :{\" enabledDays\" :[\" MONDAY\" ],\" hour\" :5" +
172- " ,\" isPromptIncluded\" :false,\" minute\" :43,\" siteId\" :123}}" )
183+ whenever(mockCursor.getString(0 )).thenReturn(
184+ " {\" 123\" :{\" enabledDays\" :[\" MONDAY\" ],\" hour\" :5" +
185+ " ,\" isPromptIncluded\" :false,\" minute\" :43,\" siteId\" :123}}"
186+ )
173187 classToTest.trySyncBloggingReminders({}, {})
174188 verify(bloggingRemindersSyncAnalyticsTracker).trackSuccess(1 )
175189 }
@@ -180,21 +194,26 @@ class BloggingRemindersResolverTest {
180194 .thenReturn(flowOf(userSetBloggingRemindersModel))
181195 whenever(siteStore.getLocalIdForRemoteSiteId(123L )).thenReturn(validLocalId)
182196 featureEnabled()
183- whenever(mockCursor.getString(0 )).thenReturn(" {\" 123\" :{\" enabledDays\" :[\" MONDAY\" ],\" hour\" :5" +
184- " ,\" isPromptIncluded\" :false,\" minute\" :43,\" siteId\" :123}}" )
197+ whenever(mockCursor.getString(0 )).thenReturn(
198+ " {\" 123\" :{\" enabledDays\" :[\" MONDAY\" ],\" hour\" :5" +
199+ " ,\" isPromptIncluded\" :false,\" minute\" :43,\" siteId\" :123}}"
200+ )
185201 val onSuccess: () -> Unit = mock()
186202 classToTest.trySyncBloggingReminders(onSuccess) {}
187203 verify(onSuccess).invoke()
188204 }
189205
190206 @Test
191207 fun `Should update blogging reminder if site local ID is valid AND store returns default reminder` () = test {
208+ whenever(bloggingRemindersModelMapper.toUiModel(any())).thenReturn(bloggingRemindersUiModel)
192209 whenever(siteStore.getLocalIdForRemoteSiteId(123 )).thenReturn(validLocalId)
193210 whenever(bloggingRemindersStore.bloggingRemindersModel(validLocalId))
194211 .thenReturn(flowOf(defaultBloggingRemindersModel))
195212 featureEnabled()
196- whenever(mockCursor.getString(0 )).thenReturn(" {\" 123\" :{\" enabledDays\" :[\" MONDAY\" ],\" hour\" :5" +
197- " ,\" isPromptIncluded\" :false,\" minute\" :43,\" siteId\" :123}}" )
213+ whenever(mockCursor.getString(0 )).thenReturn(
214+ " {\" 123\" :{\" enabledDays\" :[\" MONDAY\" ],\" hour\" :5" +
215+ " ,\" isPromptIncluded\" :false,\" minute\" :43,\" siteId\" :123}}"
216+ )
198217 classToTest.trySyncBloggingReminders({}, {})
199218 verify(bloggingRemindersStore, times(1 )).updateBloggingReminders(
200219 BloggingRemindersModel (
@@ -207,15 +226,52 @@ class BloggingRemindersResolverTest {
207226 )
208227 }
209228
229+ @Test
230+ fun `Should map blogging reminder when setting local notification` () = test {
231+ whenever(bloggingRemindersModelMapper.toUiModel(any())).thenReturn(bloggingRemindersUiModel)
232+ whenever(siteStore.getLocalIdForRemoteSiteId(123 )).thenReturn(validLocalId)
233+ whenever(bloggingRemindersStore.bloggingRemindersModel(validLocalId))
234+ .thenReturn(flowOf(defaultBloggingRemindersModel))
235+ featureEnabled()
236+ whenever(mockCursor.getString(0 )).thenReturn(
237+ " {\" 123\" :{\" enabledDays\" :[\" MONDAY\" ],\" hour\" :5" +
238+ " ,\" isPromptIncluded\" :false,\" minute\" :43,\" siteId\" :123}}"
239+ )
240+ classToTest.trySyncBloggingReminders({}, {})
241+ verify(bloggingRemindersModelMapper).toUiModel(userSetBloggingRemindersModel)
242+ }
243+
244+ @Test
245+ fun `Should schedule blogging reminder local notification` () = test {
246+ whenever(bloggingRemindersModelMapper.toUiModel(any())).thenReturn(bloggingRemindersUiModel)
247+ whenever(siteStore.getLocalIdForRemoteSiteId(123 )).thenReturn(validLocalId)
248+ whenever(bloggingRemindersStore.bloggingRemindersModel(validLocalId))
249+ .thenReturn(flowOf(defaultBloggingRemindersModel))
250+ featureEnabled()
251+ whenever(mockCursor.getString(0 )).thenReturn(
252+ " {\" 123\" :{\" enabledDays\" :[\" MONDAY\" ],\" hour\" :5" +
253+ " ,\" isPromptIncluded\" :false,\" minute\" :43,\" siteId\" :123}}"
254+ )
255+ classToTest.trySyncBloggingReminders({}, {})
256+ verify(reminderScheduler).schedule(
257+ validLocalId,
258+ bloggingRemindersUiModel.hour,
259+ bloggingRemindersUiModel.minute,
260+ bloggingRemindersUiModel.toReminderConfig()
261+ )
262+ }
263+
210264 @Test
211265 fun `Should NOT update blogging reminder if site local ID is invalid` () = test {
212266 val invalidLocalId = 0
213267 whenever(bloggingRemindersStore.bloggingRemindersModel(invalidLocalId))
214268 .thenReturn(flowOf(defaultBloggingRemindersModel))
215269 whenever(siteStore.getLocalIdForRemoteSiteId(123 )).thenReturn(invalidLocalId)
216270 featureEnabled()
217- whenever(mockCursor.getString(0 )).thenReturn(" {\" 123\" :{\" enabledDays\" :[\" MONDAY\" ],\" hour\" :5" +
218- " ,\" isPromptIncluded\" :false,\" minute\" :43,\" siteId\" :123}}" )
271+ whenever(mockCursor.getString(0 )).thenReturn(
272+ " {\" 123\" :{\" enabledDays\" :[\" MONDAY\" ],\" hour\" :5" +
273+ " ,\" isPromptIncluded\" :false,\" minute\" :43,\" siteId\" :123}}"
274+ )
219275 classToTest.trySyncBloggingReminders({}, {})
220276 verify(bloggingRemindersStore, times(0 )).updateBloggingReminders(any())
221277 }
@@ -226,8 +282,10 @@ class BloggingRemindersResolverTest {
226282 .thenReturn(flowOf(userSetBloggingRemindersModel))
227283 whenever(siteStore.getLocalIdForRemoteSiteId(123 )).thenReturn(validLocalId)
228284 featureEnabled()
229- whenever(mockCursor.getString(0 )).thenReturn(" {\" 123\" :{\" enabledDays\" :[],\" hour\" :5" +
230- " ,\" isPromptIncluded\" :false,\" minute\" :43,\" siteId\" :123}}" )
285+ whenever(mockCursor.getString(0 )).thenReturn(
286+ " {\" 123\" :{\" enabledDays\" :[],\" hour\" :5" +
287+ " ,\" isPromptIncluded\" :false,\" minute\" :43,\" siteId\" :123}}"
288+ )
231289 classToTest.trySyncBloggingReminders({}, {})
232290 verify(bloggingRemindersStore, times(0 )).updateBloggingReminders(any())
233291 }
0 commit comments