1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 package org.mozilla.fenix.translations
9 import kotlinx.coroutines.test.runTest
10 import mozilla.components.browser.state.action.TranslationsAction
11 import mozilla.components.browser.state.store.BrowserStore
12 import mozilla.components.concept.engine.translate.Language
13 import mozilla.components.concept.engine.translate.TranslationOperation
14 import mozilla.components.concept.engine.translate.TranslationPageSettingOperation
15 import mozilla.components.support.test.ext.joinBlocking
16 import mozilla.components.support.test.libstate.ext.waitUntilIdle
17 import mozilla.components.support.test.robolectric.testContext
18 import org.junit.Assert.assertFalse
19 import org.junit.Assert.assertTrue
21 import org.junit.runner.RunWith
22 import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
23 import org.mozilla.fenix.utils.Settings
25 @RunWith(FenixRobolectricTestRunner::class)
26 class TranslationsDialogMiddlewareTest {
27 private val browserStore = mockk<BrowserStore>(relaxed = true)
28 private val settings = Settings(testContext)
29 private val translationsDialogMiddleware =
30 TranslationsDialogMiddleware(browserStore = browserStore, sessionId = "tab1", settings = settings)
33 fun `GIVEN translationState WHEN FetchSupportedLanguages action is called THEN call OperationRequestedAction from BrowserStore`() =
35 val translationStore = TranslationsDialogStore(
36 initialState = TranslationsDialogState(),
37 middlewares = listOf(translationsDialogMiddleware),
39 translationStore.dispatch(TranslationsDialogAction.FetchSupportedLanguages)
42 translationStore.waitUntilIdle()
45 browserStore.dispatch(
46 TranslationsAction.OperationRequestedAction(
48 operation = TranslationOperation.FETCH_SUPPORTED_LANGUAGES,
55 fun `GIVEN translationState WHEN TranslateAction from TranslationDialogStore is called THEN call TranslateAction from BrowserStore`() =
57 val translationStore = TranslationsDialogStore(
58 initialState = TranslationsDialogState(
59 initialFrom = Language("en", "English"),
60 initialTo = Language("fr", "France"),
62 middlewares = listOf(translationsDialogMiddleware),
64 translationStore.dispatch(TranslationsDialogAction.TranslateAction).joinBlocking()
66 translationStore.waitUntilIdle()
69 browserStore.dispatch(
70 TranslationsAction.TranslateAction(
81 fun `GIVEN translationState WHEN RestoreTranslation from TranslationDialogStore is called THEN call TranslateRestoreAction from BrowserStore`() =
83 val translationStore = TranslationsDialogStore(
84 initialState = TranslationsDialogState(),
85 middlewares = listOf(translationsDialogMiddleware),
87 translationStore.dispatch(TranslationsDialogAction.RestoreTranslation).joinBlocking()
89 translationStore.waitUntilIdle()
92 browserStore.dispatch(
93 TranslationsAction.TranslateRestoreAction(
101 fun `GIVEN translationState WHEN FetchDownloadFileSizeAction from TranslationDialogStore is called THEN call FetchTranslationDownloadSizeAction from BrowserStore`() =
103 val translationStore = TranslationsDialogStore(
104 initialState = TranslationsDialogState(),
105 middlewares = listOf(translationsDialogMiddleware),
107 translationStore.dispatch(
108 TranslationsDialogAction.FetchDownloadFileSizeAction(
109 toLanguage = Language("en", "English"),
110 fromLanguage = Language("fr", "France"),
114 translationStore.waitUntilIdle()
117 browserStore.dispatch(
118 TranslationsAction.FetchTranslationDownloadSizeAction(
120 fromLanguage = Language("fr", "France"),
121 toLanguage = Language("en", "English"),
128 fun `GIVEN translationState WHEN FetchPageSettings from TranslationDialogStore is called THEN call FETCH_PAGE_SETTINGS from BrowserStore`() =
130 val translationStore = TranslationsDialogStore(
131 initialState = TranslationsDialogState(),
132 middlewares = listOf(translationsDialogMiddleware),
134 translationStore.dispatch(TranslationsDialogAction.FetchPageSettings).joinBlocking()
136 translationStore.waitUntilIdle()
139 browserStore.dispatch(
140 TranslationsAction.OperationRequestedAction(
142 operation = TranslationOperation.FETCH_PAGE_SETTINGS,
149 fun `GIVEN translationState WHEN UpdatePageSettingsValue with action type AlwaysOfferPopup from TranslationDialogStore is called THEN call UpdatePageSettingAction from BrowserStore`() =
151 assertTrue(settings.offerTranslation)
152 val translationStore = TranslationsDialogStore(
153 initialState = TranslationsDialogState(),
154 middlewares = listOf(translationsDialogMiddleware),
156 translationStore.dispatch(
157 TranslationsDialogAction.UpdatePageSettingsValue(
158 type = TranslationPageSettingsOption.AlwaysOfferPopup(),
163 translationStore.waitUntilIdle()
166 browserStore.dispatch(
167 TranslationsAction.UpdatePageSettingAction(
169 operation = TranslationPageSettingOperation.UPDATE_ALWAYS_OFFER_POPUP,
174 assertFalse(settings.offerTranslation)
178 fun `GIVEN translationState WHEN UpdatePageSettingsValue with action type AlwaysTranslateLanguage from TranslationDialogStore is called THEN call UpdatePageSettingAction from BrowserStore`() =
180 val translationStore = TranslationsDialogStore(
181 initialState = TranslationsDialogState(),
182 middlewares = listOf(translationsDialogMiddleware),
184 translationStore.dispatch(
185 TranslationsDialogAction.UpdatePageSettingsValue(
186 type = TranslationPageSettingsOption.AlwaysTranslateLanguage(),
191 translationStore.waitUntilIdle()
194 browserStore.dispatch(
195 TranslationsAction.UpdatePageSettingAction(
197 operation = TranslationPageSettingOperation.UPDATE_ALWAYS_TRANSLATE_LANGUAGE,
205 fun `GIVEN translationState WHEN UpdatePageSettingsValue with action type NeverTranslateLanguage from TranslationDialogStore is called THEN call UpdatePageSettingAction from BrowserStore`() =
207 val translationStore = TranslationsDialogStore(
208 initialState = TranslationsDialogState(),
209 middlewares = listOf(translationsDialogMiddleware),
211 translationStore.dispatch(
212 TranslationsDialogAction.UpdatePageSettingsValue(
213 type = TranslationPageSettingsOption.NeverTranslateLanguage(),
218 translationStore.waitUntilIdle()
221 browserStore.dispatch(
222 TranslationsAction.UpdatePageSettingAction(
224 operation = TranslationPageSettingOperation.UPDATE_NEVER_TRANSLATE_LANGUAGE,
232 fun `GIVEN translationState WHEN UpdatePageSettingsValue with action type NeverTranslateSite from TranslationDialogStore is called THEN call UpdatePageSettingAction from BrowserStore`() =
234 val translationStore = TranslationsDialogStore(
235 initialState = TranslationsDialogState(),
236 middlewares = listOf(translationsDialogMiddleware),
238 translationStore.dispatch(
239 TranslationsDialogAction.UpdatePageSettingsValue(
240 type = TranslationPageSettingsOption.NeverTranslateSite(),
245 translationStore.waitUntilIdle()
248 browserStore.dispatch(
249 TranslationsAction.UpdatePageSettingAction(
251 operation = TranslationPageSettingOperation.UPDATE_NEVER_TRANSLATE_SITE,