@@ -1533,6 +1533,102 @@ class QuestionnaireViewModelTest {
15331533 // Pagination //
15341534 // //
15351535 // ==================================================================== //
1536+ @Test
1537+ fun `should include all top level items as pages when any item has page extension` () = runTest {
1538+ val questionnaire =
1539+ Questionnaire ().apply {
1540+ id = " a-questionnaire"
1541+ addItem(
1542+ QuestionnaireItemComponent ().apply {
1543+ linkId = " page1-noExtension"
1544+ type = Questionnaire .QuestionnaireItemType .GROUP
1545+ addItem(
1546+ QuestionnaireItemComponent ().apply {
1547+ linkId = " page1-1"
1548+ type = Questionnaire .QuestionnaireItemType .BOOLEAN
1549+ text = " Question on page 1"
1550+ },
1551+ )
1552+ },
1553+ )
1554+ addItem(
1555+ QuestionnaireItemComponent ().apply {
1556+ linkId = " page2"
1557+ type = Questionnaire .QuestionnaireItemType .GROUP
1558+ addExtension(paginationExtension)
1559+ addItem(
1560+ QuestionnaireItemComponent ().apply {
1561+ linkId = " page2-1"
1562+ type = Questionnaire .QuestionnaireItemType .BOOLEAN
1563+ text = " Question on page 2"
1564+ },
1565+ )
1566+ },
1567+ )
1568+ addItem(
1569+ QuestionnaireItemComponent ().apply {
1570+ linkId = " page3-noExtension"
1571+ type = Questionnaire .QuestionnaireItemType .GROUP
1572+ addItem(
1573+ QuestionnaireItemComponent ().apply {
1574+ linkId = " page3-1"
1575+ type = Questionnaire .QuestionnaireItemType .BOOLEAN
1576+ text = " Question on page 3"
1577+ },
1578+ )
1579+ },
1580+ )
1581+ addItem(
1582+ QuestionnaireItemComponent ().apply {
1583+ linkId = " page4-noExtension-hidden"
1584+ addExtension(hiddenExtension)
1585+ type = Questionnaire .QuestionnaireItemType .GROUP
1586+ addItem(
1587+ QuestionnaireItemComponent ().apply {
1588+ linkId = " page4-1"
1589+ type = Questionnaire .QuestionnaireItemType .BOOLEAN
1590+ text = " Question on page 4"
1591+ },
1592+ )
1593+ },
1594+ )
1595+ addItem(
1596+ QuestionnaireItemComponent ().apply {
1597+ linkId = " page5"
1598+ type = Questionnaire .QuestionnaireItemType .GROUP
1599+ addExtension(paginationExtension)
1600+ addItem(
1601+ QuestionnaireItemComponent ().apply {
1602+ linkId = " page5-1"
1603+ type = Questionnaire .QuestionnaireItemType .BOOLEAN
1604+ text = " Question on page 5"
1605+ },
1606+ )
1607+ },
1608+ )
1609+ }
1610+
1611+ val viewModel = createQuestionnaireViewModel(questionnaire)
1612+ viewModel.runViewModelBlocking {
1613+ assertThat(
1614+ (viewModel.questionnaireStateFlow.value.displayMode as DisplayMode .EditMode ).pagination,
1615+ )
1616+ .isEqualTo(
1617+ QuestionnairePagination (
1618+ isPaginated = true ,
1619+ pages =
1620+ listOf (
1621+ QuestionnairePage (0 , enabled = true , hidden = false ),
1622+ QuestionnairePage (1 , enabled = true , hidden = false ),
1623+ QuestionnairePage (2 , enabled = true , hidden = false ),
1624+ QuestionnairePage (3 , enabled = true , hidden = true ),
1625+ QuestionnairePage (4 , enabled = true , hidden = false ),
1626+ ),
1627+ currentPageIndex = 0 ,
1628+ ),
1629+ )
1630+ }
1631+ }
15361632
15371633 @Test
15381634 fun `should show current page` () = runTest {
@@ -1830,8 +1926,11 @@ class QuestionnaireViewModelTest {
18301926 }
18311927 val viewModel = createQuestionnaireViewModel(questionnaire)
18321928 viewModel.runViewModelBlocking {
1929+ val questionnaireStatePagination =
1930+ (viewModel.questionnaireStateFlow.value.displayMode as DisplayMode .EditMode ).pagination
1931+
18331932 assertThat(
1834- (viewModel.questionnaireStateFlow.value.displayMode as DisplayMode . EditMode ).pagination ,
1933+ questionnaireStatePagination ,
18351934 )
18361935 .isEqualTo(
18371936 QuestionnairePagination (
@@ -1845,6 +1944,83 @@ class QuestionnaireViewModelTest {
18451944 currentPageIndex = 1 ,
18461945 ),
18471946 )
1947+
1948+ assertThat(questionnaireStatePagination.hasPreviousPage).isFalse()
1949+ }
1950+ }
1951+
1952+ @Test
1953+ fun `should skip last page if it is hidden` () = runTest {
1954+ val questionnaire =
1955+ Questionnaire ().apply {
1956+ id = " a-questionnaire"
1957+ addItem(
1958+ QuestionnaireItemComponent ().apply {
1959+ linkId = " page1"
1960+ type = Questionnaire .QuestionnaireItemType .GROUP
1961+ addExtension(paginationExtension)
1962+ addItem(
1963+ QuestionnaireItemComponent ().apply {
1964+ linkId = " page1-1"
1965+ type = Questionnaire .QuestionnaireItemType .BOOLEAN
1966+ text = " Question on page 1"
1967+ },
1968+ )
1969+ },
1970+ )
1971+ addItem(
1972+ QuestionnaireItemComponent ().apply {
1973+ linkId = " page2"
1974+ type = Questionnaire .QuestionnaireItemType .GROUP
1975+ addExtension(paginationExtension)
1976+ addItem(
1977+ QuestionnaireItemComponent ().apply {
1978+ linkId = " page2-1"
1979+ type = Questionnaire .QuestionnaireItemType .BOOLEAN
1980+ text = " Question on page 2"
1981+ },
1982+ )
1983+ },
1984+ )
1985+ addItem(
1986+ QuestionnaireItemComponent ().apply {
1987+ linkId = " page3"
1988+ type = Questionnaire .QuestionnaireItemType .GROUP
1989+ addExtension(paginationExtension)
1990+ addExtension(hiddenExtension)
1991+ addItem(
1992+ QuestionnaireItemComponent ().apply {
1993+ linkId = " page3-1"
1994+ type = Questionnaire .QuestionnaireItemType .BOOLEAN
1995+ text = " Question on page 3"
1996+ },
1997+ )
1998+ },
1999+ )
2000+ }
2001+ val viewModel = createQuestionnaireViewModel(questionnaire)
2002+ viewModel.runViewModelBlocking {
2003+ viewModel.goToNextPage()
2004+ val questionnaireStatePagination =
2005+ (viewModel.questionnaireStateFlow.value.displayMode as DisplayMode .EditMode ).pagination
2006+
2007+ assertThat(
2008+ questionnaireStatePagination,
2009+ )
2010+ .isEqualTo(
2011+ QuestionnairePagination (
2012+ isPaginated = true ,
2013+ pages =
2014+ listOf (
2015+ QuestionnairePage (0 , enabled = true , hidden = false ),
2016+ QuestionnairePage (1 , enabled = true , hidden = false ),
2017+ QuestionnairePage (2 , enabled = true , hidden = true ),
2018+ ),
2019+ currentPageIndex = 1 ,
2020+ ),
2021+ )
2022+
2023+ assertThat(questionnaireStatePagination.hasNextPage).isFalse()
18482024 }
18492025 }
18502026
0 commit comments