@@ -7,38 +7,42 @@ import org.mockito.kotlin.given
77import org.mockito.kotlin.mock
88import org.mockito.kotlin.never
99import org.mockito.kotlin.verify
10+ import org.mockito.kotlin.whenever
1011import org.robolectric.RobolectricTestRunner
1112import org.wordpress.android.fluxc.model.SiteModel
1213import org.wordpress.android.fluxc.network.rest.wpapi.WPAPINetworkError
1314import org.wordpress.android.fluxc.network.rest.wpapi.WPAPIResponse
1415import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.ApplicationPasswordsConfiguration
1516import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.ApplicationPasswordsNetwork
17+ import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.JetpackApplicationPasswordsErrorHandler
18+ import org.wordpress.android.fluxc.network.rest.wpapi.applicationpasswords.JetpackApplicationPasswordsSupport
1619import org.wordpress.android.fluxc.network.rest.wpcom.JetpackTunnelWPAPINetwork
17- import org.wordpress.android.fluxc.persistence.SiteSqlUtils
1820import org.wordpress.android.fluxc.test
1921
2022@RunWith(RobolectricTestRunner ::class )
2123class WooNetworkTest {
2224 private val testSite = SiteModel ().apply {
25+ origin = SiteModel .ORIGIN_WPCOM_REST
2326 url = " https://example.com"
2427 }
2528 private val testPath = " path"
2629 private val applicationPasswordsConfiguration = FakeApplicationPasswordsConfiguration ()
2730 private val applicationPasswordsNetwork: ApplicationPasswordsNetwork = mock()
2831 private val jetpackTunnelWPAPINetwork: JetpackTunnelWPAPINetwork = mock()
29- private val siteSqlUtils: SiteSqlUtils = mock()
32+ private val jetpackApplicationPasswordsErrorHandler: JetpackApplicationPasswordsErrorHandler = mock()
33+ private val jetpackApplicationPasswordsSupport: JetpackApplicationPasswordsSupport = mock()
3034
3135 private val sut = WooNetwork (
3236 applicationPasswordsConfiguration = applicationPasswordsConfiguration,
3337 applicationPasswordsNetwork = applicationPasswordsNetwork,
3438 jetpackTunnelWPAPINetwork = jetpackTunnelWPAPINetwork,
35- siteSqlUtils = siteSqlUtils
39+ jetpackApplicationPasswordsSupport = jetpackApplicationPasswordsSupport,
40+ jetpackApplicationPasswordsErrorHandler = jetpackApplicationPasswordsErrorHandler
3641 )
3742
3843 @Test
3944 fun `given Jetpack site supports app passwords, when making request, then use app passwords network` () = test {
40- testSite.origin = SiteModel .ORIGIN_WPCOM_REST
41- testSite.applicationPasswordsAuthorizeUrl = " authorize_url"
45+ whenever(jetpackApplicationPasswordsSupport.supportsAppPasswords(testSite)).thenReturn(true )
4246 val sampleResponse = SampleResponse (" value" )
4347 givenAppPasswordsResponse(WPAPIResponse .Success (SampleResponse (" value" ), emptyList()))
4448
@@ -59,8 +63,7 @@ class WooNetworkTest {
5963 @Test
6064 fun `given jetpack site that supports app passwords, when request fails, then fall back to jetpack tunnel` () =
6165 test {
62- testSite.origin = SiteModel .ORIGIN_WPCOM_REST
63- testSite.applicationPasswordsAuthorizeUrl = " authorize_url"
66+ whenever(jetpackApplicationPasswordsSupport.supportsAppPasswords(testSite)).thenReturn(true )
6467 givenAppPasswordsResponse(
6568 WPAPIResponse .Error (
6669 WPAPINetworkError (
@@ -84,8 +87,7 @@ class WooNetworkTest {
8487 @Test
8588 fun `given jetpack site that does not support app passwords, when making request, then use jetpack tunnel` () =
8689 test {
87- testSite.origin = SiteModel .ORIGIN_WPCOM_REST
88- testSite.applicationPasswordsAuthorizeUrl = null
90+ whenever(jetpackApplicationPasswordsSupport.supportsAppPasswords(testSite)).thenReturn(false )
8991 val sampleResponse = SampleResponse (" value" )
9092 givenJetpackTunnelResponse(WPAPIResponse .Success (sampleResponse, emptyList()))
9193
@@ -101,8 +103,7 @@ class WooNetworkTest {
101103 @Test
102104 fun `when app passwords are disabled for jetpack access, then always use jetpack tunnel` () = test {
103105 applicationPasswordsConfiguration.isEnabledForJetpackAccessValue = false
104- testSite.origin = SiteModel .ORIGIN_WPCOM_REST
105- testSite.applicationPasswordsAuthorizeUrl = " authorize_url"
106+ whenever(jetpackApplicationPasswordsSupport.supportsAppPasswords(testSite)).thenReturn(true )
106107 val sampleResponse = SampleResponse (" value" )
107108 givenJetpackTunnelResponse(WPAPIResponse .Success (sampleResponse, emptyList()))
108109
@@ -121,33 +122,21 @@ class WooNetworkTest {
121122 }
122123
123124 @Test
124- fun `when detecting that a site doesn't support app passwords, then update cached site with correct status` () =
125- test {
126- testSite.origin = SiteModel .ORIGIN_WPCOM_REST
127- testSite.applicationPasswordsAuthorizeUrl = " authorize_url"
128- givenAppPasswordsResponse(
129- WPAPIResponse .Error (
130- WPAPINetworkError (
131- mock(),
132- errorCode = ApplicationPasswordsNetwork .APPLICATION_PASSWORDS_NOT_SUPPORT_ERROR_CODE
133- )
134- )
135- )
136- givenJetpackTunnelResponse(
137- WPAPIResponse .Success (SampleResponse (" value" ), emptyList())
138- )
125+ fun `when jetpack tunnel fallback succeeds after app passwords failure, then notify error handler` () = test {
126+ whenever(jetpackApplicationPasswordsSupport.supportsAppPasswords(testSite)).thenReturn(true )
127+ val appPasswordsNetworkError = WPAPINetworkError (mock(), " error" )
128+ givenAppPasswordsResponse(WPAPIResponse .Error (appPasswordsNetworkError))
129+ val sampleResponse = SampleResponse (" value" )
130+ givenJetpackTunnelResponse(WPAPIResponse .Success (sampleResponse, emptyList()))
139131
140- sut.executeGetGsonRequest(
141- site = testSite,
142- path = testPath,
143- clazz = SampleResponse ::class .java
144- )
132+ sut.executeGetGsonRequest(
133+ site = testSite,
134+ path = testPath,
135+ clazz = SampleResponse ::class .java
136+ )
145137
146- val expectedSite = testSite.apply {
147- applicationPasswordsAuthorizeUrl = null
148- }
149- verify(siteSqlUtils).insertOrUpdateSite(expectedSite)
150- }
138+ verify(jetpackApplicationPasswordsErrorHandler).handleError(testSite, appPasswordsNetworkError)
139+ }
151140
152141 private suspend fun givenAppPasswordsResponse (response : WPAPIResponse <SampleResponse >) {
153142 given(
0 commit comments