Skip to content

Commit

Permalink
Merge pull request #13689 from woocommerce/issue/13684-gson-error-in-…
Browse files Browse the repository at this point in the history
…media-upload

Fix failing file uploads to products
  • Loading branch information
hichamboushaba authored Mar 10, 2025
2 parents 69d9264 + 73ba4d7 commit 39d1bda
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 29 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.wordpress.android.fluxc.network.rest.wpcom.media.wpv2

import com.google.gson.Gson
import okhttp3.Call
import okhttp3.Callback
import okhttp3.MediaType.Companion.toMediaType
Expand All @@ -24,6 +25,7 @@ import org.wordpress.android.fluxc.action.UploadAction.UPLOADED_MEDIA
import org.wordpress.android.fluxc.annotations.action.Action
import org.wordpress.android.fluxc.media.MediaTestUtils
import org.wordpress.android.fluxc.model.SiteModel
import org.wordpress.android.fluxc.network.rest.wpapi.media.MediaWPRESTResponse
import org.wordpress.android.fluxc.network.rest.wpcom.WPComNetwork
import org.wordpress.android.fluxc.network.rest.wpcom.auth.AccessToken
import org.wordpress.android.fluxc.store.MediaStore.ProgressPayload
Expand All @@ -37,6 +39,7 @@ class WPComV2MediaRestClientTest {
private val okHttpClient: OkHttpClient = mock()
private val dispatcher: Dispatcher = mock()
private val wpComNetwork: WPComNetwork = mock()
private val gson: Gson = Gson()
private val mockedCall: Call = mock()
private lateinit var countDownLatch: CountDownLatch
private lateinit var restClient: WPComV2MediaRestClient
Expand All @@ -46,11 +49,12 @@ class WPComV2MediaRestClientTest {
@Before
fun setup() {
restClient = WPComV2MediaRestClient(
dispatcher = dispatcher,
coroutineEngine = initCoroutineEngine(),
okHttpClient = okHttpClient,
accessToken = accessToken,
wpComNetwork = wpComNetwork
dispatcher = dispatcher,
coroutineEngine = initCoroutineEngine(),
okHttpClient = okHttpClient,
accessToken = accessToken,
wpComNetwork = wpComNetwork,
gson = gson
)
EventBus.getDefault().register(this)
}
Expand All @@ -61,14 +65,14 @@ class WPComV2MediaRestClientTest {
whenever(okHttpClient.newCall(any())).thenReturn(mockedCall)
whenever(mockedCall.enqueue(any())).then {
(it.arguments.first() as Callback).onResponse(
mockedCall,
mock {
on { body } doReturn UnitTestUtils.getStringFromResourceFile(
this::class.java,
"media/media-upload-wp-api-success.json"
).toResponseBody("application/json".toMediaType())
on { isSuccessful } doReturn true
}
mockedCall,
mock {
on { body } doReturn UnitTestUtils.getStringFromResourceFile(
this::class.java,
"media/media-upload-wp-api-success.json"
).toResponseBody("application/json".toMediaType())
on { isSuccessful } doReturn true
}
)
countDownLatch.countDown()
}
Expand Down Expand Up @@ -110,11 +114,11 @@ class WPComV2MediaRestClientTest {
whenever(okHttpClient.newCall(any())).thenReturn(mockedCall)
whenever(mockedCall.enqueue(any())).then {
(it.arguments.first() as Callback).onResponse(
mockedCall,
mock {
on { body } doReturn "".toResponseBody("application/json".toMediaType())
on { isSuccessful } doReturn true
}
mockedCall,
mock {
on { body } doReturn "".toResponseBody("application/json".toMediaType())
on { isSuccessful } doReturn true
}
)
countDownLatch.countDown()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.wordpress.android.fluxc.network.rest.wpapi.media

import com.google.gson.Gson
import okhttp3.Credentials
import okhttp3.OkHttpClient
import org.wordpress.android.fluxc.Dispatcher
Expand All @@ -23,9 +24,11 @@ class ApplicationPasswordsMediaRestClient @Inject constructor(
dispatcher: Dispatcher,
coroutineEngine: CoroutineEngine,
@Named("no-cookies") okHttpClient: OkHttpClient,
private val applicationPasswordsNetwork: ApplicationPasswordsNetwork
) : BaseWPV2MediaRestClient(dispatcher, coroutineEngine, okHttpClient) {
@Inject internal lateinit var applicationPasswordsManager: ApplicationPasswordsManager
private val applicationPasswordsNetwork: ApplicationPasswordsNetwork,
gson: Gson
) : BaseWPV2MediaRestClient(dispatcher, coroutineEngine, okHttpClient, gson) {
@Inject
internal lateinit var applicationPasswordsManager: ApplicationPasswordsManager

override fun WPAPIEndpoint.getFullUrl(site: SiteModel): String {
return (site.wpApiRestUrl ?: site.url.slashJoin("wp-json")).slashJoin(urlV2)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,12 @@ import java.io.IOException
import java.util.concurrent.ConcurrentHashMap
import javax.inject.Named

abstract class BaseWPV2MediaRestClient constructor(
abstract class BaseWPV2MediaRestClient(
private val dispatcher: Dispatcher,
private val coroutineEngine: CoroutineEngine,
@Named("regular") private val okHttpClient: OkHttpClient
@Named("regular") private val okHttpClient: OkHttpClient,
private val gson: Gson
) {
private val gson: Gson by lazy { Gson() }

private val currentUploads = ConcurrentHashMap<Int, CoroutineScope>()

protected abstract fun WPAPIEndpoint.getFullUrl(site: SiteModel): String
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.wordpress.android.fluxc.network.rest.wpcom.media.wpv2

import com.google.gson.Gson
import okhttp3.OkHttpClient
import org.wordpress.android.fluxc.Dispatcher
import org.wordpress.android.fluxc.annotations.endpoint.WPAPIEndpoint
Expand All @@ -21,13 +22,14 @@ class WPComV2MediaRestClient @Inject constructor(
coroutineEngine: CoroutineEngine,
@Named("regular") okHttpClient: OkHttpClient,
private val accessToken: AccessToken,
private val wpComNetwork: WPComNetwork
) : BaseWPV2MediaRestClient(dispatcher, coroutineEngine, okHttpClient) {
private val wpComNetwork: WPComNetwork,
gson: Gson
) : BaseWPV2MediaRestClient(dispatcher, coroutineEngine, okHttpClient, gson) {
override fun WPAPIEndpoint.getFullUrl(site: SiteModel): String = getWPComUrl(site.siteId)

override suspend fun getAuthorizationHeader(site: SiteModel): String = "Bearer ${accessToken.get()}"

override suspend fun <T:Any> executeGetGsonRequest(
override suspend fun <T : Any> executeGetGsonRequest(
site: SiteModel,
endpoint: WPAPIEndpoint,
params: Map<String, String>,
Expand All @@ -41,7 +43,7 @@ class WPComV2MediaRestClient @Inject constructor(
params = params,
)

return when(response) {
return when (response) {
is WPComGsonRequestBuilder.Response.Success -> WPAPIResponse.Success(response.data)
is WPComGsonRequestBuilder.Response.Error -> WPAPIResponse.Error(
WPAPINetworkError(response.error, response.error.apiError)
Expand Down

0 comments on commit 39d1bda

Please sign in to comment.