Skip to content

Commit d5a6441

Browse files
committed
add getFeatureConfig implementation
1 parent 0c4353c commit d5a6441

File tree

2 files changed

+69
-1
lines changed

2 files changed

+69
-1
lines changed

subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/messaging/SubscriptionsJSHelper.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import com.duckduckgo.di.scopes.AppScope
2020
import com.duckduckgo.js.messaging.api.JsCallbackData
2121
import com.duckduckgo.subscriptions.api.SubscriptionsJSHelper
2222
import com.duckduckgo.subscriptions.impl.AccessTokenResult
23+
import com.duckduckgo.subscriptions.impl.PrivacyProFeature
2324
import com.duckduckgo.subscriptions.impl.SubscriptionsManager
2425
import com.squareup.anvil.annotations.ContributesBinding
2526
import javax.inject.Inject
@@ -29,6 +30,7 @@ import org.json.JSONObject
2930
@ContributesBinding(AppScope::class)
3031
class RealSubscriptionsJSHelper @Inject constructor(
3132
private val subscriptionsManager: SubscriptionsManager,
33+
private val privacyProFeature: PrivacyProFeature,
3234
) : SubscriptionsJSHelper {
3335

3436
override suspend fun processJsCallbackMessage(
@@ -57,6 +59,10 @@ class RealSubscriptionsJSHelper @Inject constructor(
5759
getAuthAccessTokenData(featureName, method, it)
5860
}
5961

62+
METHOD_GET_FEATURE_CONFIG -> id?.let {
63+
getFeatureConfigData(featureName, method, it)
64+
}
65+
6066
else -> null
6167
}
6268

@@ -88,6 +94,14 @@ class RealSubscriptionsJSHelper @Inject constructor(
8894
return JsCallbackData(jsonPayload, featureName, method, id)
8995
}
9096

97+
private suspend fun getFeatureConfigData(featureName: String, method: String, id: String): JsCallbackData {
98+
val jsonPayload = JSONObject().apply {
99+
put(USE_PAID_DUCK_AI, privacyProFeature.duckAiPlus().isEnabled())
100+
}
101+
102+
return JsCallbackData(jsonPayload, featureName, method, id)
103+
}
104+
91105
companion object {
92106
private const val METHOD_HANDSHAKE = "handshake"
93107
private const val METHOD_SUBSCRIPTION_DETAILS = "subscriptionDetails"
@@ -106,5 +120,6 @@ class RealSubscriptionsJSHelper @Inject constructor(
106120
private const val PAYMENT_PLATFORM = "paymentPlatform"
107121
private const val STATUS = "status"
108122
private const val ACCESS_TOKEN = "accessToken"
123+
private const val USE_PAID_DUCK_AI = "usePaidDuckAi"
109124
}
110125
}

subscriptions/subscriptions-impl/src/test/java/com/duckduckgo/subscriptions/impl/messaging/RealSubscriptionsJSHelperTest.kt

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@ import com.duckduckgo.subscriptions.impl.SubscriptionsConstants.MONTHLY
1111
import com.duckduckgo.subscriptions.impl.SubscriptionsConstants.YEARLY
1212
import com.duckduckgo.subscriptions.impl.SubscriptionsManager
1313
import com.duckduckgo.subscriptions.impl.repository.Subscription
14+
import com.duckduckgo.subscriptions.impl.PrivacyProFeature
15+
import com.duckduckgo.feature.toggles.api.FakeFeatureToggleFactory
1416
import kotlinx.coroutines.test.runTest
1517
import org.json.JSONArray
1618
import org.json.JSONObject
1719
import org.junit.Assert.assertEquals
1820
import org.junit.Assert.assertNull
21+
import org.junit.Before
1922
import org.junit.Rule
2023
import org.junit.Test
2124
import org.junit.runner.RunWith
@@ -30,11 +33,17 @@ class RealSubscriptionsJSHelperTest {
3033
var coroutineRule = CoroutineTestRule()
3134

3235
private val mockSubscriptionsManager: SubscriptionsManager = mock()
36+
private val privacyProFeature = FakeFeatureToggleFactory.create(PrivacyProFeature::class.java)
3337

34-
private val testee = RealSubscriptionsJSHelper(mockSubscriptionsManager)
38+
private val testee = RealSubscriptionsJSHelper(mockSubscriptionsManager, privacyProFeature)
3539

3640
private val featureName = "subscriptions"
3741

42+
@Before
43+
fun setUp() {
44+
// Set up any necessary initializations or mocks
45+
}
46+
3847
@Test
3948
fun whenMethodIsUnknownThenReturnNull() = runTest {
4049
val method = "unknownMethod"
@@ -211,4 +220,48 @@ class RealSubscriptionsJSHelperTest {
211220
assertEquals(expected.method, result?.method)
212221
assertEquals(expected.params.toString(), result?.params.toString())
213222
}
223+
224+
@Test
225+
fun whenGetFeatureConfigRequestThenReturnJsCallbackDataWithUsePaidDuckAiFlag() = runTest {
226+
val method = "getFeatureConfig"
227+
val id = "123"
228+
val usePaidDuckAi = true
229+
230+
privacyProFeature.duckAiPlus().setRawStoredState(com.duckduckgo.feature.toggles.api.Toggle.State(usePaidDuckAi))
231+
232+
val result = testee.processJsCallbackMessage(featureName, method, id, null)
233+
234+
val jsonPayload = JSONObject().apply {
235+
put("usePaidDuckAi", usePaidDuckAi)
236+
}
237+
238+
val expected = JsCallbackData(jsonPayload, featureName, method, id)
239+
240+
assertEquals(expected.id, result?.id)
241+
assertEquals(expected.featureName, result?.featureName)
242+
assertEquals(expected.method, result?.method)
243+
assertEquals(expected.params.toString(), result?.params.toString())
244+
}
245+
246+
@Test
247+
fun whenGetFeatureConfigRequestWithDisabledFlagThenReturnJsCallbackDataWithUsePaidDuckAiFalse() = runTest {
248+
val method = "getFeatureConfig"
249+
val id = "123"
250+
val usePaidDuckAi = false
251+
252+
privacyProFeature.duckAiPlus().setRawStoredState(com.duckduckgo.feature.toggles.api.Toggle.State(usePaidDuckAi))
253+
254+
val result = testee.processJsCallbackMessage(featureName, method, id, null)
255+
256+
val jsonPayload = JSONObject().apply {
257+
put("usePaidDuckAi", usePaidDuckAi)
258+
}
259+
260+
val expected = JsCallbackData(jsonPayload, featureName, method, id)
261+
262+
assertEquals(expected.id, result?.id)
263+
assertEquals(expected.featureName, result?.featureName)
264+
assertEquals(expected.method, result?.method)
265+
assertEquals(expected.params.toString(), result?.params.toString())
266+
}
214267
}

0 commit comments

Comments
 (0)