Skip to content

Commit 0c4353c

Browse files
committed
add getAccessToken implementation
1 parent d810b04 commit 0c4353c

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package com.duckduckgo.subscriptions.impl.messaging
1919
import com.duckduckgo.di.scopes.AppScope
2020
import com.duckduckgo.js.messaging.api.JsCallbackData
2121
import com.duckduckgo.subscriptions.api.SubscriptionsJSHelper
22+
import com.duckduckgo.subscriptions.impl.AccessTokenResult
2223
import com.duckduckgo.subscriptions.impl.SubscriptionsManager
2324
import com.squareup.anvil.annotations.ContributesBinding
2425
import javax.inject.Inject
@@ -52,6 +53,10 @@ class RealSubscriptionsJSHelper @Inject constructor(
5253
getSubscriptionDetailsData(featureName, method, it)
5354
}
5455

56+
METHOD_GET_AUTH_ACCESS_TOKEN -> id?.let {
57+
getAuthAccessTokenData(featureName, method, it)
58+
}
59+
5560
else -> null
5661
}
5762

@@ -72,6 +77,17 @@ class RealSubscriptionsJSHelper @Inject constructor(
7277
return JsCallbackData(jsonPayload, featureName, method, id)
7378
}
7479

80+
private suspend fun getAuthAccessTokenData(featureName: String, method: String, id: String): JsCallbackData {
81+
val jsonPayload = when (val result = subscriptionsManager.getAccessToken()) {
82+
is AccessTokenResult.Success -> JSONObject().apply {
83+
put(ACCESS_TOKEN, result.accessToken)
84+
}
85+
is AccessTokenResult.Failure -> JSONObject()
86+
}
87+
88+
return JsCallbackData(jsonPayload, featureName, method, id)
89+
}
90+
7591
companion object {
7692
private const val METHOD_HANDSHAKE = "handshake"
7793
private const val METHOD_SUBSCRIPTION_DETAILS = "subscriptionDetails"
@@ -89,5 +105,6 @@ class RealSubscriptionsJSHelper @Inject constructor(
89105
private const val EXPIRES_OR_RENEWS_AT = "expiresOrRenewsAt"
90106
private const val PAYMENT_PLATFORM = "paymentPlatform"
91107
private const val STATUS = "status"
108+
private const val ACCESS_TOKEN = "accessToken"
92109
}
93110
}

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

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.duckduckgo.common.test.CoroutineTestRule
55
import com.duckduckgo.js.messaging.api.JsCallbackData
66
import com.duckduckgo.subscriptions.api.SubscriptionStatus.AUTO_RENEWABLE
77
import com.duckduckgo.subscriptions.api.SubscriptionStatus.EXPIRED
8+
import com.duckduckgo.subscriptions.impl.AccessTokenResult
89
import com.duckduckgo.subscriptions.impl.SubscriptionsConstants
910
import com.duckduckgo.subscriptions.impl.SubscriptionsConstants.MONTHLY
1011
import com.duckduckgo.subscriptions.impl.SubscriptionsConstants.YEARLY
@@ -20,6 +21,7 @@ import org.junit.Test
2021
import org.junit.runner.RunWith
2122
import org.mockito.kotlin.mock
2223
import org.mockito.kotlin.whenever
24+
import org.robolectric.RobolectricTestRunner
2325

2426
@RunWith(AndroidJUnit4::class)
2527
class RealSubscriptionsJSHelperTest {
@@ -168,4 +170,45 @@ class RealSubscriptionsJSHelperTest {
168170
assertEquals(expected.featureName, result.featureName)
169171
assertEquals(expected.params.toString(), result.params.toString())
170172
}
173+
174+
@Test
175+
fun whenGetAuthAccessTokenRequestWithSuccessfulTokenThenReturnJsCallbackDataWithToken() = runTest {
176+
val method = "getAuthAccessToken"
177+
val id = "123"
178+
val expectedToken = "test-access-token"
179+
180+
whenever(mockSubscriptionsManager.getAccessToken()).thenReturn(AccessTokenResult.Success(expectedToken))
181+
182+
val result = testee.processJsCallbackMessage(featureName, method, id, null)
183+
184+
val jsonPayload = JSONObject().apply {
185+
put("accessToken", expectedToken)
186+
}
187+
188+
val expected = JsCallbackData(jsonPayload, featureName, method, id)
189+
190+
assertEquals(expected.id, result?.id)
191+
assertEquals(expected.featureName, result?.featureName)
192+
assertEquals(expected.method, result?.method)
193+
assertEquals(expected.params.toString(), result?.params.toString())
194+
}
195+
196+
@Test
197+
fun whenGetAuthAccessTokenRequestWithFailedTokenThenReturnJsCallbackDataWithEmptyObject() = runTest {
198+
val method = "getAuthAccessToken"
199+
val id = "123"
200+
201+
whenever(mockSubscriptionsManager.getAccessToken()).thenReturn(AccessTokenResult.Failure("Token not found"))
202+
203+
val result = testee.processJsCallbackMessage(featureName, method, id, null)
204+
205+
val jsonPayload = JSONObject()
206+
207+
val expected = JsCallbackData(jsonPayload, featureName, method, id)
208+
209+
assertEquals(expected.id, result?.id)
210+
assertEquals(expected.featureName, result?.featureName)
211+
assertEquals(expected.method, result?.method)
212+
assertEquals(expected.params.toString(), result?.params.toString())
213+
}
171214
}

0 commit comments

Comments
 (0)