Skip to content

Commit 4dfa7f8

Browse files
authored
Merge pull request #212 from Ecwid/ECWID-107598
Ecwid 107598: add method to upload product variation image async
2 parents a148665 + 2c3b460 commit 4dfa7f8

5 files changed

Lines changed: 79 additions & 0 deletions

File tree

src/main/kotlin/com/ecwid/apiclient/v3/ApiClient.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ interface BatchApiClient {
250250
interface ProductVariationsApiClient {
251251
fun createProductVariation(request: CreateProductVariationRequest): CreateProductVariationResult
252252
fun uploadVariationImage(request: ProductVariationImageUploadRequest): ProductVariationImageUploadResult
253+
fun uploadProductVariationImageAsync(request: ProductVariationImageAsyncUploadRequest): ProductVariationImageAsyncUploadResult
253254
fun getAllProductVariations(request: ProductVariationsRequest): ProductVariationsResult
254255
fun getProductVariation(request: ProductVariationDetailsRequest): FetchedVariation
255256
fun updateProductVariation(request: UpdateProductVariationRequest): UpdateProductVariationResult
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.ecwid.apiclient.v3.dto.variation.request
2+
3+
import com.ecwid.apiclient.v3.dto.ApiRequest
4+
import com.ecwid.apiclient.v3.dto.common.AsyncPictureData
5+
import com.ecwid.apiclient.v3.httptransport.HttpBody
6+
import com.ecwid.apiclient.v3.impl.RequestInfo
7+
8+
data class ProductVariationImageAsyncUploadRequest(
9+
val productId: Int = 0,
10+
val variationId: Int = 0,
11+
val asyncPictureData: AsyncPictureData = AsyncPictureData()
12+
) : ApiRequest {
13+
override fun toRequestInfo(): RequestInfo {
14+
return RequestInfo.createPostRequest(
15+
pathSegments = listOf(
16+
"products",
17+
"$productId",
18+
"combinations",
19+
"$variationId",
20+
"image",
21+
"async"
22+
),
23+
params = mapOf(),
24+
httpBody = HttpBody.JsonBody(obj = asyncPictureData)
25+
)
26+
}
27+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.ecwid.apiclient.v3.dto.variation.result
2+
3+
import com.ecwid.apiclient.v3.dto.common.ApiResultDTO
4+
5+
class ProductVariationImageAsyncUploadResult : ApiResultDTO

src/main/kotlin/com/ecwid/apiclient/v3/impl/ProductVariationsApiClientImpl.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package com.ecwid.apiclient.v3.impl
22

33
import com.ecwid.apiclient.v3.ApiClientHelper
44
import com.ecwid.apiclient.v3.ProductVariationsApiClient
5+
import com.ecwid.apiclient.v3.dto.variation.request.ProductVariationImageAsyncUploadRequest
6+
import com.ecwid.apiclient.v3.dto.variation.result.ProductVariationImageAsyncUploadResult
57
import com.ecwid.apiclient.v3.dto.variation.request.*
68
import com.ecwid.apiclient.v3.dto.variation.result.*
79

@@ -14,6 +16,9 @@ internal class ProductVariationsApiClientImpl(
1416
override fun uploadVariationImage(request: ProductVariationImageUploadRequest) =
1517
apiClientHelper.makeObjectResultRequest<ProductVariationImageUploadResult>(request)
1618

19+
override fun uploadProductVariationImageAsync(request: ProductVariationImageAsyncUploadRequest) =
20+
apiClientHelper.makeObjectResultRequest<ProductVariationImageAsyncUploadResult>(request)
21+
1722
override fun deleteVariationImage(request: ProductVariationImageDeleteRequest) =
1823
apiClientHelper.makeObjectResultRequest<ProductVariationImageDeleteResult>(request)
1924

src/test/kotlin/com/ecwid/apiclient/v3/entity/VariationsTest.kt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.ecwid.apiclient.v3.entity
22

33
import com.ecwid.apiclient.v3.converter.toUpdated
4+
import com.ecwid.apiclient.v3.dto.common.AsyncPictureData
45
import com.ecwid.apiclient.v3.dto.common.UploadFileData
56
import com.ecwid.apiclient.v3.dto.product.request.ProductCreateRequest
67
import com.ecwid.apiclient.v3.dto.product.request.ProductDetailsRequest
@@ -284,6 +285,46 @@ class VariationsTest : BaseEntityTest() {
284285
val fetchedVariation2 = apiClient.getProductVariation(productVariationDetailsRequest)
285286
Assertions.assertNull(fetchedVariation2.imageUrl)
286287
}
288+
289+
@Test
290+
fun `test uploading product variation image asynchronously`() {
291+
val productPrice = randomPrice()
292+
val productCreateRequest = ProductCreateRequest(
293+
newProduct = UpdatedProduct(
294+
price = productPrice,
295+
name = "Product ${randomAlphanumeric(8)}",
296+
sku = "testVariationImageUploadAsync",
297+
options = listOf(generateProductRadioOption("Test", listOf("1", "2", "3", "4", "5")))
298+
)
299+
)
300+
val productCreateResult = apiClient.createProduct(productCreateRequest)
301+
val newProductId = productCreateResult.id
302+
val testVariationPrice = randomPrice()
303+
val testVariationWeight = randomWeight()
304+
val createProductVariationRequest = CreateProductVariationRequest(
305+
productId = newProductId,
306+
newVariation = UpdatedVariation(
307+
sku = "testVariation1",
308+
quantity = 2,
309+
price = testVariationPrice,
310+
weight = testVariationWeight,
311+
options = listOf(UpdatedVariation.Option(name = "Test", value = "5"))
312+
)
313+
)
314+
val createProductVariationResult = apiClient.createProductVariation(createProductVariationRequest)
315+
val newVariationId = createProductVariationResult.id
316+
val uploadImageAsyncReq = ProductVariationImageAsyncUploadRequest(
317+
productId = newProductId,
318+
variationId = newVariationId,
319+
asyncPictureData = AsyncPictureData("https://example.com/dummy.jpg", 100, 200)
320+
)
321+
apiClient.uploadProductVariationImageAsync(uploadImageAsyncReq)
322+
val fetchedProduct = apiClient.getProductDetails(ProductDetailsRequest(productId = newProductId))
323+
val variations = fetchedProduct.combinations
324+
assertEquals(variations?.size, 1)
325+
assertEquals(variations?.get(0)?.originalImageUrl, uploadImageAsyncReq.asyncPictureData.url)
326+
}
327+
287328
}
288329

289330
private fun generateProductSelectOption(name: String, values: List<String>): UpdatedProduct.ProductOption {

0 commit comments

Comments
 (0)