Skip to content
This repository was archived by the owner on Feb 4, 2025. It is now read-only.

Commit 2c9c533

Browse files
Merge pull request #2620 from wordpress-mobile/application-passwords/migrate-tracker-leaderboards
Woo REST API: Migrate LeaderboardsRestClient and TrackerRestClient.
2 parents c07d772 + 1605ee7 commit 2c9c533

File tree

4 files changed

+50
-92
lines changed

4 files changed

+50
-92
lines changed

example/src/test/java/org/wordpress/android/fluxc/wc/leaderboards/LeaderboardsRestClientTest.kt

Lines changed: 30 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,15 @@ import org.assertj.core.api.Assertions.assertThat
44
import org.junit.Before
55
import org.junit.Test
66
import org.mockito.kotlin.mock
7-
import org.mockito.kotlin.times
87
import org.mockito.kotlin.verify
98
import org.mockito.kotlin.whenever
109
import org.wordpress.android.fluxc.generated.endpoint.WOOCOMMERCE
1110
import org.wordpress.android.fluxc.network.BaseRequest.BaseNetworkError
1211
import org.wordpress.android.fluxc.network.BaseRequest.GenericErrorType.NETWORK_ERROR
13-
import org.wordpress.android.fluxc.network.rest.wpcom.WPComGsonRequest.WPComGsonNetworkError
14-
import org.wordpress.android.fluxc.network.rest.wpcom.jetpacktunnel.JetpackTunnelGsonRequestBuilder
15-
import org.wordpress.android.fluxc.network.rest.wpcom.jetpacktunnel.JetpackTunnelGsonRequestBuilder.JetpackResponse.JetpackError
16-
import org.wordpress.android.fluxc.network.rest.wpcom.jetpacktunnel.JetpackTunnelGsonRequestBuilder.JetpackResponse.JetpackSuccess
12+
import org.wordpress.android.fluxc.network.rest.wpapi.WPAPINetworkError
13+
import org.wordpress.android.fluxc.network.rest.wpapi.WPAPIResponse
1714
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooError
15+
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooNetwork
1816
import org.wordpress.android.fluxc.network.rest.wpcom.wc.leaderboards.LeaderboardsApiResponse
1917
import org.wordpress.android.fluxc.network.rest.wpcom.wc.leaderboards.LeaderboardsRestClient
2018
import org.wordpress.android.fluxc.test
@@ -23,27 +21,20 @@ import org.wordpress.android.fluxc.wc.leaderboards.WCLeaderboardsTestFixtures.st
2321

2422
class LeaderboardsRestClientTest {
2523
private lateinit var restClientUnderTest: LeaderboardsRestClient
26-
private lateinit var requestBuilder: JetpackTunnelGsonRequestBuilder
27-
private lateinit var jetpackSuccessResponse: JetpackSuccess<Array<LeaderboardsApiResponse>>
28-
private lateinit var jetpackErrorResponse: JetpackError<Array<LeaderboardsApiResponse>>
24+
private lateinit var wpApiSuccessResponse: WPAPIResponse.Success<Array<LeaderboardsApiResponse>>
25+
private lateinit var wpApiErrorResponse: WPAPIResponse.Error<Array<LeaderboardsApiResponse>>
26+
27+
private val wooNetwork: WooNetwork = mock()
2928

3029
@Before
3130
fun setUp() {
32-
requestBuilder = mock()
33-
jetpackSuccessResponse = mock()
34-
jetpackErrorResponse = mock()
35-
restClientUnderTest = LeaderboardsRestClient(
36-
mock(),
37-
mock(),
38-
mock(),
39-
mock(),
40-
mock(),
41-
requestBuilder
42-
)
31+
wpApiSuccessResponse = mock()
32+
wpApiErrorResponse = mock()
33+
restClientUnderTest = LeaderboardsRestClient(wooNetwork)
4334
}
4435

4536
@Test
46-
fun `fetch leaderboards should call syncGetRequest with correct parameters and return expected response`() = test {
37+
fun `fetch leaderboards should call correct request with correct parameters and return expected response`() = test {
4738
val expectedResult = generateSampleLeaderboardsApiResponse()
4839
configureSuccessRequest(expectedResult!!)
4940
val response = restClientUnderTest.fetchLeaderboards(
@@ -55,18 +46,17 @@ class LeaderboardsRestClientTest {
5546
interval = "day"
5647
)
5748

58-
verify(requestBuilder, times(1)).syncGetRequest(
59-
restClientUnderTest,
60-
stubSite,
61-
WOOCOMMERCE.leaderboards.pathV4Analytics,
62-
mapOf(
49+
verify(wooNetwork).executeGetGsonRequest(
50+
site = stubSite,
51+
path = WOOCOMMERCE.leaderboards.pathV4Analytics,
52+
params = mapOf(
6353
"before" to "22-10-2022",
6454
"after" to "10-10-2022",
6555
"per_page" to "5",
6656
"interval" to "day",
6757
"force_cache_refresh" to "false",
6858
),
69-
Array<LeaderboardsApiResponse>::class.java
59+
clazz = Array<LeaderboardsApiResponse>::class.java
7060
)
7161
assertThat(response).isNotNull
7262
assertThat(response.result).isNotNull
@@ -93,40 +83,38 @@ class LeaderboardsRestClientTest {
9383
}
9484

9585
private suspend fun configureSuccessRequest(expectedResult: Array<LeaderboardsApiResponse>) {
96-
whenever(jetpackSuccessResponse.data).thenReturn(expectedResult)
86+
whenever(wpApiSuccessResponse.data).thenReturn(expectedResult)
9787
whenever(
98-
requestBuilder.syncGetRequest(
99-
restClientUnderTest,
100-
stubSite,
101-
WOOCOMMERCE.leaderboards.pathV4Analytics,
102-
mapOf(
88+
wooNetwork.executeGetGsonRequest(
89+
site = stubSite,
90+
path = WOOCOMMERCE.leaderboards.pathV4Analytics,
91+
params = mapOf(
10392
"after" to "10-10-2022",
10493
"before" to "22-10-2022",
10594
"per_page" to "5",
10695
"interval" to "day",
10796
"force_cache_refresh" to "false",
10897
),
109-
Array<LeaderboardsApiResponse>::class.java
98+
clazz = Array<LeaderboardsApiResponse>::class.java
11099
)
111-
).thenReturn(jetpackSuccessResponse)
100+
).thenReturn(wpApiSuccessResponse)
112101
}
113102

114103
private suspend fun configureErrorRequest() {
115-
whenever(jetpackErrorResponse.error).thenReturn(WPComGsonNetworkError(BaseNetworkError(NETWORK_ERROR)))
104+
whenever(wpApiErrorResponse.error).thenReturn(WPAPINetworkError(BaseNetworkError(NETWORK_ERROR)))
116105
whenever(
117-
requestBuilder.syncGetRequest(
118-
restClientUnderTest,
119-
stubSite,
120-
WOOCOMMERCE.leaderboards.pathV4Analytics,
121-
mapOf(
106+
wooNetwork.executeGetGsonRequest(
107+
site = stubSite,
108+
path = WOOCOMMERCE.leaderboards.pathV4Analytics,
109+
params = mapOf(
122110
"after" to "10-10-2022",
123111
"before" to "22-10-2022",
124112
"per_page" to "5",
125113
"interval" to "day",
126114
"force_cache_refresh" to "false",
127115
),
128-
Array<LeaderboardsApiResponse>::class.java
116+
clazz = Array<LeaderboardsApiResponse>::class.java
129117
)
130-
).thenReturn(jetpackErrorResponse)
118+
).thenReturn(wpApiErrorResponse)
131119
}
132120
}

example/src/test/java/org/wordpress/android/fluxc/wc/leaderboards/WCLeaderboardsTestFixtures.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import org.wordpress.android.fluxc.network.rest.wpcom.wc.leaderboards.Leaderboar
77
import org.wordpress.android.fluxc.network.rest.wpcom.wc.product.ProductApiResponse
88

99
object WCLeaderboardsTestFixtures {
10-
val stubSite = SiteModel().apply { id = 321 }
10+
val stubSite = SiteModel().apply {
11+
id = 321
12+
origin = SiteModel.ORIGIN_XMLRPC
13+
}
1114

1215
fun generateSampleProductList() = listOf(
1316
"wc/top-performer-product-1.json",

plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/leaderboards/LeaderboardsRestClient.kt

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,15 @@
11
package org.wordpress.android.fluxc.network.rest.wpcom.wc.leaderboards
22

3-
import android.content.Context
4-
import com.android.volley.RequestQueue
5-
import org.wordpress.android.fluxc.Dispatcher
63
import org.wordpress.android.fluxc.generated.endpoint.WOOCOMMERCE
74
import org.wordpress.android.fluxc.model.SiteModel
8-
import org.wordpress.android.fluxc.network.UserAgent
9-
import org.wordpress.android.fluxc.network.rest.wpcom.BaseWPComRestClient
10-
import org.wordpress.android.fluxc.network.rest.wpcom.auth.AccessToken
11-
import org.wordpress.android.fluxc.network.rest.wpcom.jetpacktunnel.JetpackTunnelGsonRequestBuilder
5+
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooNetwork
126
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooPayload
13-
import org.wordpress.android.fluxc.utils.handleResult
7+
import org.wordpress.android.fluxc.utils.toWooPayload
148
import javax.inject.Inject
15-
import javax.inject.Named
169
import javax.inject.Singleton
1710

1811
@Singleton
19-
class LeaderboardsRestClient @Inject constructor(
20-
appContext: Context?,
21-
dispatcher: Dispatcher,
22-
@Named("regular") requestQueue: RequestQueue,
23-
accessToken: AccessToken,
24-
userAgent: UserAgent,
25-
private val jetpackTunnelGsonRequestBuilder: JetpackTunnelGsonRequestBuilder
26-
) : BaseWPComRestClient(appContext, dispatcher, requestQueue, accessToken, userAgent) {
12+
class LeaderboardsRestClient @Inject constructor(private val wooNetwork: WooNetwork) {
2713
@Suppress("LongParameterList")
2814
suspend fun fetchLeaderboards(
2915
site: SiteModel,
@@ -41,13 +27,14 @@ class LeaderboardsRestClient @Inject constructor(
4127

4228
val parameters = createParameters(startDate, endDate, quantity, forceRefresh, interval)
4329

44-
return jetpackTunnelGsonRequestBuilder.syncGetRequest(
45-
restClient = this@LeaderboardsRestClient,
30+
val response = wooNetwork.executeGetGsonRequest(
4631
site = site,
47-
url = url,
48-
params = parameters,
49-
clazz = Array<LeaderboardsApiResponse>::class.java
50-
).handleResult()
32+
path = url,
33+
clazz = Array<LeaderboardsApiResponse>::class.java,
34+
params = parameters
35+
)
36+
37+
return response.toWooPayload()
5138
}
5239

5340
@Suppress("LongParameterList")
Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,28 @@
11
package org.wordpress.android.fluxc.network.rest.wpcom.wc.tracker
22

3-
import android.content.Context
4-
import com.android.volley.RequestQueue
5-
import org.wordpress.android.fluxc.Dispatcher
63
import org.wordpress.android.fluxc.generated.endpoint.WOOCOMMERCE
74
import org.wordpress.android.fluxc.model.SiteModel
8-
import org.wordpress.android.fluxc.network.UserAgent
9-
import org.wordpress.android.fluxc.network.rest.wpcom.BaseWPComRestClient
10-
import org.wordpress.android.fluxc.network.rest.wpcom.auth.AccessToken
11-
import org.wordpress.android.fluxc.network.rest.wpcom.jetpacktunnel.JetpackTunnelGsonRequestBuilder
12-
import org.wordpress.android.fluxc.network.rest.wpcom.jetpacktunnel.JetpackTunnelGsonRequestBuilder.JetpackResponse.JetpackError
13-
import org.wordpress.android.fluxc.network.rest.wpcom.jetpacktunnel.JetpackTunnelGsonRequestBuilder.JetpackResponse.JetpackSuccess
5+
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooNetwork
146
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooPayload
15-
import org.wordpress.android.fluxc.network.rest.wpcom.wc.toWooError
7+
import org.wordpress.android.fluxc.utils.toWooPayload
168
import javax.inject.Inject
17-
import javax.inject.Named
189
import javax.inject.Singleton
1910

2011
@Singleton
21-
internal class TrackerRestClient @Inject constructor(
22-
appContext: Context,
23-
dispatcher: Dispatcher,
24-
@Named("regular") requestQueue: RequestQueue,
25-
accessToken: AccessToken,
26-
userAgent: UserAgent,
27-
private val requestBuilder: JetpackTunnelGsonRequestBuilder
28-
) : BaseWPComRestClient(appContext, dispatcher, requestQueue, accessToken, userAgent) {
12+
internal class TrackerRestClient @Inject constructor(private val wooNetwork: WooNetwork) {
2913
suspend fun sendTelemetry(appVersion: String, site: SiteModel): WooPayload<Unit> {
3014
val url = WOOCOMMERCE.tracker.pathWcTelemetry
3115

32-
val response = requestBuilder.syncPostRequest(
33-
restClient = this,
16+
val response = wooNetwork.executePostGsonRequest(
3417
site = site,
35-
url = url,
18+
path = url,
3619
clazz = Unit::class.java,
3720
body = mapOf(
3821
"platform" to "android",
3922
"version" to appVersion
4023
)
4124
)
4225

43-
return when (response) {
44-
is JetpackSuccess -> WooPayload(Unit)
45-
is JetpackError -> WooPayload(response.error.toWooError())
46-
}
26+
return response.toWooPayload()
4727
}
4828
}

0 commit comments

Comments
 (0)