-
Notifications
You must be signed in to change notification settings - Fork 130
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #13167 from woocommerce/issue/12289-get-accoutn-se…
…ttings [Shipping labels]: Get account settings
- Loading branch information
Showing
9 changed files
with
232 additions
and
14 deletions.
There are no files selected for viewing
28 changes: 28 additions & 0 deletions
28
...c/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/FetchAccountSettings.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package com.woocommerce.android.ui.orders.wooshippinglabels | ||
|
||
import com.woocommerce.android.tools.SelectedSite | ||
import com.woocommerce.android.ui.orders.wooshippinglabels.models.StoreOptionsModel | ||
import com.woocommerce.android.ui.orders.wooshippinglabels.networking.WooShippingLabelRepository | ||
import javax.inject.Inject | ||
|
||
class FetchAccountSettings @Inject constructor( | ||
private val shippingRepository: WooShippingLabelRepository, | ||
private val selectedSite: SelectedSite | ||
) { | ||
suspend operator fun invoke(): Result<StoreOptionsModel> { | ||
return selectedSite.getOrNull()?.let { | ||
val response = shippingRepository.fetchAccountSettings(it) | ||
val result = response.model | ||
when { | ||
response.isError.not() && result != null && result != StoreOptionsModel.EMPTY -> { | ||
Result.success(result) | ||
} | ||
|
||
else -> { | ||
val message = response.error?.message ?: "Unknown error" | ||
Result.failure(Exception(message)) | ||
} | ||
} | ||
} ?: Result.failure(Exception("No site selected")) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
14 changes: 14 additions & 0 deletions
14
...ce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/networking/DTOs.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package com.woocommerce.android.ui.orders.wooshippinglabels.networking | ||
|
||
import com.google.gson.annotations.SerializedName | ||
|
||
data class AccountSettingsDTO( | ||
val storeOptions: StoreOptionsDTO | ||
) | ||
|
||
data class StoreOptionsDTO( | ||
@SerializedName("currency_symbol") val currencySymbol: String? = null, | ||
@SerializedName("dimension_unit") val dimensionUnit: String? = null, | ||
@SerializedName("weight_unit") val weightUnit: String? = null, | ||
@SerializedName("origin_country") val originCountry: String? = null | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
15 changes: 15 additions & 0 deletions
15
...woocommerce/android/ui/orders/wooshippinglabels/networking/WooShippingNetworkingMapper.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package com.woocommerce.android.ui.orders.wooshippinglabels.networking | ||
|
||
import com.woocommerce.android.ui.orders.wooshippinglabels.models.StoreOptionsModel | ||
import javax.inject.Inject | ||
|
||
class WooShippingNetworkingMapper @Inject constructor() { | ||
operator fun invoke(storeOptionsDTO: StoreOptionsDTO): StoreOptionsModel { | ||
return StoreOptionsModel( | ||
currencySymbol = storeOptionsDTO.currencySymbol.orEmpty(), | ||
dimensionUnit = storeOptionsDTO.dimensionUnit.orEmpty(), | ||
weightUnit = storeOptionsDTO.weightUnit.orEmpty(), | ||
originCountry = storeOptionsDTO.originCountry.orEmpty() | ||
) | ||
} | ||
} |
76 changes: 76 additions & 0 deletions
76
...t/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/FetchAccountSettingsTests.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
package com.woocommerce.android.ui.orders.wooshippinglabels | ||
|
||
import com.woocommerce.android.tools.SelectedSite | ||
import com.woocommerce.android.ui.orders.wooshippinglabels.models.StoreOptionsModel | ||
import com.woocommerce.android.ui.orders.wooshippinglabels.networking.WooShippingLabelRepository | ||
import com.woocommerce.android.viewmodel.BaseUnitTest | ||
import kotlinx.coroutines.ExperimentalCoroutinesApi | ||
import org.mockito.kotlin.any | ||
import org.mockito.kotlin.doReturn | ||
import org.mockito.kotlin.mock | ||
import org.mockito.kotlin.whenever | ||
import org.wordpress.android.fluxc.model.SiteModel | ||
import org.wordpress.android.fluxc.network.BaseRequest | ||
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooError | ||
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooErrorType | ||
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooResult | ||
import kotlin.test.Test | ||
|
||
@OptIn(ExperimentalCoroutinesApi::class) | ||
class FetchAccountSettingsTests : BaseUnitTest() { | ||
private val shippingRepository: WooShippingLabelRepository = mock() | ||
private val selectedSite: SelectedSite = mock { | ||
on { getOrNull() } doReturn SiteModel().apply { | ||
url = "https://example.com" | ||
} | ||
} | ||
|
||
private val defaultStoreOptions = StoreOptionsModel( | ||
weightUnit = "kg", | ||
currencySymbol = "$", | ||
dimensionUnit = "cm", | ||
originCountry = "US" | ||
) | ||
|
||
val sut = FetchAccountSettings( | ||
shippingRepository = shippingRepository, | ||
selectedSite = selectedSite | ||
) | ||
|
||
@Test | ||
fun `when selected site is null then return failure`() = testBlocking { | ||
whenever(selectedSite.getOrNull()).doReturn(null) | ||
val result = sut.invoke() | ||
assert(result.isFailure) | ||
} | ||
|
||
@Test | ||
fun `when fetch account settings fails then return failure`() = testBlocking { | ||
whenever(shippingRepository.fetchAccountSettings(any())).doReturn( | ||
WooResult(WooError(WooErrorType.GENERIC_ERROR, BaseRequest.GenericErrorType.UNKNOWN)) | ||
) | ||
|
||
val result = sut.invoke() | ||
assert(result.isFailure) | ||
} | ||
|
||
@Test | ||
fun `when fetch account settings is empty then return failure`() = testBlocking { | ||
whenever(shippingRepository.fetchAccountSettings(any())).doReturn( | ||
WooResult(StoreOptionsModel.EMPTY) | ||
) | ||
|
||
val result = sut.invoke() | ||
assert(result.isFailure) | ||
} | ||
|
||
@Test | ||
fun `when fetch account settings succeed then return success`() = testBlocking { | ||
whenever(shippingRepository.fetchAccountSettings(any())).doReturn( | ||
WooResult(defaultStoreOptions) | ||
) | ||
|
||
val result = sut.invoke() | ||
assert(result.isSuccess) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
43 changes: 43 additions & 0 deletions
43
...ommerce/android/ui/orders/wooshippinglabels/networking/WooShippingNetworkingMapperTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package com.woocommerce.android.ui.orders.wooshippinglabels.networking | ||
|
||
import com.woocommerce.android.ui.orders.wooshippinglabels.models.StoreOptionsModel | ||
import com.woocommerce.android.viewmodel.BaseUnitTest | ||
import kotlinx.coroutines.ExperimentalCoroutinesApi | ||
import kotlin.test.Test | ||
import kotlin.test.assertEquals | ||
|
||
@OptIn(ExperimentalCoroutinesApi::class) | ||
class WooShippingNetworkingMapperTest : BaseUnitTest() { | ||
val sut = WooShippingNetworkingMapper() | ||
|
||
@Test | ||
fun `when all field are null then return empty model`() { | ||
val emptyDTO = StoreOptionsDTO( | ||
weightUnit = null, | ||
currencySymbol = null, | ||
dimensionUnit = null, | ||
originCountry = null | ||
) | ||
|
||
val result = sut.invoke(emptyDTO) | ||
|
||
assert(result == StoreOptionsModel.EMPTY) | ||
} | ||
|
||
@Test | ||
fun `when a dto is received then return the expected model`() { | ||
val dto = StoreOptionsDTO( | ||
weightUnit = "kg", | ||
currencySymbol = "$", | ||
dimensionUnit = "cm", | ||
originCountry = "US" | ||
) | ||
|
||
val result = sut.invoke(dto) | ||
|
||
assertEquals(result.currencySymbol, dto.currencySymbol) | ||
assertEquals(result.weightUnit, dto.weightUnit) | ||
assertEquals(result.dimensionUnit, dto.dimensionUnit) | ||
assertEquals(result.originCountry, dto.originCountry) | ||
} | ||
} |