Skip to content

Commit ba73faa

Browse files
committed
Adds: Phase helper and test class
Adds: JetpackFeatureRemovalPhaseHelper.kt and JetpackFeatureRemovalPhaseHelperTest.kt for getting the current phase of the app in jetpack removal
1 parent 7bd6293 commit ba73faa

2 files changed

Lines changed: 220 additions & 0 deletions

File tree

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package org.wordpress.android.ui.jetpackoverlay
2+
3+
import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalSiteCreationPhase.PHASE_ONE
4+
import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalSiteCreationPhase.PHASE_TWO
5+
import org.wordpress.android.ui.jetpackoverlay.JetpackPoweredCurrentPhase.PhaseFour
6+
import org.wordpress.android.ui.jetpackoverlay.JetpackPoweredCurrentPhase.PhaseNewUsers
7+
import org.wordpress.android.ui.jetpackoverlay.JetpackPoweredCurrentPhase.PhaseOne
8+
import org.wordpress.android.ui.jetpackoverlay.JetpackPoweredCurrentPhase.PhaseThree
9+
import org.wordpress.android.ui.jetpackoverlay.JetpackPoweredCurrentPhase.PhaseTwo
10+
import org.wordpress.android.util.BuildConfigWrapper
11+
import org.wordpress.android.util.config.JetpackFeatureRemovalNewUsersConfig
12+
import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseFourConfig
13+
import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseOneConfig
14+
import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseThreeConfig
15+
import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseTwoConfig
16+
import javax.inject.Inject
17+
18+
private const val PHASE_ONE_GLOBAL_OVERLAY_FREQUENCY_IN_DAYS = 2
19+
private const val PHASE_ONE_FEATURE_OVERLAY_FREQUENCY_IN_DAYS = 7
20+
21+
private const val PHASE_TWO_GLOBAL_OVERLAY_FREQUENCY_IN_DAYS = 2
22+
private const val PHASE_TWO_FEATURE_OVERLAY_FREQUENCY_IN_DAYS = 7
23+
24+
private const val PHASE_THREE_GLOBAL_OVERLAY_FREQUENCY_IN_DAYS = 2
25+
private const val PHASE_THREE_FEATURE_OVERLAY_FREQUENCY_IN_DAYS = 4
26+
27+
// Class used to find the current phase
28+
// of the Jetpack powered migration
29+
class JetpackFeatureRemovalPhaseHelper @Inject constructor(
30+
private val buildConfigWrapper: BuildConfigWrapper,
31+
private val jetpackFeatureRemovalPhaseOneConfig: JetpackFeatureRemovalPhaseOneConfig,
32+
private val jetpackFeatureRemovalPhaseTwoConfig: JetpackFeatureRemovalPhaseTwoConfig,
33+
private val jetpackFeatureRemovalPhaseThreeConfig: JetpackFeatureRemovalPhaseThreeConfig,
34+
private val jetpackFeatureRemovalPhaseFourConfig: JetpackFeatureRemovalPhaseFourConfig,
35+
private val jetpackFeatureRemovalNewUsersConfig: JetpackFeatureRemovalNewUsersConfig
36+
) {
37+
fun getTheCurrentPhase(): JetpackPoweredCurrentPhase? {
38+
return if (buildConfigWrapper.isJetpackApp) null
39+
else if (jetpackFeatureRemovalNewUsersConfig.isEnabled()) PhaseNewUsers
40+
else if (jetpackFeatureRemovalPhaseFourConfig.isEnabled()) PhaseFour
41+
else if (jetpackFeatureRemovalPhaseThreeConfig.isEnabled()) PhaseThree
42+
else if (jetpackFeatureRemovalPhaseTwoConfig.isEnabled()) PhaseTwo
43+
else if (jetpackFeatureRemovalPhaseOneConfig.isEnabled()) PhaseOne
44+
else null
45+
}
46+
47+
fun getSiteCreationPhase(): JetpackFeatureRemovalSiteCreationPhase? {
48+
val currentPhase = getTheCurrentPhase() ?: return null
49+
return when (currentPhase) {
50+
is PhaseOne, PhaseTwo, PhaseThree -> PHASE_ONE
51+
is PhaseFour, PhaseNewUsers -> PHASE_TWO
52+
}
53+
}
54+
}
55+
// Global overlay frequency is the frequency at which the overlay is shown across the features
56+
// no matter which feature was accessed last time
57+
58+
// Feature specific overlay frequency is the frequency at which the overlay is shown for a specific feature
59+
60+
sealed class JetpackPoweredCurrentPhase(
61+
val globalOverlayFrequency: Int = 0,
62+
val featureSpecificOverlayFrequency: Int = 0
63+
) {
64+
object PhaseOne : JetpackPoweredCurrentPhase(
65+
PHASE_ONE_GLOBAL_OVERLAY_FREQUENCY_IN_DAYS,
66+
PHASE_ONE_FEATURE_OVERLAY_FREQUENCY_IN_DAYS
67+
)
68+
69+
object PhaseTwo : JetpackPoweredCurrentPhase(
70+
PHASE_TWO_GLOBAL_OVERLAY_FREQUENCY_IN_DAYS,
71+
PHASE_TWO_FEATURE_OVERLAY_FREQUENCY_IN_DAYS
72+
)
73+
74+
object PhaseThree : JetpackPoweredCurrentPhase(
75+
PHASE_THREE_GLOBAL_OVERLAY_FREQUENCY_IN_DAYS,
76+
PHASE_THREE_FEATURE_OVERLAY_FREQUENCY_IN_DAYS
77+
)
78+
79+
object PhaseFour : JetpackPoweredCurrentPhase()
80+
object PhaseNewUsers : JetpackPoweredCurrentPhase()
81+
}
82+
83+
enum class JetpackFeatureRemovalSiteCreationPhase {
84+
PHASE_ONE, PHASE_TWO
85+
}
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
package org.wordpress.android.ui.jetpackoverlay
2+
3+
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
4+
import com.nhaarman.mockitokotlin2.whenever
5+
import org.junit.Test
6+
7+
import org.junit.Assert.*
8+
import org.junit.Before
9+
import org.junit.Rule
10+
import org.junit.runner.RunWith
11+
import org.mockito.Mock
12+
import org.mockito.junit.MockitoJUnitRunner
13+
import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalSiteCreationPhase.PHASE_ONE
14+
import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalSiteCreationPhase.PHASE_TWO
15+
import org.wordpress.android.ui.jetpackoverlay.JetpackPoweredCurrentPhase.PhaseFour
16+
import org.wordpress.android.ui.jetpackoverlay.JetpackPoweredCurrentPhase.PhaseNewUsers
17+
import org.wordpress.android.ui.jetpackoverlay.JetpackPoweredCurrentPhase.PhaseOne
18+
import org.wordpress.android.ui.jetpackoverlay.JetpackPoweredCurrentPhase.PhaseThree
19+
import org.wordpress.android.ui.jetpackoverlay.JetpackPoweredCurrentPhase.PhaseTwo
20+
import org.wordpress.android.util.BuildConfigWrapper
21+
import org.wordpress.android.util.config.JetpackFeatureRemovalNewUsersConfig
22+
import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseFourConfig
23+
import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseOneConfig
24+
import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseThreeConfig
25+
import org.wordpress.android.util.config.JetpackFeatureRemovalPhaseTwoConfig
26+
27+
@RunWith(MockitoJUnitRunner::class)
28+
class JetpackFeatureRemovalPhaseHelperTest {
29+
@Mock private lateinit var buildConfigWrapper: BuildConfigWrapper
30+
@Mock private lateinit var jetpackFeatureRemovalPhaseOneConfig: JetpackFeatureRemovalPhaseOneConfig
31+
@Mock private lateinit var jetpackFeatureRemovalPhaseTwoConfig: JetpackFeatureRemovalPhaseTwoConfig
32+
@Mock private lateinit var jetpackFeatureRemovalPhaseThreeConfig: JetpackFeatureRemovalPhaseThreeConfig
33+
@Mock private lateinit var jetpackFeatureRemovalPhaseFourConfig: JetpackFeatureRemovalPhaseFourConfig
34+
@Mock private lateinit var jetpackFeatureRemovalNewUsersConfig: JetpackFeatureRemovalNewUsersConfig
35+
36+
@Rule
37+
@JvmField val rule = InstantTaskExecutorRule()
38+
39+
private lateinit var jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper
40+
41+
@Before
42+
fun setup() {
43+
jetpackFeatureRemovalPhaseHelper = JetpackFeatureRemovalPhaseHelper(
44+
buildConfigWrapper,
45+
jetpackFeatureRemovalPhaseOneConfig,
46+
jetpackFeatureRemovalPhaseTwoConfig,
47+
jetpackFeatureRemovalPhaseThreeConfig,
48+
jetpackFeatureRemovalPhaseFourConfig,
49+
jetpackFeatureRemovalNewUsersConfig
50+
)
51+
}
52+
53+
// general phase tests
54+
@Test
55+
fun `given jetpack app, when current phase is fetched, then return null`() {
56+
whenever(buildConfigWrapper.isJetpackApp).thenReturn(true)
57+
58+
val currentPhase = jetpackFeatureRemovalPhaseHelper.getTheCurrentPhase()
59+
60+
assertNull(currentPhase)
61+
}
62+
63+
@Test
64+
fun `given phase one config true, when current phase is fetched, then return phase one`() {
65+
whenever(jetpackFeatureRemovalPhaseOneConfig.isEnabled()).thenReturn(true)
66+
67+
val currentPhase = jetpackFeatureRemovalPhaseHelper.getTheCurrentPhase()
68+
69+
assertEquals(currentPhase, PhaseOne)
70+
}
71+
72+
@Test
73+
fun `given phase two config true, when current phase is fetched, then return phase two`() {
74+
whenever(jetpackFeatureRemovalPhaseTwoConfig.isEnabled()).thenReturn(true)
75+
76+
val currentPhase = jetpackFeatureRemovalPhaseHelper.getTheCurrentPhase()
77+
78+
assertEquals(currentPhase, PhaseTwo)
79+
}
80+
81+
@Test
82+
fun `given phase three config true, when current phase is fetched, then return phase three`() {
83+
whenever(jetpackFeatureRemovalPhaseThreeConfig.isEnabled()).thenReturn(true)
84+
85+
val currentPhase = jetpackFeatureRemovalPhaseHelper.getTheCurrentPhase()
86+
87+
assertEquals(currentPhase, PhaseThree)
88+
}
89+
90+
@Test
91+
fun `given phase four config true, when current phase is fetched, then return phase four`() {
92+
whenever(jetpackFeatureRemovalPhaseFourConfig.isEnabled()).thenReturn(true)
93+
94+
val currentPhase = jetpackFeatureRemovalPhaseHelper.getTheCurrentPhase()
95+
96+
assertEquals(currentPhase, PhaseFour)
97+
}
98+
99+
@Test
100+
fun `given phase new users config true, when current phase is fetched, then return phase new users`() {
101+
whenever(jetpackFeatureRemovalNewUsersConfig.isEnabled()).thenReturn(true)
102+
103+
val currentPhase = jetpackFeatureRemovalPhaseHelper.getTheCurrentPhase()
104+
105+
assertEquals(currentPhase, PhaseNewUsers)
106+
}
107+
108+
// site creation phase tests
109+
@Test
110+
fun `given jetpack app, when current site creation phase is fetched, then return null`() {
111+
whenever(buildConfigWrapper.isJetpackApp).thenReturn(true)
112+
113+
val currentPhase = jetpackFeatureRemovalPhaseHelper.getSiteCreationPhase()
114+
115+
assertNull(currentPhase)
116+
}
117+
118+
@Test
119+
fun `given phase one config true, when current site creation phase is fetched, then return phase one`() {
120+
whenever(jetpackFeatureRemovalPhaseOneConfig.isEnabled()).thenReturn(true)
121+
122+
val currentPhase = jetpackFeatureRemovalPhaseHelper.getSiteCreationPhase()
123+
124+
assertEquals(currentPhase, PHASE_ONE)
125+
}
126+
127+
@Test
128+
fun `given phase four config true, when current site creation phase is fetched, then return phase two`() {
129+
whenever(jetpackFeatureRemovalNewUsersConfig.isEnabled()).thenReturn(true)
130+
131+
val currentPhase = jetpackFeatureRemovalPhaseHelper.getSiteCreationPhase()
132+
133+
assertEquals(currentPhase, PHASE_TWO)
134+
}
135+
}

0 commit comments

Comments
 (0)