Skip to content

Commit

Permalink
Fix #3901 : [A11Y] Terminal state question player recyclerview fix (#…
Browse files Browse the repository at this point in the history
…4004)

* A11y on terminal state fixed

* Lint fixes

* Lint fixes

* test added

* lint test

* lint check

Co-authored-by: Zerg <[email protected]>
  • Loading branch information
bkaur-bkj and rt4914 authored Dec 10, 2021
1 parent 4b0797f commit ec69efc
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -328,13 +328,15 @@ class StatePlayerRecyclerViewAssembler private constructor(
translationController.extractString(
ephemeralState.state.content, ephemeralState.writtenTranslationContext
)
pendingItemList += ContentViewModel(
contentSubtitledHtml,
gcsEntityId,
hasConversationView,
isSplitView.get()!!,
playerFeatureSet.conceptCardSupport
)
if (contentSubtitledHtml.isNotEmpty()) {
pendingItemList += ContentViewModel(
contentSubtitledHtml,
gcsEntityId,
hasConversationView,
isSplitView.get()!!,
playerFeatureSet.conceptCardSupport
)
}
}

private fun addPreviousAnswers(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.UiController
import androidx.test.espresso.ViewAction
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.action.ViewActions.closeSoftKeyboard
import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.contrib.RecyclerViewActions.scrollToHolder
import androidx.test.espresso.contrib.RecyclerViewActions.scrollToPosition
Expand Down Expand Up @@ -59,9 +61,13 @@ import org.oppia.android.app.model.ProfileId
import org.oppia.android.app.model.WrittenTranslationLanguageSelection
import org.oppia.android.app.player.state.itemviewmodel.StateItemViewModel
import org.oppia.android.app.player.state.itemviewmodel.StateItemViewModel.ViewType.CONTENT
import org.oppia.android.app.player.state.itemviewmodel.StateItemViewModel.ViewType.CONTINUE_NAVIGATION_BUTTON
import org.oppia.android.app.player.state.itemviewmodel.StateItemViewModel.ViewType.FEEDBACK
import org.oppia.android.app.player.state.itemviewmodel.StateItemViewModel.ViewType.SELECTION_INTERACTION
import org.oppia.android.app.player.state.itemviewmodel.StateItemViewModel.ViewType.SUBMIT_ANSWER_BUTTON
import org.oppia.android.app.player.state.itemviewmodel.StateItemViewModel.ViewType.TEXT_INPUT_INTERACTION
import org.oppia.android.app.recyclerview.RecyclerViewMatcher.Companion.atPositionOnView
import org.oppia.android.app.recyclerview.RecyclerViewMatcher.Companion.hasItemCount
import org.oppia.android.app.shim.ViewBindingShimModule
import org.oppia.android.app.topic.PracticeTabModule
import org.oppia.android.app.translation.testing.ActivityRecreatorTestModule
Expand Down Expand Up @@ -104,11 +110,13 @@ import org.oppia.android.domain.translation.TranslationController
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.AccessibilityTestRule
import org.oppia.android.testing.BuildEnvironment
import org.oppia.android.testing.DisableAccessibilityChecks
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.data.DataProviderTestMonitor
import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.profile.ProfileTestHelper
import org.oppia.android.testing.robolectric.RobolectricModule
Expand Down Expand Up @@ -160,6 +168,9 @@ class QuestionPlayerActivityTest {
/* launchActivity= */ false
)

@Inject
lateinit var editTextInputAction: EditTextInputAction

@Inject
lateinit var testCoroutineDispatchers: TestCoroutineDispatchers

Expand Down Expand Up @@ -421,6 +432,46 @@ class QuestionPlayerActivityTest {
}
}

@Test
@DisableAccessibilityChecks // TODO(#3927): Feedback item should be min 48dp in height.
fun testQuestionPlayer_terminalState_recyclerViewItemCount_countIsTwo() {
updateContentLanguage(profileId, OppiaLanguage.ENGLISH)
launchForSkillList(SKILL_ID_LIST).use {
selectMultipleChoiceOption(optionPosition = 2)
clickContinueNavigationButton()

typeTextInput("1/4")
clickSubmitAnswerButton()
clickContinueNavigationButton()

typeTextInput("3/4")
clickSubmitAnswerButton()
clickContinueNavigationButton()

onView(withId(R.id.question_recycler_view)).check(hasItemCount(count = 2))
}
}

@Test
@DisableAccessibilityChecks // TODO(#3927): Feedback item should be min 48dp in height.
fun testQuestionPlayer_terminalState_recyclerView_contentItem_isNotEmpty() {
updateContentLanguage(profileId, OppiaLanguage.ENGLISH)
launchForSkillList(SKILL_ID_LIST).use {
selectMultipleChoiceOption(optionPosition = 2)
clickContinueNavigationButton()

typeTextInput("1/4")
clickSubmitAnswerButton()
clickContinueNavigationButton()

typeTextInput("3/4")
clickSubmitAnswerButton()
clickContinueNavigationButton()

onView(withId(R.id.content_text_view)).check(doesNotExist())
}
}

private fun setUpTestApplicationComponent() {
ApplicationProvider.getApplicationContext<TestApplication>().inject(this)
}
Expand All @@ -438,6 +489,31 @@ class QuestionPlayerActivityTest {
return scenario
}

private fun clickContinueNavigationButton() {
scrollToViewType(CONTINUE_NAVIGATION_BUTTON)
onView(withId(R.id.continue_navigation_button)).perform(click())
testCoroutineDispatchers.runCurrent()
}

private fun clickSubmitAnswerButton() {
scrollToViewType(SUBMIT_ANSWER_BUTTON)
onView(withId(R.id.submit_answer_button)).perform(click())
testCoroutineDispatchers.runCurrent()
}

private fun typeTextInput(text: String) {
scrollToViewType(TEXT_INPUT_INTERACTION)
typeTextIntoInteraction(text, interactionViewId = R.id.text_input_interaction_view)
}

private fun typeTextIntoInteraction(text: String, interactionViewId: Int) {
onView(withId(interactionViewId)).perform(
editTextInputAction.appendText(text),
closeSoftKeyboard()
)
testCoroutineDispatchers.runCurrent()
}

private fun rotateToLandscape() {
onView(isRoot()).perform(orientationLandscape())
testCoroutineDispatchers.runCurrent()
Expand Down

0 comments on commit ec69efc

Please sign in to comment.