diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModel.kt index 8383d1625288..84f96ab53e6c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModel.kt @@ -24,6 +24,7 @@ import org.wordpress.android.ui.sitecreation.previews.SitePreviewViewModel.SiteP 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.SiteNotFoundInDbUiState 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 @@ -136,9 +137,13 @@ class SitePreviewViewModel @Inject constructor( private suspend fun fetchNewlyCreatedSiteModel(remoteSiteId: Long): SiteModel? { val onSiteFetched = fetchWpComSiteUseCase.fetchSiteWithRetry(remoteSiteId) return if (!onSiteFetched.isError) { - return requireNotNull(siteStore.getSiteBySiteId(remoteSiteId)) { - "Site successfully fetched but has not been found in the local db." + val site = siteStore.getSiteBySiteId(remoteSiteId) + if (site == null) { + withContext(mainDispatcher) { + updateUiState(SiteNotFoundInDbUiState) + } } + site } else { null } @@ -224,6 +229,14 @@ class SitePreviewViewModel @Inject constructor( errorTitle = UiStringRes(R.string.error), ) + data object SiteNotFoundInDbUiState : 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), + ) + data class SitePreviewLoadingShimmerState( val isFree: Boolean, override val urlData: UrlData, diff --git a/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModelTest.kt index e5a0051b219f..b1ed67de828e 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModelTest.kt @@ -40,6 +40,7 @@ import org.wordpress.android.ui.sitecreation.previews.SitePreviewViewModel.SiteP 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.previews.SitePreviewViewModel.SitePreviewUiState.SiteNotFoundInDbUiState 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 @@ -100,6 +101,13 @@ class SitePreviewViewModelTest : BaseUnitTest() { verify(fetchWpComSiteUseCase).fetchSiteWithRetry(SITE_REMOTE_ID) } + @Test + fun `on start if site is created but cannot be retrieved from fb fails show error`() = testWith(FETCH_SUCCESS) { + whenever(siteStore.getSiteBySiteId(SITE_REMOTE_ID)).thenReturn(null) + startViewModel(SITE_CREATION_STATE.copy(result = RESULT_NOT_IN_LOCAL_DB)) + assertThat(viewModel.uiState.value).isInstanceOf(SiteNotFoundInDbUiState::class.java) + } + @Test fun `on start does not show preview when fetching fails`() = testWith(FETCH_ERROR) { startViewModel()