Skip to content

Commit 8fe023f

Browse files
Merge pull request #14616 from woocommerce/issue/WOOMOB-1274-garden-api-integration
[CIAB] Integrate the garden arch API and add a helper class for deciding features to be disabled for CIAB sites
2 parents 24ca8cc + d971bd9 commit 8fe023f

File tree

7 files changed

+143
-4
lines changed

7 files changed

+143
-4
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.woocommerce.android.ciab
2+
3+
enum class CIABAffectedFeature {
4+
Blaze,
5+
Payments,
6+
WooShippingSplitShipments,
7+
GroupedProducts,
8+
VariableProducts,
9+
GiftCardEditing,
10+
ProductsStockDashboardCard
11+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.woocommerce.android.ciab
2+
3+
import androidx.annotation.VisibleForTesting
4+
import com.woocommerce.android.tools.SelectedSite
5+
import javax.inject.Inject
6+
7+
class CIABSiteGateKeeper @Inject constructor(private val selectedSite: SelectedSite) {
8+
fun isFeatureSupported(
9+
@Suppress("unused")
10+
feature: CIABAffectedFeature
11+
): Boolean {
12+
// For now, all affected features are unsupported in CIAB.
13+
// If there are exceptions in the future, we can handle them here.
14+
return !isCurrentSiteCIAB()
15+
}
16+
17+
fun isFeatureUnsupported(feature: CIABAffectedFeature): Boolean {
18+
return !isFeatureSupported(feature)
19+
}
20+
21+
private fun isCurrentSiteCIAB(): Boolean {
22+
val site = selectedSite.getOrNull() ?: return false
23+
return site.isGardenSite && site.gardenName == CIAB_GARDEN_NAME
24+
}
25+
26+
companion object Companion {
27+
@VisibleForTesting
28+
const val CIAB_GARDEN_NAME = "commerce"
29+
}
30+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.woocommerce.android.ciab
2+
3+
import com.woocommerce.android.tools.SelectedSite
4+
import com.woocommerce.android.viewmodel.BaseUnitTest
5+
import kotlinx.coroutines.ExperimentalCoroutinesApi
6+
import org.junit.Assert.assertFalse
7+
import org.junit.Assert.assertTrue
8+
import org.junit.Test
9+
import org.mockito.Mockito.mock
10+
import org.mockito.kotlin.given
11+
import org.wordpress.android.fluxc.model.SiteModel
12+
13+
@OptIn(ExperimentalCoroutinesApi::class)
14+
class CIABSiteGateKeeperTest : BaseUnitTest() {
15+
private val selectedSite: SelectedSite = mock()
16+
private val ciabSiteGateKeeper = CIABSiteGateKeeper(selectedSite)
17+
18+
@Test
19+
fun `given current site is CIAB, when checking feature support, then feature is unsupported`() {
20+
val site = createSite(isCIAB = true)
21+
given(selectedSite.getOrNull()).willReturn(site)
22+
23+
CIABAffectedFeature.entries.forEach {
24+
assertFalse(ciabSiteGateKeeper.isFeatureSupported(it))
25+
}
26+
}
27+
28+
@Test
29+
fun `given current site is not CIAB, when checking feature support, then feature is supported`() {
30+
val site = createSite(isCIAB = false)
31+
given(selectedSite.getOrNull()).willReturn(site)
32+
33+
CIABAffectedFeature.entries.forEach {
34+
assertTrue(ciabSiteGateKeeper.isFeatureSupported(it))
35+
}
36+
}
37+
38+
private fun createSite(isCIAB: Boolean): SiteModel {
39+
return SiteModel().apply {
40+
setIsGardenSite(isCIAB)
41+
this.gardenName = if (isCIAB) CIABSiteGateKeeper.CIAB_GARDEN_NAME else null
42+
}
43+
}
44+
}

libs/fluxc/src/main/java/org/wordpress/android/fluxc/model/SiteModel.java

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,14 @@ public class SiteModel extends Payload<BaseNetworkError> implements Identifiable
265265
private Boolean mWasEcommerceTrial;
266266
@Column
267267
private Boolean mIsSingleUserSite;
268+
@Column
269+
private boolean mIsGardenSite;
270+
@Column
271+
@Nullable
272+
private String mGardenName;
273+
@Column
274+
@Nullable
275+
private String mGardenPartner;
268276

269277
@Override
270278
public int getId() {
@@ -1137,6 +1145,32 @@ public void setIsSingleUserSite(Boolean isSingleUserSite) {
11371145
mIsSingleUserSite = isSingleUserSite;
11381146
}
11391147

1148+
public boolean isGardenSite() {
1149+
return mIsGardenSite;
1150+
}
1151+
1152+
public void setIsGardenSite(boolean mIsGardenSite) {
1153+
this.mIsGardenSite = mIsGardenSite;
1154+
}
1155+
1156+
@Nullable
1157+
public String getGardenName() {
1158+
return mGardenName;
1159+
}
1160+
1161+
public void setGardenName(@Nullable String mGardenName) {
1162+
this.mGardenName = mGardenName;
1163+
}
1164+
1165+
@Nullable
1166+
public String getGardenPartner() {
1167+
return mGardenPartner;
1168+
}
1169+
1170+
public void setGardenPartner(@Nullable String mGardenPartner) {
1171+
this.mGardenPartner = mGardenPartner;
1172+
}
1173+
11401174
@Override
11411175
public boolean equals(Object o) {
11421176
if (!(o instanceof SiteModel)) return false;
@@ -1236,7 +1270,10 @@ public boolean equals(Object o) {
12361270
Objects.equals(mCanBlaze, siteModel.mCanBlaze) &&
12371271
Objects.equals(mPlanActiveFeatures, siteModel.mPlanActiveFeatures) &&
12381272
Objects.equals(mWasEcommerceTrial, siteModel.mWasEcommerceTrial) &&
1239-
Objects.equals(mIsSingleUserSite, siteModel.mIsSingleUserSite);
1273+
Objects.equals(mIsSingleUserSite, siteModel.mIsSingleUserSite) &&
1274+
mIsGardenSite == siteModel.mIsGardenSite &&
1275+
Objects.equals(mGardenName, siteModel.mGardenName) &&
1276+
Objects.equals(mGardenPartner, siteModel.mGardenPartner);
12401277
}
12411278

12421279
@Override
@@ -1336,6 +1373,9 @@ public int hashCode() {
13361373
mCanBlaze,
13371374
mPlanActiveFeatures,
13381375
mWasEcommerceTrial,
1339-
mIsSingleUserSite);
1376+
mIsSingleUserSite,
1377+
mIsGardenSite,
1378+
mGardenName,
1379+
mGardenPartner);
13401380
}
13411381
}

libs/fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/SiteRestClient.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1136,6 +1136,11 @@ class SiteRestClient @Inject constructor(
11361136
site.planActiveFeatures = (from.plan?.features?.active?.joinToString(",")).orEmpty()
11371137
site.wasEcommerceTrial = from.was_ecommerce_trial
11381138
site.setIsSingleUserSite(from.single_user_site)
1139+
1140+
site.setIsGardenSite(from.is_garden)
1141+
site.gardenName = from.garden_name
1142+
site.gardenPartner = from.garden_partner
1143+
11391144
return site
11401145
}
11411146

@@ -1186,7 +1191,7 @@ class SiteRestClient @Inject constructor(
11861191
@VisibleForTesting
11871192
const val SITE_FIELDS = "ID,URL,name,description,jetpack,jetpack_connection,visible,is_private," +
11881193
"options,plan,capabilities,quota,icon,meta,zendesk_site_meta,organization_id," +
1189-
"was_ecommerce_trial,single_user_site,jetpack_modules"
1194+
"was_ecommerce_trial,single_user_site,jetpack_modules,is_garden,garden_name,garden_partner"
11901195
private const val ROOT_ENDPOINT_FIELDS = "name,description,gmt_offset,namespaces,authentication"
11911196
private const val WOO_API_NAMESPACE_PREFIX = "wc/"
11921197
private const val FIELDS = "fields"

libs/fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpcom/site/SiteWPComRestResponse.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,4 +127,7 @@ public class BloggingPromptsSettings {
127127
public boolean was_ecommerce_trial;
128128
public boolean single_user_site;
129129
public List<String> jetpack_modules;
130+
public boolean is_garden;
131+
public String garden_name;
132+
public String garden_partner;
130133
}

libs/fluxc/src/main/java/org/wordpress/android/fluxc/persistence/WellSqlConfig.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ open class WellSqlConfig : DefaultWellConfig {
4040
annotation class AddOn
4141

4242
override fun getDbVersion(): Int {
43-
return 230
43+
return 231
4444
}
4545

4646
override fun getDbName(): String {
@@ -2246,6 +2246,12 @@ open class WellSqlConfig : DefaultWellConfig {
22462246
229 -> migrateAddOn(ADDON_WOOCOMMERCE, version) {
22472247
db.execSQL("DROP TABLE IF EXISTS WCNewVisitorStatsModel")
22482248
}
2249+
2250+
230 -> migrate(version) {
2251+
db.execSQL("ALTER TABLE SiteModel ADD IS_GARDEN_SITE BOOLEAN NOT NULL DEFAULT 0")
2252+
db.execSQL("ALTER TABLE SiteModel ADD GARDEN_NAME TEXT")
2253+
db.execSQL("ALTER TABLE SiteModel ADD GARDEN_PARTNER TEXT")
2254+
}
22492255
}
22502256
}
22512257
db.setTransactionSuccessful()

0 commit comments

Comments
 (0)