Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature Request]: Create means for verifying Fragment Arguments #5485

Open
adhiamboperes opened this issue Aug 14, 2024 · 7 comments · Fixed by #5527
Open

[Feature Request]: Create means for verifying Fragment Arguments #5485

adhiamboperes opened this issue Aug 14, 2024 · 7 comments · Fixed by #5527
Assignees
Labels
enhancement End user-perceivable enhancements. Impact: Low Low perceived user impact (e.g. edge cases). Work: Medium The means to find the solution is clear, but it isn't at good-first-issue level yet.

Comments

@adhiamboperes
Copy link
Collaborator

Is your feature request related to a problem? Please describe.

We use Espresso Intents.Intended to verify activity intent params, but we also need to test the fragment arguments and saved state bundles for correcteness, and to prevent bugs during development.

Describe the solution you'd like

// TODO

Describe alternatives you've considered

// TODO

Additional context

No response

@adhiamboperes adhiamboperes added Impact: Low Low perceived user impact (e.g. edge cases). enhancement End user-perceivable enhancements. Work: Medium The means to find the solution is clear, but it isn't at good-first-issue level yet. labels Aug 14, 2024
@subhajitxyz
Copy link
Collaborator

Ho @adhiamboperes , can i work on this ?

@adhiamboperes
Copy link
Collaborator Author

adhiamboperes commented Aug 17, 2024 via email

@subhajitxyz
Copy link
Collaborator

Sure.

@subhajitxyz
Copy link
Collaborator

subhajitxyz commented Aug 22, 2024

Hi @adhiamboperes , please check my approach and share your views on it.

   @Test
    fun testMarkTopicsCompletedFragment_SaveInstanceState_workProperly() {
      launch<MarkTopicsCompletedTestActivity>(
        createMarkTopicsCompletedTestActivityIntent(internalProfileId)
      ).use { scenario ->
        testCoroutineDispatchers.runCurrent()
        scenario.onActivity { activity ->
  
          var fragment = activity.supportFragmentManager
            .findFragmentById(R.id.mark_topics_completed_container) as MarkTopicsCompletedFragment
  
          fragment.markTopicsCompletedFragmentPresenter.selectedTopicIdList =
            arrayListOf("topic_1", "topic_2")
  
          activity.recreate()
  
          fragment = activity.supportFragmentManager
            .findFragmentById(R.id.mark_topics_completed_container) as MarkTopicsCompletedFragment
  
          val restoredTopicIdList = fragment.markTopicsCompletedFragmentPresenter.selectedTopicIdList
          assertThat(restoredTopicIdList).isEqualTo(listOf("topic_1", "topic_2"))
        }
      }
    }
  
  
  @Test
    fun testAudioFragment_arguments_workingProperly() {
      addMediaInfo()
      launch<AudioFragmentTestActivity>(
        createAudioFragmentTestIntent(internalProfileId)
      ).use { scenario ->
        testCoroutineDispatchers.runCurrent()
        scenario.onActivity { activity ->
  
          val audioFragment = activity.supportFragmentManager
            .findFragmentById(R.id.audio_fragment_placeholder) as AudioFragment
          val receivedProfileId = audioFragment.arguments?.extractCurrentUserProfileId()
  
          assertThat(receivedProfileId).isEqualTo(profileId)
        }
      }
    }

@adhiamboperes
Copy link
Collaborator Author

Hi @subhajitxyz, the approach does look good. For the implementation, please opt to create a PR with only a small subset of packages at once, rather than all the fragment tests in one PR. For example, we have about 30 packages, so we could do this in 3 different PRs for ease of review.

@subhajitxyz
Copy link
Collaborator

Ok, fine.

@subhajitxyz
Copy link
Collaborator

Hi @adhiamboperes ,
My previous approach for testing saveInstanceState works fine on Expresso test but it failed on robolectric test.

So ,I have changed my approach little bit . try to recreate the scenario instead of activity.

please check it and share your views.

Here is my new approach.

@Test
  fun testFragment_saveInstanceState_restoresSelectedTopicsCorrectly() {
    launch<MarkTopicsCompletedTestActivity>(
      createMarkTopicsCompletedTestActivityIntent(internalProfileId)
    ).use { scenario ->
      testCoroutineDispatchers.runCurrent()
      onView(withId(R.id.mark_topics_completed_all_check_box_container)).perform(click())
      var actualSelectedTopicsList = ArrayList<String>()

      scenario.onActivity { activity ->

        var fragment = activity.supportFragmentManager
          .findFragmentById(R.id.mark_topics_completed_container) as MarkTopicsCompletedFragment
        actualSelectedTopicsList =
          fragment.markTopicsCompletedFragmentPresenter.selectedTopicIdList
        }

        scenario.recreate()

        scenario.onActivity { activity->
          val fragment1 = activity.supportFragmentManager
            .findFragmentById(R.id.mark_topics_completed_container) as MarkTopicsCompletedFragment
          val restoredTopicIdList = fragment1.markTopicsCompletedFragmentPresenter.selectedTopicIdList

          assertThat(restoredTopicIdList).isEqualTo(actualSelectedTopicsList)
        }
      }
  }

@adhiamboperes adhiamboperes reopened this Sep 5, 2024
adhiamboperes pushed a commit that referenced this issue Sep 16, 2024
<!-- READ ME FIRST: Please fill in the explanation section below and
check off every point from the Essential Checklist! -->
## Explanation
Fixes #5485
Added test for 10 fragments arguments and saveInstanceState.

## Essential Checklist
<!-- Please tick the relevant boxes by putting an "x" in them. -->
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [ ] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).

## For UI-specific PRs only
<!-- Delete these section if this PR does not include UI-related
changes. -->
If your PR includes UI-related changes, then:
- Add screenshots for portrait/landscape for both a tablet & phone of
the before & after UI changes
- For the screenshots above, include both English and pseudo-localized
(RTL) screenshots (see [RTL
guide](https://github.com/oppia/oppia-android/wiki/RTL-Guidelines))
- Add a video showing the full UX flow with a screen reader enabled (see
[accessibility
guide](https://github.com/oppia/oppia-android/wiki/Accessibility-A11y-Guide))
- For PRs introducing new UI elements or color changes, both light and
dark mode screenshots must be included
- Add a screenshot demonstrating that you ran affected Espresso tests
locally & that they're passing

---------

Co-authored-by: Mr. 17 <[email protected]>
@theMr17 theMr17 reopened this Sep 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement End user-perceivable enhancements. Impact: Low Low perceived user impact (e.g. edge cases). Work: Medium The means to find the solution is clear, but it isn't at good-first-issue level yet.
Projects
Development

Successfully merging a pull request may close this issue.

3 participants