Skip to content

Commit 47a5611

Browse files
committed
Test subscriptions
1 parent 8d30eb3 commit 47a5611

File tree

2 files changed

+70
-6
lines changed

2 files changed

+70
-6
lines changed

content-scope-scripts/content-scope-scripts-impl/src/main/java/com/duckduckgo/contentscopescripts/impl/messaging/AdsjsContentScopeMessaging.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import com.duckduckgo.common.utils.plugins.PluginPoint
2626
import com.duckduckgo.contentscopescripts.api.AdsjsContentScopeJsMessageHandlersPlugin
2727
import com.duckduckgo.contentscopescripts.api.GlobalContentScopeJsMessageHandlersPlugin
2828
import com.duckduckgo.contentscopescripts.impl.AdsJsContentScopeScripts
29-
import com.duckduckgo.contentscopescripts.impl.ContentScopeScriptsFeature
3029
import com.duckduckgo.di.scopes.ActivityScope
3130
import com.duckduckgo.js.messaging.api.AdsjsJsMessageCallback
3231
import com.duckduckgo.js.messaging.api.AdsjsMessaging
@@ -56,12 +55,11 @@ class AdsjsContentScopeMessaging @Inject constructor(
5655
private val adsJsContentScopeScripts: AdsJsContentScopeScripts,
5756
private val dispatcherProvider: DispatcherProvider,
5857
@AppCoroutineScope private val appCoroutineScope: CoroutineScope,
59-
private val contentScopeScriptsFeature: ContentScopeScriptsFeature,
6058
) : AdsjsMessaging {
6159

6260
private val moshi = Moshi.Builder().add(JSONObjectAdapter()).build()
6361

64-
private lateinit var webView: WebView
62+
private var webView: WebView? = null
6563

6664
override val context: String = "contentScopeScripts"
6765
override val allowedDomains: Set<String> = setOf("*")
@@ -176,7 +174,7 @@ class AdsjsContentScopeMessaging @Inject constructor(
176174

177175
override suspend fun postMessage(subscriptionEventData: SubscriptionEventData): Boolean {
178176
val newWebCompatApisEnabled = withContext(dispatcherProvider.io()) {
179-
contentScopeScriptsFeature.useNewWebCompatApis().isEnabled()
177+
adsJsContentScopeScripts.isEnabled()
180178
}
181179

182180
if (!newWebCompatApisEnabled) {
@@ -197,9 +195,11 @@ class AdsjsContentScopeMessaging @Inject constructor(
197195
(webView as? DuckDuckGoWebView)?.safePostMessage(
198196
it,
199197
subscriptionEvent,
200-
)
198+
)?.also {
199+
return@withContext true
200+
}
201201
}
202-
return@withContext true
202+
return@withContext false
203203
}
204204
}
205205
}

content-scope-scripts/content-scope-scripts-impl/src/test/java/com/duckduckgo/contentscopescripts/impl/messaging/AdsjsContentScopeScriptsJsMessagingTest.kt

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,12 @@ import com.duckduckgo.contentscopescripts.impl.AdsJsContentScopeScripts
2828
import com.duckduckgo.js.messaging.api.AdsjsJsMessageCallback
2929
import com.duckduckgo.js.messaging.api.AdsjsMessageHandler
3030
import com.duckduckgo.js.messaging.api.JsMessage
31+
import com.duckduckgo.js.messaging.api.SubscriptionEventData
3132
import junit.framework.TestCase.assertEquals
3233
import kotlinx.coroutines.test.runTest
3334
import org.json.JSONObject
35+
import org.junit.Assert.assertFalse
36+
import org.junit.Assert.assertTrue
3437
import org.junit.Before
3538
import org.junit.Rule
3639
import org.junit.Test
@@ -221,6 +224,67 @@ class AdsjsContentScopeScriptsJsMessagingTest {
221224
verify(mockWebView).safeRemoveWebMessageListener(any())
222225
}
223226

227+
@Test
228+
fun `when posting message and adsjs is disabled then do not post message`() = runTest {
229+
whenever(adsJsContentScopeScripts.isEnabled()).thenReturn(false)
230+
val eventData = SubscriptionEventData("feature", "subscription", JSONObject())
231+
register()
232+
processInitialPing()
233+
234+
val result = contentScopeScriptsJsMessaging.postMessage(eventData)
235+
236+
verify(mockWebView, never()).safePostMessage(any(), any())
237+
assertFalse(result)
238+
}
239+
240+
@Test
241+
fun `when posting message and adsjs is enabled but webView not registered then do not post message`() = runTest {
242+
whenever(adsJsContentScopeScripts.isEnabled()).thenReturn(true)
243+
val eventData = SubscriptionEventData("feature", "subscription", JSONObject())
244+
processInitialPing()
245+
246+
val result = contentScopeScriptsJsMessaging.postMessage(eventData)
247+
248+
verify(mockWebView, never()).safePostMessage(any(), any())
249+
assertFalse(result)
250+
}
251+
252+
@Test
253+
fun `when posting message and adsjs is enabled but initialPing not processes then do not post message`() = runTest {
254+
whenever(adsJsContentScopeScripts.isEnabled()).thenReturn(true)
255+
val eventData = SubscriptionEventData("feature", "subscription", JSONObject())
256+
257+
val result = contentScopeScriptsJsMessaging.postMessage(eventData)
258+
259+
verify(mockWebView, never()).safePostMessage(any(), any())
260+
assertFalse(result)
261+
}
262+
263+
@Test
264+
fun `when posting message after getting initialPing and adsjs is enabled then post message`() = runTest {
265+
whenever(adsJsContentScopeScripts.isEnabled()).thenReturn(true)
266+
val eventData = SubscriptionEventData("feature", "subscription", JSONObject())
267+
register()
268+
processInitialPing()
269+
verify(mockWebView, never()).postWebMessage(any(), any())
270+
271+
val result = contentScopeScriptsJsMessaging.postMessage(eventData)
272+
273+
verify(mockWebView).safePostMessage(any(), any())
274+
assertTrue(result)
275+
}
276+
277+
private fun register() = runTest {
278+
contentScopeScriptsJsMessaging.register(mockWebView, callback)
279+
}
280+
281+
private fun processInitialPing() = runTest {
282+
val message = """
283+
{"context":"contentScopeScripts","featureName":"messaging","id":"debugId","method":"initialPing","params":{}}
284+
""".trimIndent()
285+
contentScopeScriptsJsMessaging.process(message, callback, mockReplyProxy)
286+
}
287+
224288
private val callback = object : AdsjsJsMessageCallback {
225289
var counter = 0
226290
override fun process(

0 commit comments

Comments
 (0)