Skip to content

Commit

Permalink
Merge pull request #20571 from wordpress-mobile/fix/19791-site-creati…
Browse files Browse the repository at this point in the history
…on-error

Show error when the site is not created correctly
  • Loading branch information
jarvislin authored Apr 3, 2024
2 parents 02bceb7 + 75ff391 commit 20ce089
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ class SiteCreationPreviewFragment : SiteCreationBaseFormFragment(),
uiHelpers.updateVisibility(sitePreviewWebError, ui.webViewErrorVisibility)
uiHelpers.updateVisibility(sitePreviewWebViewShimmerLayout, ui.shimmerVisibility)
}
ui.errorTitle?.let { error ->
siteCreationPreviewHeaderItem.sitePreviewTitle.text =
uiHelpers.getTextOfUiString(requireContext(), error)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import org.wordpress.android.ui.sitecreation.misc.SiteCreationTracker
import org.wordpress.android.ui.sitecreation.previews.SitePreviewViewModel.SitePreviewUiState.SitePreviewContentUiState
import org.wordpress.android.ui.sitecreation.previews.SitePreviewViewModel.SitePreviewUiState.SitePreviewLoadingShimmerState
import org.wordpress.android.ui.sitecreation.previews.SitePreviewViewModel.SitePreviewUiState.SitePreviewWebErrorUiState
import org.wordpress.android.ui.sitecreation.previews.SitePreviewViewModel.SitePreviewUiState.SiteNotCreatedErrorUiState
import org.wordpress.android.ui.sitecreation.previews.SitePreviewViewModel.SitePreviewUiState.UrlData
import org.wordpress.android.ui.sitecreation.services.FetchWpComSiteUseCase
import org.wordpress.android.ui.sitecreation.usecases.isWordPressComSubDomain
Expand Down Expand Up @@ -81,7 +82,10 @@ class SitePreviewViewModel @Inject constructor(

fun start(siteCreationState: SiteCreationState) {
if (isStarted) return else isStarted = true
require(siteCreationState.result is Created)
if (siteCreationState.result !is Created) {
updateUiState(SiteNotCreatedErrorUiState)
return
}
siteDesign = siteCreationState.siteDesign
result = siteCreationState.result
isFree = requireNotNull(siteCreationState.domain).isFree
Expand Down Expand Up @@ -187,6 +191,7 @@ class SitePreviewViewModel @Inject constructor(
val shimmerVisibility: Boolean = false,
val subtitle: UiString,
val caption: UiString?,
val errorTitle: UiString? = null,
) {
data class SitePreviewContentUiState(
val isFree: Boolean,
Expand All @@ -210,6 +215,15 @@ class SitePreviewViewModel @Inject constructor(
caption = getCaption(isFree),
)

data object SiteNotCreatedErrorUiState : SitePreviewUiState(
urlData = UrlData("", "", 0 to 0, 0 to 0),
webViewVisibility = false,
webViewErrorVisibility = true,
subtitle = UiStringRes(R.string.site_creation_error_generic_title),
caption = UiStringRes(R.string.site_creation_error_generic_subtitle),
errorTitle = UiStringRes(R.string.error),
)

data class SitePreviewLoadingShimmerState(
val isFree: Boolean,
override val urlData: UrlData,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,15 @@ import org.wordpress.android.ui.sitecreation.SITE_CREATION_STATE
import org.wordpress.android.ui.sitecreation.SITE_MODEL
import org.wordpress.android.ui.sitecreation.SITE_REMOTE_ID
import org.wordpress.android.ui.sitecreation.SUB_DOMAIN
import org.wordpress.android.ui.sitecreation.SiteCreationResult
import org.wordpress.android.ui.sitecreation.SiteCreationResult.Created
import org.wordpress.android.ui.sitecreation.SiteCreationState
import org.wordpress.android.ui.sitecreation.URL
import org.wordpress.android.ui.sitecreation.misc.SiteCreationTracker
import org.wordpress.android.ui.sitecreation.previews.SitePreviewViewModel.SitePreviewUiState
import org.wordpress.android.ui.sitecreation.previews.SitePreviewViewModel.SitePreviewUiState.SitePreviewContentUiState
import org.wordpress.android.ui.sitecreation.previews.SitePreviewViewModel.SitePreviewUiState.SitePreviewWebErrorUiState
import org.wordpress.android.ui.sitecreation.previews.SitePreviewViewModel.SitePreviewUiState.SiteNotCreatedErrorUiState
import org.wordpress.android.ui.sitecreation.progress.LOADING_STATE_TEXT_ANIMATION_DELAY
import org.wordpress.android.ui.sitecreation.services.FetchWpComSiteUseCase
import org.wordpress.android.util.UrlUtilsWrapper
Expand Down Expand Up @@ -86,6 +88,12 @@ class SitePreviewViewModelTest : BaseUnitTest() {
whenever(siteStore.getSiteBySiteId(SITE_REMOTE_ID)).thenReturn(SITE_MODEL)
}

@Test
fun `on start show error when result is not created`() = testWith(FETCH_SUCCESS) {
startViewModel(SITE_CREATION_STATE.copy(result = SiteCreationResult.NotCreated))
assertThat(viewModel.uiState.value).isInstanceOf(SiteNotCreatedErrorUiState::class.java)
}

@Test
fun `on start fetches site by remote id when result is created`() = testWith(FETCH_SUCCESS) {
startViewModel(SITE_CREATION_STATE.copy(result = RESULT_NOT_IN_LOCAL_DB))
Expand Down

0 comments on commit 20ce089

Please sign in to comment.