Skip to content

Commit

Permalink
Questionnaire Fragment: Added extra to show or hide submit button. (#…
Browse files Browse the repository at this point in the history
…1846)

* Questionnaire Fragment: Added extra to show or hide submit button.

* Updated test case to replace runBlocking with runTest

* Updated comments

* Fixed failing tests
  • Loading branch information
aditya-07 committed Feb 14, 2023
1 parent ccae099 commit d4210a0
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -99,10 +99,6 @@ open class QuestionnaireFragment : Fragment() {
val questionnaireItemReviewAdapter = QuestionnaireItemReviewAdapter()

val submitButton = requireView().findViewById<Button>(R.id.submit_questionnaire)
// Reads submit button visibility value initially defined in
// [R.attr.submitButtonStyleQuestionnaire] style.
val submitButtonVisibilityInStyle = submitButton.visibility
viewModel.setShowSubmitButtonFlag(submitButtonVisibilityInStyle == View.VISIBLE)

val reviewModeEditButton = view.findViewById<View>(R.id.review_mode_edit_button)
reviewModeEditButton.setOnClickListener { viewModel.setReviewMode(false) }
Expand Down Expand Up @@ -311,6 +307,11 @@ open class QuestionnaireFragment : Fragment() {
const val EXTRA_READ_ONLY = "read-only"

const val SUBMIT_REQUEST_KEY = "submit-request-key"

/**
* A [Boolean] extra to show or hide the Submit button in the questionnaire. Default is true.
*/
const val EXTRA_SHOW_SUBMIT_BUTTON = "show-submit-button"
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,8 +165,8 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
private val shouldShowReviewPageFirst =
shouldEnableReviewPage && state[QuestionnaireFragment.EXTRA_SHOW_REVIEW_PAGE_FIRST] ?: false

/** Flag to show/hide submit button. */
private var shouldShowSubmitButton = false
/** Flag to show/hide submit button. Default is true. */
private var shouldShowSubmitButton = state[QuestionnaireFragment.EXTRA_SHOW_SUBMIT_BUTTON] ?: true

/** The pages of the questionnaire, or null if the questionnaire is not paginated. */
@VisibleForTesting var pages: List<QuestionnairePage>? = null
Expand Down Expand Up @@ -366,10 +366,6 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
isInReviewModeFlow.value = reviewModeFlag
}

internal fun setShowSubmitButtonFlag(showSubmitButton: Boolean) {
this.shouldShowSubmitButton = showSubmitButton
}

/** [QuestionnaireState] to be displayed in the UI. */
internal val questionnaireStateFlow: StateFlow<QuestionnaireState> =
combine(modificationCount, currentPageIndexFlow, isInReviewModeFlow) { _, _, _ ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import com.google.android.fhir.datacapture.QuestionnaireFragment.Companion.EXTRA
import com.google.android.fhir.datacapture.QuestionnaireFragment.Companion.EXTRA_QUESTIONNAIRE_RESPONSE_JSON_STRING
import com.google.android.fhir.datacapture.QuestionnaireFragment.Companion.EXTRA_READ_ONLY
import com.google.android.fhir.datacapture.QuestionnaireFragment.Companion.EXTRA_SHOW_REVIEW_PAGE_FIRST
import com.google.android.fhir.datacapture.QuestionnaireFragment.Companion.EXTRA_SHOW_SUBMIT_BUTTON
import com.google.android.fhir.datacapture.common.datatype.asStringValue
import com.google.android.fhir.datacapture.testing.DataCaptureTestApplication
import com.google.android.fhir.datacapture.validation.Invalid
Expand Down Expand Up @@ -2109,7 +2110,8 @@ class QuestionnaireViewModelTest {
QuestionnairePage(0, enabled = true, hidden = false),
QuestionnairePage(1, enabled = true, hidden = false)
),
currentPageIndex = 1
currentPageIndex = 1,
showSubmitButton = true
)
)
}
Expand Down Expand Up @@ -2239,7 +2241,8 @@ class QuestionnaireViewModelTest {
QuestionnairePage(1, enabled = false, hidden = false),
QuestionnairePage(2, enabled = true, hidden = false),
),
currentPageIndex = 2
currentPageIndex = 2,
showSubmitButton = true
)
)
}
Expand Down Expand Up @@ -2378,7 +2381,8 @@ class QuestionnaireViewModelTest {
QuestionnairePage(1, enabled = true, hidden = true),
QuestionnairePage(2, enabled = true, hidden = false)
),
currentPageIndex = 2
currentPageIndex = 2,
showSubmitButton = true
)
)
}
Expand Down Expand Up @@ -2435,7 +2439,8 @@ class QuestionnaireViewModelTest {
QuestionnairePagination(
isPaginated = true,
pages = viewModel.pages!!,
currentPageIndex = 1
currentPageIndex = 1,
showSubmitButton = true
)
)
}
Expand Down Expand Up @@ -2785,7 +2790,8 @@ class QuestionnaireViewModelTest {
QuestionnairePagination(
isPaginated = true,
pages = viewModel.pages!!,
currentPageIndex = 1
currentPageIndex = 1,
showSubmitButton = true
)
)
}
Expand Down Expand Up @@ -2898,7 +2904,8 @@ class QuestionnaireViewModelTest {
QuestionnairePagination(
isPaginated = true,
pages = viewModel.pages!!,
currentPageIndex = 1
currentPageIndex = 1,
showSubmitButton = true
)
)
}
Expand Down Expand Up @@ -3268,49 +3275,63 @@ class QuestionnaireViewModelTest {
// Test cases for submit button

@Test
fun `setShowSubmitButtonFlag() to false should not show submit button`() {
runTest {
val questionnaire =
Questionnaire().apply {
id = "a-questionnaire"
addItem(
Questionnaire.QuestionnaireItemComponent().apply {
linkId = "a-link-id"
type = Questionnaire.QuestionnaireItemType.BOOLEAN
}
)
}
val viewModel = createQuestionnaireViewModel(questionnaire)
viewModel.setShowSubmitButtonFlag(false)
assertThat(
(viewModel.questionnaireStateFlow.first().displayMode as DisplayMode.EditMode)
.pagination.showSubmitButton
fun `EXTRA_SHOW_SUBMIT_BUTTON set to false should not show submit button`() = runTest {
val questionnaire =
Questionnaire().apply {
id = "a-questionnaire"
addItem(
Questionnaire.QuestionnaireItemComponent().apply {
linkId = "a-link-id"
type = Questionnaire.QuestionnaireItemType.BOOLEAN
}
)
.isFalse()
}
}
val viewModel = createQuestionnaireViewModel(questionnaire, showSubmitButton = false)
assertThat(
(viewModel.questionnaireStateFlow.first().displayMode as DisplayMode.EditMode)
.pagination.showSubmitButton
)
.isFalse()
}

@Test
fun `setShowSubmitButtonFlag() to true should show submit button`() {
runTest {
val questionnaire =
Questionnaire().apply {
id = "a-questionnaire"
addItem(
Questionnaire.QuestionnaireItemComponent().apply {
linkId = "a-link-id"
type = Questionnaire.QuestionnaireItemType.BOOLEAN
}
)
}
val viewModel = createQuestionnaireViewModel(questionnaire)
viewModel.setShowSubmitButtonFlag(true)
assertThat(
(viewModel.questionnaireStateFlow.first().displayMode as DisplayMode.EditMode)
.pagination.showSubmitButton
fun `EXTRA_SHOW_SUBMIT_BUTTON set to true should show submit button`() = runTest {
val questionnaire =
Questionnaire().apply {
id = "a-questionnaire"
addItem(
Questionnaire.QuestionnaireItemComponent().apply {
linkId = "a-link-id"
type = Questionnaire.QuestionnaireItemType.BOOLEAN
}
)
.isTrue()
}
}
val viewModel = createQuestionnaireViewModel(questionnaire, showSubmitButton = true)
assertThat(
(viewModel.questionnaireStateFlow.first().displayMode as DisplayMode.EditMode)
.pagination.showSubmitButton
)
.isTrue()
}

@Test
fun `EXTRA_SHOW_SUBMIT_BUTTON not setting should show submit button`() = runTest {
val questionnaire =
Questionnaire().apply {
id = "a-questionnaire"
addItem(
Questionnaire.QuestionnaireItemComponent().apply {
linkId = "a-link-id"
type = Questionnaire.QuestionnaireItemType.BOOLEAN
}
)
}
val viewModel = createQuestionnaireViewModel(questionnaire, showSubmitButton = null)
assertThat(
(viewModel.questionnaireStateFlow.first().displayMode as DisplayMode.EditMode)
.pagination.showSubmitButton
)
.isTrue()
}

// Test cases for review mode
Expand All @@ -3328,8 +3349,12 @@ class QuestionnaireViewModelTest {
}
)
}
val viewModel = createQuestionnaireViewModel(questionnaire, enableReviewPage = true)
viewModel.setShowSubmitButtonFlag(true)
val viewModel =
createQuestionnaireViewModel(
questionnaire,
enableReviewPage = true,
showSubmitButton = true
)
viewModel.setReviewMode(true)
assertThat(viewModel.questionnaireStateFlow.first().displayMode)
.isInstanceOf(DisplayMode.ReviewMode::class.java)
Expand Down Expand Up @@ -4058,6 +4083,7 @@ class QuestionnaireViewModelTest {
enableReviewPage: Boolean = false,
showReviewPageFirst: Boolean = false,
readOnlyMode: Boolean = false,
showSubmitButton: Boolean? = null
): QuestionnaireViewModel {
state.set(EXTRA_QUESTIONNAIRE_JSON_STRING, printer.encodeResourceToString(questionnaire))

Expand All @@ -4070,6 +4096,8 @@ class QuestionnaireViewModelTest {
enableReviewPage.let { state.set(EXTRA_ENABLE_REVIEW_PAGE, it) }
showReviewPageFirst.let { state.set(EXTRA_SHOW_REVIEW_PAGE_FIRST, it) }
readOnlyMode.let { state.set(EXTRA_READ_ONLY, it) }
showSubmitButton?.let { state.set(EXTRA_SHOW_SUBMIT_BUTTON, it) }

return QuestionnaireViewModel(context, state)
}

Expand Down

0 comments on commit d4210a0

Please sign in to comment.