Rocket.Chat.ReactNative/e2e
Diego Mello 9ba37107c7
[CHORE] Migrate to Watermelon (#1171)
* Install

* Create subscriptions

* Subscription observing and sorting

* Saving last message

* Stash

* Stash

* stash

* Stash

* Rooms list listing :)

* Animated set state

* Search working

* Fix load rooms on login

* stash db class

* set active db with path

* Remove db on logout

* stash

* Created updateMessages

* Inserting/updating threads

* Persisting thread messages

* Removed unused list

* Loading messages from watermelon

* Debounce updates and rerender message

* optional fields

* Fix realm conflict issues

* Fix some render issues

* stash

* List mount

* stash

* fix message id

* Fix tmsg

* - Save subscription.rid as id on watermelon and _id as _id
- Send room as param to room view

* Throttle room updates

* stash

* comment removeClippedSubviews

* Fetch thread name

* try/catch updateMessages

* Show loading while RoomView.init is still running

* stash

* Fix updateMessages

* Threads

* Delete message

* Permalink

* Pin

* Star

* Report

* MessageActions refactor

* Edit message

* Reply message

* Add reaction

* Auto translate

* Fix connection issues

* Mark message as error if something happened on the call

* Error actions

* get custom emoji

* Always run console.log when __DEV__

* Try to create serversDB

* Don't call updateMessages. Execute that entire logic for one message id instead.

* Refactor update messages

* ServersDB User [Realm -> Watermelon]

* Fix models

* Custom emojis

* Custom emojis on emoji picker

* Frequently used emojis

* Fix add reaction on message

* stash

* Fix

* Read messages

* Fix thread

* Fetch thread header

* Follow/unfollow thread

* Fix thread

* Upload file

* Thread tweak

* Realm -> Watermelon [Share Extension]

* Add RoomsUpdatedAt to Servers Table

* Settings

* Settings

* Fix logout

* SendFileMessage ServersDB

* ServersDB on serverDropdown

* Remove serversDB from Realm

* Load thread messages

* Delete message

* Improve getSettings

* Improve

* Remove subscription

* Remove update

* Update room via socket

* Small refactor

* Fix logout and improve migration

* Refactor updateMessages

* Improve migration

* Remove unnecessary update

* Revert remove runAfterInteractions

* Fix serverDropdown

* Fix merge

* Init room actions Watermelon

* Room actions Watermelon

* Remove realm on room members

* Room swipe -> Watermelon

* Fix hideChannel

* Get roles watermelon

* Get permissions watermelon

* Users typing + memory db

* Auto translate watermelon

* New Message View

* Selected Users View

* try/catch

* Get Slash Commands watermelon

* Slash Commands message box

* Custom emojis message box

* Get rooms message box

* Room info view

* Room info edit

* Save active users

* Small refactor

* Message Actions

* hasPermission await

* last hasPermission fix

* Active users on redux

* Add user roles

* Users typing on redux and remove memory db

* Fix saga delay

* Fix few issues

* Fix slash commands preview

* Draft message

* Add muted

* Unread count watermelon

* Remove realm

* Fiz RoomItem rerenders

* Remove realm config

* Rerender status update on RoomItem

* Refactor RoomsListView

* Fix load missed messages

* Fix room update

* Message refactor

* Fixing lint

* removeClippedSubviews on iOS only

* Added few interaction managers

* Fix few rerenders

* Fix RoomItem status typo

* Fix RoomView.SCU

* Fix broadcast

* Fix user status on RoomActionsView

* Fix RocketChat.hasPermission

* Fix database inconsistencies

* Fix few update issues

* Add rxjs and remove with observables

* Fix tests

* Remove subscriptions

* Fix RoomsListView SCU

* Change database structure and set all schemas to 1

* Fix RoomsListView search

* Fixed errors, removed rerenders and added animation

* Fixed a few errors

* Fix lint

* Fix issues caught by LGTM

* fix ios build

* Fix load unjoined channel messages

* Log on database path on startup

* Fix join channel

* Remove react-native-realm-path

* Set user status on login.user reducer

* Fix status not rendering on RoomsListView

* Fix few reducers

* Fix users going offline

* Never use "watermelon" term directly. Replaced by "database"

* Fix custom emoji

* Creating room from app must update roomUpdatedAt

* Log subscribeRoom start

* Fix room subscribe right after creating a DM

* Refactor is read only on messages actions

* Fix typo

* Fix typo

* Review

* Fix schema

* Fix muted & freq emoji & unpin & unstar

* Remove throttleTime to room info & fix reset on edit room

* Fix openServerDropdown spec & Fix unarchive

* Fix MessageAction

* Refactor RoomInfoEditView

* Remove unnecessary condition

* Remove unnecessary condition

* Remove unnecessary condition

* Remove get database

* Rename Command.js to SlashCommand.js

* Create sanitizer util

* Fix indentation

* Create subscription.t index

* Refactor queries on RoomsListView

* Create subscription.name index

* Fix getPermissions

* Fix indentation

* Add missing await

* Fix rocketchat.hasPermission

* Unnecessary change

* Star, pin e delete message refactored

* Refactor customEmojis reducer

* Remove code

* Remove logs

* Remove throttle

* Call this.init on foreground focus on RoomView

* Bump servers schema migration

* Always mark message as sent after a success

* Fetch only messages needed on updateMessages

* Just leave a comment for now

* Fetch only subscriptions returned by fetch

* Set room param on RoomView header in find room

* Update kotlin

* Fix auto translate constructor

* Fix few setState on constructor

* Fix empty room image blinking while mounting

* Improve fetch/persist execution for custom emojis, permissions and settings

* Query only user tapped on RoomMembersView

* Fix typo on canOpenRoom
2019-09-16 17:26:32 -03:00
..
helpers Switch to react-navigation (#687) 2019-03-12 13:23:06 -03:00
00-onboarding.spec.js [WIP] New Authentication layout (#536) 2018-11-14 19:42:03 -02:00
01-welcome.spec.js [WIP] New Authentication layout (#536) 2018-11-14 19:42:03 -02:00
02-legal.spec.js Active users improvements (#855) 2019-04-29 13:03:52 -03:00
03-forgotpassword.spec.js [CHORE] Make e2e pass on CircleCI (#933) 2019-06-03 16:20:36 -03:00
04-createuser.spec.js [CHORE] Make e2e pass on CircleCI (#933) 2019-06-03 16:20:36 -03:00
05-login.spec.js [WIP] New Authentication layout (#536) 2018-11-14 19:42:03 -02:00
06-roomslist.spec.js Create class to manage navigation (#594) 2019-01-31 14:08:38 -02:00
07-createroom.spec.js Use FlatList in RoomView (#762) 2019-03-27 17:06:57 -03:00
08-room.spec.js [NEW] Settings view (#900) 2019-06-11 11:01:40 -03:00
09-roomactions.spec.js [IMPROVEMENT] Notification Preference (#1105) 2019-08-23 13:24:15 -03:00
10-roominfo.spec.js Switch toast lib (#898) 2019-05-15 16:33:30 -03:00
11-changeserver.spec.js [CHORE] Migrate to Watermelon (#1171) 2019-09-16 17:26:32 -03:00
12-broadcast.spec.js Use FlatList in RoomView (#762) 2019-03-27 17:06:57 -03:00
13-profile.spec.js Switch toast lib (#898) 2019-05-15 16:33:30 -03:00
14-setting.spec.js [NEW] Settings view (#900) 2019-06-11 11:01:40 -03:00
15-joinpublicroom.spec.js [NEW] Settings view (#900) 2019-06-11 11:01:40 -03:00
README.md [CHORE] Make e2e pass on CircleCI (#933) 2019-06-03 16:20:36 -03:00
data.js [CHORE] Make e2e pass on CircleCI (#933) 2019-06-03 16:20:36 -03:00
init.js Update dependencies (#587) 2019-01-29 17:52:56 -02:00
mocha.opts Unnecessary re-renders removed (#570) 2018-12-21 08:55:35 -02:00

README.md

Contents:

  1. Prepare test environment
  2. Prepare test data
  3. Running tests
  4. FAQ

1. Prepare test environment

1.1. Set up local Rocket Chat server
  • Install Rocket Chat meteor app by following this guide.
1.2. Set up detox
  • Install dependencies by following this guide (only Step 1).

2. Prepare test data

  • Run Rocket Chat meteor app: meteor npm start (make sure you to run this command from project that you created on Step 1.1.).
  • Open localhost:3000 in browser.
  • Sign up as admin.
  • Create public room detox-public.
  • Create user with role: user, username: detoxrn, email: YOUR@EMAIL.COM, password: 123.
  • Create user with role: user, username: YOUR.NAME, email: YOUR.SECOND@EMAIL.COM, password: 123.
  • In file e2e/data.js change values existingEmail with YOUR.SECOND@EMAIL.COM, existingName with YOUR.NAME.
  • Login as user detoxrn -> open My Account -> Settings tab -> click Enable 2FA -> copy TTOLP code -> paste TTOLP code into ./e2e/data.js file into field: alternateUserTOTPSecret.

3. Running tests

3.1. iOS

  • Build app with detox: detox build -c ios.sim.release
  • Open Simulator which is used in tests (check in package.json under detox section) from Xcode and make sure that software keyboard is being displayed. To toggle keyboard press cmd+K.
  • Run tests: detox test -c ios.sim.release

3.1. Android

  • Build app with detox: detox build -c android.emu.debug
  • Run: react-native start
  • Run Android emulator with name ANDROID_API_28 via Android studio or cd /Users/USERNAME/Library/Android/sdk/emulator/ && ./emulator -avd ANDROID_API_28 Note: if you need to run tests on different Android emulator then simply change emulator name in ./package.json detox configurations
  • Run tests: detox test -c android.emu.debug

4. FAQ

4.1. Detox build fails

  • Delete node_modules, ios/build, android/build: rm -rf node_modules && rm -rf ios/build && rm -rf android/build
  • Install packages: yarn install
  • Kill metro bundler server by closing terminal or with following command: lsof -ti:8081 | xargs kill
  • Clear metro bundler cache: watchman watch-del-all && rm -rf $TMPDIR/react-native-packager-cache-* && rm -rf $TMPDIR/metro-bundler-cache-*
  • Make sure you have all required environment.
  • Now try building again with detox build (with specific configuration).

4.2. Detox iOS test run fails

  • Check if your meteor app is running by opening localhost:3000 in browser.
  • Make sure software keyboard is displayed in simulator when focusing some input. To enable keyboard press cmd+K.
  • Make sure you have prepared all test data.
  • Sometimes detox e2e tests fail for no reason so all you can do is simply re-run again.