Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
d8ac7ff
Updated test workspace url
Rohit3523 Dec 5, 2025
fe0ac85
Update url in more place
Rohit3523 Dec 5, 2025
f6094e7
Some test fix
Rohit3523 Dec 6, 2025
951d958
Added retry
Rohit3523 Dec 7, 2025
97e5dae
some changes
Rohit3523 Dec 7, 2025
1e47fcf
disable secureTextEntry in e2e build
Rohit3523 Dec 7, 2025
552e5f9
fix server delete
Rohit3523 Dec 7, 2025
39c4230
fix ;-;
Rohit3523 Dec 7, 2025
1c83f70
correct point
Rohit3523 Dec 7, 2025
2fd8aeb
some more changes
Rohit3523 Dec 7, 2025
e430444
Merge branch 'develop' into new-mobile-workspace
Rohit3523 Dec 12, 2025
e4f590c
Refactor seen paths tracking in run-maestro.sh
Rohit3523 Dec 13, 2025
60c9ecd
Update Maestro installation script URL
Rohit3523 Dec 13, 2025
d2ae7ae
Update Maestro installation script URL
Rohit3523 Dec 13, 2025
06fc387
Make unread badge for android-only
Rohit3523 Dec 16, 2025
6f13320
room fix
Rohit3523 Dec 16, 2025
ee9c1c8
more changes to unread badge
Rohit3523 Dec 16, 2025
5f5ebc8
Merge branch 'develop' into new-mobile-workspace
Rohit3523 Dec 17, 2025
d1c8b0d
Some changes to unread badge test
Rohit3523 Dec 17, 2025
5bca91a
reduce in app notification time
Rohit3523 Dec 17, 2025
adff051
fix test
Rohit3523 Dec 17, 2025
f337490
default value change
Rohit3523 Dec 17, 2025
9416f66
Merge branch 'develop' into new-mobile-workspace
Rohit3523 Dec 17, 2025
457adb6
increase retry from 2 to 3 ;-;
Rohit3523 Dec 17, 2025
9339a40
Merge branch 'develop' into new-mobile-workspace
Rohit3523 Dec 18, 2025
d38241e
update url
Rohit3523 Dec 18, 2025
0966f82
Merge branch 'new-mobile-workspace' of https://github.com/RocketChat/…
Rohit3523 Dec 18, 2025
c5cea73
increase timeout
Rohit3523 Dec 18, 2025
5ba4944
Merge branch 'develop' into new-mobile-workspace
diegolmello Dec 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions .github/scripts/run-maestro.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ PLATFORM="${1:-${PLATFORM:-android}}"
SHARD="${2:-${SHARD:-default}}"
FLOWS_DIR=".maestro/tests"
MAIN_REPORT="maestro-report.xml"
MAX_RERUN_ROUNDS="${MAX_RERUN_ROUNDS:-2}"
MAX_RERUN_ROUNDS="${MAX_RERUN_ROUNDS:-3}"
RERUN_REPORT_PREFIX="maestro-rerun"
export MAESTRO_DRIVER_STARTUP_TIMEOUT="${MAESTRO_DRIVER_STARTUP_TIMEOUT:-120000}"

Expand Down Expand Up @@ -51,11 +51,12 @@ echo "Mapped flows for tag test-${SHARD}:"
awk -F'\t' '{ printf " %s -> %s\n", $1, $2 }' "$MAPFILE"

FLOW_FILES=()
declare -A SEEN
SEEN_PATHS=""

while IFS=$'\t' read -r name path; do
if [ -z "${SEEN[$path]:-}" ]; then
if ! printf '%s\n' "$SEEN_PATHS" | grep -Fqx "$path"; then
FLOW_FILES+=("$path")
SEEN[$path]=1
SEEN_PATHS="${SEEN_PATHS}"$'\n'"$path"
fi
done < "$MAPFILE"

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/maestro-android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,4 @@ jobs:
with:
name: Android Maestro Logs - Shard ${{ inputs.shard }}
path: ~/.maestro/tests/**/*.png
retention-days: 7
retention-days: 7
2 changes: 1 addition & 1 deletion .github/workflows/maestro-ios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,4 @@ jobs:
with:
name: iOS Maestro Logs - Shard ${{ inputs.shard }}
path: ~/.maestro/tests/**/*.png
retention-days: 7
retention-days: 7
2 changes: 1 addition & 1 deletion .maestro/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Contains the scripts that are going to be executed by the flows before running t
#### `data.js`

- Contains seeds to common test data, like server url, public channels, etc
- Currently we point to https://mobile.rocket.chat as main server
- Currently we point to https://mobile.qa.rocket.chat as main server
- Pointing to a local server is not recommended yet, as you would need to create a few public channels and change some permissions
- Ideally we should point to a docker or even a mocked server, but that's tbd
- Try not to add new data there. Use random values instead.
Expand Down
4 changes: 2 additions & 2 deletions .maestro/scripts/data.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const data = {
server: 'https://mobile.rocket.chat',
server: 'https://mobile.qa.rocket.chat',
alternateServer: 'https://stable.rocket.chat',
...output.account,
accounts: [],
Expand All @@ -15,4 +15,4 @@ const data = {
e2eePassword: 'Password1@abcdefghijklmnopqrst'
};

output.data = data;
output.data = data;
27 changes: 26 additions & 1 deletion .maestro/scripts/random.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,37 @@ function random(length = 10) {
return text;
}

function generatePassword(length = 10) {
const lower = 'abcdefghijklmnopqrstuvwxyz'
const upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
const nums = '0123456789'
const all = lower + upper + nums

let password = ''
password += lower[Math.floor(Math.random() * lower.length)]
password += upper[Math.floor(Math.random() * upper.length)]
password += nums[Math.floor(Math.random() * nums.length)]

while (password.length < length) {
const char = all[Math.floor(Math.random() * all.length)]
const last = password[password.length - 1]
const secondLast = password[password.length - 2]
const thirdLast = password[password.length - 3]

if (char === last && char === secondLast && char === thirdLast) continue
password += char
}

return password
}


const randomUser = () => {
const randomVal = random();
return {
username: 'user' + randomVal,
name: 'user' + randomVal,
password: 'Password1@' + randomVal,
password: generatePassword(),
email: 'mobile+' + randomVal + '@rocket.chat'
};
}
Expand Down
25 changes: 6 additions & 19 deletions .maestro/tests/assorted/accessibility-and-appearance.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,11 @@ tags:

- extendedWaitUntil:
visible:
text: '.*@all - all mention.*'
text: '@all - all mention'
timeout: 60000
- extendedWaitUntil:
visible:
text: '.*@rocket.cat - user mention.*'
text: '@rocket.cat - user mention'
timeout: 60000

# should disable mentions with @ symbol
Expand Down Expand Up @@ -126,19 +126,11 @@ tags:

- extendedWaitUntil:
visible:
text: '.*all - all mention.*'
timeout: 60000
- extendedWaitUntil:
notVisible:
text: '.*@all - all mention.*'
text: 'all - all mention'
timeout: 60000
- extendedWaitUntil:
visible:
text: '.*rocket.cat - user mention.*'
timeout: 60000
- extendedWaitUntil:
notVisible:
text: '.*@rocket.cat - user mention.*'
text: 'rocket.cat - user mention'
timeout: 60000

# should enable rooms with # symbol
Expand Down Expand Up @@ -173,7 +165,7 @@ tags:

- extendedWaitUntil:
visible:
text: '.*#general - channel mention.*'
text: '#general - channel mention'
timeout: 60000

# should disable mentions with # symbol
Expand Down Expand Up @@ -205,12 +197,7 @@ tags:
file: '../../helpers/search-and-navigate-room.yaml'
env:
ROOM: 'maestro-accessibility-test'

- extendedWaitUntil:
visible:
text: '.*general - channel mention.*'
timeout: 60000
- extendedWaitUntil:
notVisible:
text: '.*#general - channel mention.*'
text: 'general - channel mention'
timeout: 60000
16 changes: 14 additions & 2 deletions .maestro/tests/assorted/changeserver.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -180,8 +180,20 @@ tags:
visible:
text: '.*Delete.*'
timeout: 60000
- tapOn:
text: 'Delete'
- runFlow:
when:
platform: iOS
commands:
- tapOn:
point: 65%,55%
retryTapIfNoChange: true
- runFlow:
when:
platform: Android
commands:
- tapOn:
text: 'Delete'
retryTapIfNoChange: true
Comment on lines +183 to +196
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Use text or accessibility identifier-based selectors instead of coordinates for cross-device compatibility.

The iOS flow's hardcoded coordinates (65%, 55%) are device-dependent and may fail on different screen sizes or resolutions. The Android flow already uses the superior text: 'Delete' selector. Consider whether the Delete button has an accessibility identifier and update both flows consistently:

- runFlow:
    when:
      platform: iOS
    commands:
      - tapOn:
          text: 'Delete'
          retryTapIfNoChange: true
- runFlow:
    when:
      platform: Android
    commands:
      - tapOn:
          text: 'Delete'
          retryTapIfNoChange: true

Note: retryTapIfNoChange addresses timing issues with screen hierarchy changes, not coordinate fragility.

🤖 Prompt for AI Agents
.maestro/tests/assorted/changeserver.yaml around lines 183 to 196: the iOS
runFlow uses hardcoded screen coordinates (65%,55%) which are device-dependent;
replace the coordinate-based tap with a selector-based tap (use the button's
text or its accessibility identifier) and make the iOS flow consistent with the
Android flow by using the same tapOn selector (e.g., text: 'Delete' or
accessibilityId: '<identifier>') while keeping retryTapIfNoChange: true to
preserve retry behavior.


# verify alternate server is deleted
- waitForAnimationToEnd:
Expand Down
16 changes: 14 additions & 2 deletions .maestro/tests/assorted/delete-server.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,20 @@ tags:
visible:
text: '.*Delete.*'
timeout: 60000
- tapOn:
text: 'Delete'
- runFlow:
when:
platform: iOS
commands:
- tapOn:
point: 65%,55%
retryTapIfNoChange: true
- runFlow:
when:
platform: Android
commands:
- tapOn:
text: 'Delete'
retryTapIfNoChange: true
Comment on lines +96 to +109
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Coordinate-based taps are fragile across device configurations.

Same concern as in changeserver.yaml: the iOS flow uses hardcoded coordinates (65%, 55%) which may fail on devices with different screen configurations. Consider using ID-based selectors if available.

🤖 Prompt for AI Agents
In .maestro/tests/assorted/delete-server.yaml around lines 96 to 109, the iOS
step uses a hardcoded coordinate tap (65%,55%) which is fragile; replace the
coordinate-based tap with an element-based selector (accessibility id,
resource-id, label or visible text) that targets the Delete button, preserve
retryTapIfNoChange behavior, and add a safe fallback to the coordinate tap only
if the selector lookup fails so tests remain robust across screen sizes and
configurations.

- waitForAnimationToEnd:
timeout: 300
- extendedWaitUntil:
Expand Down
5 changes: 1 addition & 4 deletions .maestro/tests/assorted/user-preferences.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ tags:
visible:
text: ':('
timeout: 60000

- extendedWaitUntil:
notVisible:
text: '😞'
Expand Down Expand Up @@ -140,7 +141,3 @@ tags:
visible:
text: '😞'
timeout: 60000
- extendedWaitUntil:
notVisible:
text: ':('
timeout: 60000
10 changes: 5 additions & 5 deletions .maestro/tests/onboarding/server-history.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ tags:
- assertVisible:
id: 'action-sheet'
- assertVisible:
id: 'servers-history-https://mobile.rocket.chat'
id: 'servers-history-https://mobile.qa.rocket.chat'

# should tap on a server history and navigate to login
- tapOn:
id: 'servers-history-https://mobile.rocket.chat'
id: 'servers-history-https://mobile.qa.rocket.chat'
- assertVisible:
id: 'login-view-submit'
- assertVisible: ${output.user.username}
Expand All @@ -43,17 +43,17 @@ tags:
- tapOn:
id: 'servers-history-button'
- assertVisible:
id: 'servers-history-https://mobile.rocket.chat'
id: 'servers-history-https://mobile.qa.rocket.chat'

# swipe left to reveal delete button and delete the server history
- swipe:
direction: LEFT
from:
id: 'servers-history-https://mobile.rocket.chat'
id: 'servers-history-https://mobile.qa.rocket.chat'
- waitForAnimationToEnd:
timeout: 500
- tapOn:
id: 'servers-history-https://mobile.rocket.chat-delete'
id: 'servers-history-https://mobile.qa.rocket.chat-delete'
- extendedWaitUntil:
notVisible:
id: 'servers-history-button'
Expand Down
8 changes: 5 additions & 3 deletions .maestro/tests/room/room.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ tags:
- swipe:
from:
id: action-sheet-handle
direction: down
direction: DOWN
- extendedWaitUntil:
notVisible:
id: 'reactionsList'
Expand All @@ -269,6 +269,7 @@ tags:
timeout: 60000
- tapOn:
id: 'username-header-${output.user.username}'
retryTapIfNoChange: true
- extendedWaitUntil:
visible:
id: room-info-view-username
Expand All @@ -289,10 +290,11 @@ tags:

- extendedWaitUntil:
visible:
text: .*${output.otherUser.username}.*
id: 'username-header-${output.otherUser.username}'
timeout: 60000
- tapOn:
text: .*${output.otherUser.username}.*
id: 'username-header-${output.otherUser.username}'
retryTapIfNoChange: true
- extendedWaitUntil:
visible:
id: room-info-view-username
Expand Down
21 changes: 21 additions & 0 deletions .maestro/tests/room/unread-badge.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ onFlowStart:
- runFlow: '../../helpers/setup.yaml'
tags:
- test-13
- android-only

---
- evalScript: ${output.user = output.utils.createUser()}
Expand All @@ -21,6 +22,8 @@ tags:
visible:
id: 'rooms-list-view-item-${output.otherUser.username}'
timeout: 60000
- waitForAnimationToEnd:
timeout: 10000
- extendedWaitUntil:
visible:
id: 'unread-badge-1'
Expand All @@ -31,6 +34,9 @@ tags:
id: 'rooms-list-view-item-${output.otherUser.username}'
- tapOn:
id: header-back
retryTapIfNoChange: true
- waitForAnimationToEnd:
timeout: 5000
- extendedWaitUntil:
notVisible:
id: 'unread-badge-1'
Expand All @@ -44,6 +50,8 @@ tags:
visible:
id: 'rooms-list-view-item-${output.otherUser.username}'
timeout: 60000
- waitForAnimationToEnd:
timeout: 10000
- extendedWaitUntil:
visible:
id: 'mention-badge-1'
Expand All @@ -54,6 +62,9 @@ tags:
id: 'rooms-list-view-item-${output.otherUser.username}'
- tapOn:
id: header-back
retryTapIfNoChange: true
- waitForAnimationToEnd:
timeout: 5000
- extendedWaitUntil:
notVisible:
id: 'mention-badge-1'
Expand All @@ -68,6 +79,8 @@ tags:
visible:
id: 'rooms-list-view-item-${output.otherUser.username}'
timeout: 60000
- waitForAnimationToEnd:
timeout: 10000
- extendedWaitUntil:
visible:
id: 'mention-badge-2'
Expand All @@ -78,6 +91,9 @@ tags:
id: 'rooms-list-view-item-${output.otherUser.username}'
- tapOn:
id: header-back
retryTapIfNoChange: true
- waitForAnimationToEnd:
timeout: 5000
- extendedWaitUntil:
notVisible:
id: 'mention-badge-2'
Expand All @@ -92,6 +108,8 @@ tags:
visible:
id: 'rooms-list-view-item-${output.otherUser.username}'
timeout: 60000
- waitForAnimationToEnd:
timeout: 10000
- extendedWaitUntil:
visible:
id: 'mention-badge-2'
Expand All @@ -102,6 +120,9 @@ tags:
id: 'rooms-list-view-item-${output.otherUser.username}'
- tapOn:
id: header-back
retryTapIfNoChange: true
- waitForAnimationToEnd:
timeout: 5000
- extendedWaitUntil:
notVisible:
id: 'mention-badge-2'
Expand Down
2 changes: 1 addition & 1 deletion .maestro/tests/teams/utils/close-action-sheet.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ tags:
- swipe:
from:
id: action-sheet-handle
direction: down
direction: DOWN
- extendedWaitUntil:
notVisible:
id: action-sheet-handle
Expand Down
2 changes: 1 addition & 1 deletion app/containers/InAppNotification/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
componentProps: {
notification
},
duration: notification.customTime || process.env.RUNNING_E2E_TESTS ? 60000 : 3000, // default 3s,
duration: notification.customTime || (process.env.RUNNING_E2E_TESTS ? 5000 : 3000), // default 3s,
hideOnPress: notification.hideOnPress ?? true,
swipeEnabled: notification.swipeEnabled ?? true
});
Expand All @@ -71,7 +71,7 @@
return () => {
EventEmitter.removeListener(INAPP_NOTIFICATION_EMITTER, listener);
};
}, [subscribedRoom, appState]);

Check warning on line 74 in app/containers/InAppNotification/index.tsx

View workflow job for this annotation

GitHub Actions / format

React Hook useEffect has a missing dependency: 'show'. Either include it or remove the dependency array

Check warning on line 74 in app/containers/InAppNotification/index.tsx

View workflow job for this annotation

GitHub Actions / ESLint and Test / run-eslint-and-test

React Hook useEffect has a missing dependency: 'show'. Either include it or remove the dependency array

return <NotifierRoot />;
});
Expand Down
Loading
Loading