Skip to content

test: group video call critical flow test (WPB-22855)#4629

Open
emmaoke-w wants to merge 22 commits intodevelopfrom
WPB-22855-groupVideo-call-test
Open

test: group video call critical flow test (WPB-22855)#4629
emmaoke-w wants to merge 22 commits intodevelopfrom
WPB-22855-groupVideo-call-test

Conversation

@emmaoke-w
Copy link
Copy Markdown
Contributor

@emmaoke-w emmaoke-w commented Mar 8, 2026

https://wearezeta.atlassian.net/browse/WPB-22855


PR Submission Checklist for internal contributors

  • The PR Title

    • conforms to the style of semantic commits messages¹ supported in Wire's Github Workflow²
    • contains a reference JIRA issue number like SQPIT-764
    • answers the question: If merged, this PR will: ... ³
  • The PR Description

    • is free of optional paragraphs and you have filled the relevant parts to the best of your ability

What's new in this PR?

  • Added GroupVideoCall critical-flow test that covers full group video call behavior: backend setup, cross-team connection, participant add, call start/join, camera/video on, participant visibility, ping confirmation, in-call audio-recording restriction, audio-file playback checks, and call end.
  • Added/extended page-object methods needed by this scenario (group conversation details participant actions, group conversation details open, ping modal actions, call controls like camera on/restore/hang up, and audio modal handling).
  • Expanded call support helpers to validate group-video participants and stronger audio/video receive checks for all call participants.
  • Updated test-service helpers for more reliable conversation/message handling, strict personal MLS send entrypoint (userSendMessageToPersonalMlsConversation), improved conversation timer lookup (personal/group fallback), and clearer failure reporting on send.
  • Updated QR image creation in FileUtils to use MediaStore on Android Q+ (scoped storage safe write to Downloads), with legacy path handling kept for older Android versions.
  • Hardened flaky UI interactions with SystemClock-based polling/retry across key flows (notification/consent dialogs, menu/settings click path, modal visibility/disappearance checks, download modal Save click).
  • Added reusable wait helpers in UiWaitUtils (waitUntilVisible, waitUntilToastIsDisplayed, iSeeSystemMessage, assertToastDisplayed) and strengthened element stabilization timing.

Issues

Briefly describe the issue you have solved or implemented with this pull request. If the PR contains multiple issues, use a bullet list.

Causes (Optional)

Briefly describe the causes behind the issues. This could be helpful to understand the adopted solutions behind some nasty bugs or complex issues.

Solutions

Briefly describe the solutions you have implemented for the issues explained above.

Dependencies (Optional)

If there are some other pull requests related to this one (e.g. new releases of frameworks), specify them here.

Needs releases with:

  • GitHub link to other pull request

Testing

Test Coverage (Optional)

  • I have added automated test to this contribution

How to Test

Briefly describe how this change was tested and if applicable the exact steps taken to verify that it works as expected.

Notes (Optional)

Specify here any other facts that you think are important for this issue.

Attachments (Optional)

Attachments like images, videos, etc. (drag and drop in the text box)


PR Post Submission Checklist for internal contributors (Optional)

  • Wire's Github Workflow has automatically linked the PR to a JIRA issue

PR Post Merge Checklist for internal contributors

  • If any soft of configuration variable was introduced by this PR, it has been added to the relevant documents and the CI jobs have been updated.

References
  1. https://sparkbox.com/foundry/semantic_commit_messages
  2. https://github.com/wireapp/.github#usage
  3. E.g. feat(conversation-list): Sort conversations by most emojis in the title #SQPIT-764.

@pull-request-size
Copy link
Copy Markdown

Ups 🫰🟨

This PR is too big. Please try to break it up into smaller PRs.

@emmaoke-w emmaoke-w changed the title Wpb 22855 group video call test test: group video call critical flow test (WPB-22855) Mar 9, 2026
@emmaoke-w emmaoke-w marked this pull request as ready for review March 9, 2026 09:37
@emmaoke-w emmaoke-w requested a review from ohassine March 9, 2026 09:43
Copy link
Copy Markdown
Collaborator

@CinnamonNinja CinnamonNinja left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@sonarqubecloud
Copy link
Copy Markdown

Copy link
Copy Markdown
Contributor

@yamilmedina yamilmedina left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So far so good, 🚀 I would like to see this split into smaller PRs at least logically, so this can be tracked better and we can look backwards to know what/when we added tests for group calls

  • Group video call test
  • QR tests
  • fixes and improvements


step("And I pause audio message after 10 seconds") {
pages.conversationViewPage.apply {
waitFor(10) // wait to allow an audio file to play
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nitpick: maybe 5 seconds is enough since this will run on ci we should avoid big delays when possible

Comment on lines +436 to +441
waitFor(1)
step("And I play audio message") {
pages.conversationViewPage.apply {
clickPlayButtonOnAudioMessage()
}
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
waitFor(1)
step("And I play audio message") {
pages.conversationViewPage.apply {
clickPlayButtonOnAudioMessage()
}
}
step("And I play audio message") {
waitFor(1)
pages.conversationViewPage.apply {
clickPlayButtonOnAudioMessage()
}
}

Suggestion: Let's try keep it consistent; all other waits are inside the steps performed

Comment on lines +69 to +87
val deadline = SystemClock.uptimeMillis() + timeoutMs
var lastMenuClickAt = 0L

while (SystemClock.uptimeMillis() < deadline) {
if (tryClickIfVisible(settingsButton)) {
return this
}

val now = SystemClock.uptimeMillis()
if (now - lastMenuClickAt >= 600 && tryClickIfVisible(mainMenuButton)) {
lastMenuClickAt = now
device.waitForIdle(300)
}

SystemClock.sleep(120)
}

throw AssertionError("Settings menu entry was not found within ${timeoutMs}ms.")
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is doing too much, can we split? or rename to make it clear about the delays/wait? or as a last resort to add a kdoc in the function so explains a bit the needed for this wait.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants