diff --git a/.eslintignore b/.eslintignore index 398578ec4..9594dcce6 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,6 +1,6 @@ __tests__ node_modules coverage -e2e +e2e/docker android ios \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index 31146aefe..409efb70a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -29,7 +29,8 @@ module.exports = { "commonjs": true, "es6": true, "node": true, - "jquery": true + "jquery": true, + "mocha": true }, "rules": { "react/jsx-filename-extension": [1, { @@ -155,5 +156,23 @@ module.exports = { }, "globals": { "__DEV__": true - } + }, + overrides: [ + { + files: ['e2e/**'], + globals: { + by: true, + detox: true, + device: true, + element: true, + expect: true, + waitFor: true + }, + rules: { + 'import/no-extraneous-dependencies': 0, + 'no-await-in-loop': 0, + 'no-restricted-syntax': 0 + } + } + ] }; diff --git a/e2e/data.js b/e2e/data.js index 98257f71d..4dc093cc6 100644 --- a/e2e/data.js +++ b/e2e/data.js @@ -1,75 +1,76 @@ const random = require('./helpers/random'); + const value = random(20); const data = { - server: 'https://mobile.rocket.chat', - adminUser: 'e2e_admin', - adminPassword: 'p7mFh4yLwCRXSnMvG', - alternateServer: 'https://stable.rocket.chat', - users: { - regular: { - username: `userone${ value }`, - password: '123', - email: `mobile+regular${ value }@rocket.chat` - }, - alternate: { - username: `usertwo${ value }`, - password: '123', - email: `mobile+alternate${ value }@rocket.chat`, - totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ' - }, - profileChanges: { - username: `userthree${ value }`, - password: '123', - email: `mobile+profileChanges${ value }@rocket.chat` - }, - existing: { - username: `existinguser${ value }`, - password: '123', - email: `mobile+existing${ value }@rocket.chat` - } - }, - channels: { - detoxpublic: { - name: 'detox-public' - }, - detoxpublicprotected: { - name: 'detox-public-protected', - joinCode: '123' - } - }, - groups: { - private: { - name: `detox-private-${ value }` - }, - alternate: { - name: `detox-alternate-${ value }` - } - }, - teams: { - private: { - name: `detox-team-${ value }` - } - }, - registeringUser: { - username: `newuser${ value }`, - password: `password${ value }`, - email: `mobile+registering${ value }@rocket.chat` - }, - registeringUser2: { - username: `newusertwo${ value }`, - password: `passwordtwo${ value }`, - email: `mobile+registeringtwo${ value }@rocket.chat` - }, - registeringUser3: { - username: `newuserthree${ value }`, - password: `passwordthree${ value }`, - email: `mobile+registeringthree${ value }@rocket.chat` - }, - registeringUser4: { - username: `newuserfour${ value }`, - password: `passwordfour${ value }`, - email: `mobile+registeringfour${ value }@rocket.chat` - }, - random: value -} + server: 'https://mobile.rocket.chat', + adminUser: 'e2e_admin', + adminPassword: 'p7mFh4yLwCRXSnMvG', + alternateServer: 'https://stable.rocket.chat', + users: { + regular: { + username: `userone${ value }`, + password: '123', + email: `mobile+regular${ value }@rocket.chat` + }, + alternate: { + username: `usertwo${ value }`, + password: '123', + email: `mobile+alternate${ value }@rocket.chat`, + totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ' + }, + profileChanges: { + username: `userthree${ value }`, + password: '123', + email: `mobile+profileChanges${ value }@rocket.chat` + }, + existing: { + username: `existinguser${ value }`, + password: '123', + email: `mobile+existing${ value }@rocket.chat` + } + }, + channels: { + detoxpublic: { + name: 'detox-public' + }, + detoxpublicprotected: { + name: 'detox-public-protected', + joinCode: '123' + } + }, + groups: { + private: { + name: `detox-private-${ value }` + }, + alternate: { + name: `detox-alternate-${ value }` + } + }, + teams: { + private: { + name: `detox-team-${ value }` + } + }, + registeringUser: { + username: `newuser${ value }`, + password: `password${ value }`, + email: `mobile+registering${ value }@rocket.chat` + }, + registeringUser2: { + username: `newusertwo${ value }`, + password: `passwordtwo${ value }`, + email: `mobile+registeringtwo${ value }@rocket.chat` + }, + registeringUser3: { + username: `newuserthree${ value }`, + password: `passwordthree${ value }`, + email: `mobile+registeringthree${ value }@rocket.chat` + }, + registeringUser4: { + username: `newuserfour${ value }`, + password: `passwordfour${ value }`, + email: `mobile+registeringfour${ value }@rocket.chat` + }, + random: value +}; module.exports = data; diff --git a/e2e/data/data.cloud.js b/e2e/data/data.cloud.js index c69b72515..df98fdd7a 100644 --- a/e2e/data/data.cloud.js +++ b/e2e/data/data.cloud.js @@ -1,72 +1,74 @@ +// eslint-disable-next-line import/no-unresolved const random = require('./helpers/random'); + const value = random(20); const data = { - server: 'https://mobile.rocket.chat', - adminUser: 'e2e_admin', - adminPassword: 'p7mFh4yLwCRXSnMvG', - alternateServer: 'https://stable.rocket.chat', - users: { - regular: { - username: `userone${ value }`, - password: '123', - email: `mobile+regular${ value }@rocket.chat` - }, - alternate: { - username: `usertwo${ value }`, - password: '123', - email: `mobile+alternate${ value }@rocket.chat`, - totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ' - }, - profileChanges: { - username: `userthree${ value }`, - password: '123', - email: `mobile+profileChanges${ value }@rocket.chat` - }, - existing: { - username: `existinguser${ value }`, - password: '123', - email: `mobile+existing${ value }@rocket.chat` - } - }, - channels: { - detoxpublic: { - name: 'detox-public' - }, - detoxpublicprotected: { - name: 'detox-public-protected', - joinCode: '123' - } - }, - groups: { - private: { - name: `detox-private-${ value }` - } - }, - teams: { - private: { - name: `detox-team-${ value }` - } - }, - registeringUser: { - username: `newuser${ value }`, - password: `password${ value }`, - email: `mobile+registering${ value }@rocket.chat` - }, - registeringUser2: { - username: `newusertwo${ value }`, - password: `passwordtwo${ value }`, - email: `mobile+registeringtwo${ value }@rocket.chat` - }, - registeringUser3: { - username: `newuserthree${ value }`, - password: `passwordthree${ value }`, - email: `mobile+registeringthree${ value }@rocket.chat` - }, - registeringUser4: { - username: `newuserfour${ value }`, - password: `passwordfour${ value }`, - email: `mobile+registeringfour${ value }@rocket.chat` - }, - random: value -} + server: 'https://mobile.rocket.chat', + adminUser: 'e2e_admin', + adminPassword: 'p7mFh4yLwCRXSnMvG', + alternateServer: 'https://stable.rocket.chat', + users: { + regular: { + username: `userone${ value }`, + password: '123', + email: `mobile+regular${ value }@rocket.chat` + }, + alternate: { + username: `usertwo${ value }`, + password: '123', + email: `mobile+alternate${ value }@rocket.chat`, + totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ' + }, + profileChanges: { + username: `userthree${ value }`, + password: '123', + email: `mobile+profileChanges${ value }@rocket.chat` + }, + existing: { + username: `existinguser${ value }`, + password: '123', + email: `mobile+existing${ value }@rocket.chat` + } + }, + channels: { + detoxpublic: { + name: 'detox-public' + }, + detoxpublicprotected: { + name: 'detox-public-protected', + joinCode: '123' + } + }, + groups: { + private: { + name: `detox-private-${ value }` + } + }, + teams: { + private: { + name: `detox-team-${ value }` + } + }, + registeringUser: { + username: `newuser${ value }`, + password: `password${ value }`, + email: `mobile+registering${ value }@rocket.chat` + }, + registeringUser2: { + username: `newusertwo${ value }`, + password: `passwordtwo${ value }`, + email: `mobile+registeringtwo${ value }@rocket.chat` + }, + registeringUser3: { + username: `newuserthree${ value }`, + password: `passwordthree${ value }`, + email: `mobile+registeringthree${ value }@rocket.chat` + }, + registeringUser4: { + username: `newuserfour${ value }`, + password: `passwordfour${ value }`, + email: `mobile+registeringfour${ value }@rocket.chat` + }, + random: value +}; module.exports = data; diff --git a/e2e/data/data.docker.js b/e2e/data/data.docker.js index 31fb5c8e2..6c3ce1925 100644 --- a/e2e/data/data.docker.js +++ b/e2e/data/data.docker.js @@ -1,75 +1,77 @@ +// eslint-disable-next-line import/no-unresolved const random = require('./helpers/random'); + const value = random(20); const data = { - server: 'http://localhost:3000', - adminUser: 'admin', - adminPassword: 'password', - alternateServer: 'https://stable.rocket.chat', - users: { - regular: { - username: `userone${ value }`, - password: '123', - email: `mobile+regular${ value }@rocket.chat` - }, - alternate: { - username: `usertwo${ value }`, - password: '123', - email: `mobile+alternate${ value }@rocket.chat`, - totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ' - }, - profileChanges: { - username: `userthree${ value }`, - password: '123', - email: `mobile+profileChanges${ value }@rocket.chat` - }, - existing: { - username: `existinguser${ value }`, - password: '123', - email: `mobile+existing${ value }@rocket.chat` - } - }, - channels: { - detoxpublic: { - name: 'detox-public' - }, - detoxpublicprotected: { - name: 'detox-public-protected', - joinCode: '123' - } - }, - groups: { - private: { - name: `detox-private-${ value }` - }, - alternate: { - name: `detox-alternate-${ value }` - } - }, - teams: { - private: { - name: `detox-team-${ value }` - } - }, - registeringUser: { - username: `newuser${ value }`, - password: `password${ value }`, - email: `mobile+registering${ value }@rocket.chat` - }, - registeringUser2: { - username: `newusertwo${ value }`, - password: `passwordtwo${ value }`, - email: `mobile+registeringtwo${ value }@rocket.chat` - }, - registeringUser3: { - username: `newuserthree${ value }`, - password: `passwordthree${ value }`, - email: `mobile+registeringthree${ value }@rocket.chat` - }, - registeringUser4: { - username: `newuserfour${ value }`, - password: `passwordfour${ value }`, - email: `mobile+registeringfour${ value }@rocket.chat` - }, - random: value -} + server: 'http://localhost:3000', + adminUser: 'admin', + adminPassword: 'password', + alternateServer: 'https://stable.rocket.chat', + users: { + regular: { + username: `userone${ value }`, + password: '123', + email: `mobile+regular${ value }@rocket.chat` + }, + alternate: { + username: `usertwo${ value }`, + password: '123', + email: `mobile+alternate${ value }@rocket.chat`, + totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ' + }, + profileChanges: { + username: `userthree${ value }`, + password: '123', + email: `mobile+profileChanges${ value }@rocket.chat` + }, + existing: { + username: `existinguser${ value }`, + password: '123', + email: `mobile+existing${ value }@rocket.chat` + } + }, + channels: { + detoxpublic: { + name: 'detox-public' + }, + detoxpublicprotected: { + name: 'detox-public-protected', + joinCode: '123' + } + }, + groups: { + private: { + name: `detox-private-${ value }` + }, + alternate: { + name: `detox-alternate-${ value }` + } + }, + teams: { + private: { + name: `detox-team-${ value }` + } + }, + registeringUser: { + username: `newuser${ value }`, + password: `password${ value }`, + email: `mobile+registering${ value }@rocket.chat` + }, + registeringUser2: { + username: `newusertwo${ value }`, + password: `passwordtwo${ value }`, + email: `mobile+registeringtwo${ value }@rocket.chat` + }, + registeringUser3: { + username: `newuserthree${ value }`, + password: `passwordthree${ value }`, + email: `mobile+registeringthree${ value }@rocket.chat` + }, + registeringUser4: { + username: `newuserfour${ value }`, + password: `passwordfour${ value }`, + email: `mobile+registeringfour${ value }@rocket.chat` + }, + random: value +}; module.exports = data; diff --git a/e2e/helpers/app.js b/e2e/helpers/app.js index 7c71c9f3e..45a67df56 100644 --- a/e2e/helpers/app.js +++ b/e2e/helpers/app.js @@ -1,122 +1,119 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../data'); async function navigateToWorkspace(server = data.server) { - await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(10000); + await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(10000); await element(by.id('join-workspace')).tap(); await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(60000); - await element(by.id('new-server-view-input')).typeText(`${server}\n`); + await element(by.id('new-server-view-input')).typeText(`${ server }\n`); await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(60000); await expect(element(by.id('workspace-view'))).toBeVisible(); } async function navigateToLogin(server) { - await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000); - await navigateToWorkspace(server); + await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000); + await navigateToWorkspace(server); await element(by.id('workspace-view-login')).tap(); - await waitFor(element(by.id('login-view'))).toBeVisible().withTimeout(2000); - await expect(element(by.id('login-view'))).toBeVisible(); + await waitFor(element(by.id('login-view'))).toBeVisible().withTimeout(2000); + await expect(element(by.id('login-view'))).toBeVisible(); } async function navigateToRegister(server) { - await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000); - await navigateToWorkspace(server); + await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000); + await navigateToWorkspace(server); await element(by.id('workspace-view-register')).tap(); - await waitFor(element(by.id('register-view'))).toBeVisible().withTimeout(2000); + await waitFor(element(by.id('register-view'))).toBeVisible().withTimeout(2000); } async function login(username, password) { - await waitFor(element(by.id('login-view'))).toBeVisible().withTimeout(2000); - await element(by.id('login-view-email')).replaceText(username); - await element(by.id('login-view-password')).replaceText(password); - await element(by.id('login-view-submit')).tap(); - await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(30000); + await waitFor(element(by.id('login-view'))).toBeVisible().withTimeout(2000); + await element(by.id('login-view-email')).replaceText(username); + await element(by.id('login-view-password')).replaceText(password); + await element(by.id('login-view-submit')).tap(); + await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(30000); } async function logout() { - await element(by.id('rooms-list-view-sidebar')).tap(); - await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000); + await element(by.id('rooms-list-view-sidebar')).tap(); + await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000); await waitFor(element(by.id('sidebar-settings'))).toBeVisible().withTimeout(2000); - await element(by.id('sidebar-settings')).tap(); - await waitFor(element(by.id('settings-view'))).toBeVisible().withTimeout(2000); - await element(by.type('UIScrollView')).atIndex(1).scrollTo('bottom'); - await element(by.id('settings-logout')).tap(); - const logoutAlertMessage = 'You will be logged out of this application.'; - await waitFor(element(by.text(logoutAlertMessage)).atIndex(0)).toExist().withTimeout(10000); - await expect(element(by.text(logoutAlertMessage)).atIndex(0)).toExist(); - await element(by.text('Logout')).tap(); - await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(10000); - await expect(element(by.id('onboarding-view'))).toBeVisible(); + await element(by.id('sidebar-settings')).tap(); + await waitFor(element(by.id('settings-view'))).toBeVisible().withTimeout(2000); + await element(by.type('UIScrollView')).atIndex(1).scrollTo('bottom'); + await element(by.id('settings-logout')).tap(); + const logoutAlertMessage = 'You will be logged out of this application.'; + await waitFor(element(by.text(logoutAlertMessage)).atIndex(0)).toExist().withTimeout(10000); + await expect(element(by.text(logoutAlertMessage)).atIndex(0)).toExist(); + await element(by.text('Logout')).tap(); + await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(10000); + await expect(element(by.id('onboarding-view'))).toBeVisible(); } async function mockMessage(message, isThread = false) { - let input = isThread ? 'messagebox-input-thread' : 'messagebox-input'; + const input = isThread ? 'messagebox-input-thread' : 'messagebox-input'; await element(by.id(input)).tap(); await element(by.id(input)).typeText(`${ data.random }${ message }`); await element(by.id('messagebox-send-message')).tap(); await waitFor(element(by.label(`${ data.random }${ message }`))).toExist().withTimeout(60000); - await expect(element(by.label(`${ data.random }${ message }`))).toExist(); - await element(by.label(`${ data.random }${ message }`)).atIndex(0).tap(); -}; - -async function starMessage(message){ - const messageLabel = `${ data.random }${ message }` - await element(by.label(messageLabel)).atIndex(0).longPress(); - await expect(element(by.id('action-sheet'))).toExist(); - await expect(element(by.id('action-sheet-handle'))).toBeVisible(); - await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5); - await element(by.label('Star')).atIndex(0).tap(); - await waitFor(element(by.id('action-sheet'))).not.toExist().withTimeout(5000); -}; - -async function pinMessage(message){ - const messageLabel = `${ data.random }${ message }` - await waitFor(element(by.label(messageLabel)).atIndex(0)).toExist(); - await element(by.label(messageLabel)).atIndex(0).longPress(); - await expect(element(by.id('action-sheet'))).toExist(); - await expect(element(by.id('action-sheet-handle'))).toBeVisible(); - await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5); - await element(by.label('Pin')).atIndex(0).tap(); - await waitFor(element(by.id('action-sheet'))).not.toExist().withTimeout(5000); + await expect(element(by.label(`${ data.random }${ message }`))).toExist(); + await element(by.label(`${ data.random }${ message }`)).atIndex(0).tap(); } -async function dismissReviewNag(){ - await waitFor(element(by.text('Are you enjoying this app?'))).toExist().withTimeout(60000); - await element(by.label('No').and(by.type('_UIAlertControllerActionView'))).tap(); // Tap `no` on ask for review alert +async function starMessage(message) { + const messageLabel = `${ data.random }${ message }`; + await element(by.label(messageLabel)).atIndex(0).longPress(); + await expect(element(by.id('action-sheet'))).toExist(); + await expect(element(by.id('action-sheet-handle'))).toBeVisible(); + await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5); + await element(by.label('Star')).atIndex(0).tap(); + await waitFor(element(by.id('action-sheet'))).not.toExist().withTimeout(5000); +} + +async function pinMessage(message) { + const messageLabel = `${ data.random }${ message }`; + await waitFor(element(by.label(messageLabel)).atIndex(0)).toExist(); + await element(by.label(messageLabel)).atIndex(0).longPress(); + await expect(element(by.id('action-sheet'))).toExist(); + await expect(element(by.id('action-sheet-handle'))).toBeVisible(); + await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5); + await element(by.label('Pin')).atIndex(0).tap(); + await waitFor(element(by.id('action-sheet'))).not.toExist().withTimeout(5000); +} + +async function dismissReviewNag() { + await waitFor(element(by.text('Are you enjoying this app?'))).toExist().withTimeout(60000); + await element(by.label('No').and(by.type('_UIAlertControllerActionView'))).tap(); // Tap `no` on ask for review alert } async function tapBack() { - await element(by.id('header-back')).atIndex(0).tap(); + await element(by.id('header-back')).atIndex(0).tap(); } -async function sleep(ms) { - return new Promise(res => setTimeout(res, ms)); +function sleep(ms) { + return new Promise(res => setTimeout(res, ms)); } async function searchRoom(room) { - await element(by.id('rooms-list-view-search')).tap(); + await element(by.id('rooms-list-view-search')).tap(); await expect(element(by.id('rooms-list-view-search-input'))).toExist(); await waitFor(element(by.id('rooms-list-view-search-input'))).toExist().withTimeout(5000); - await element(by.id('rooms-list-view-search-input')).typeText(room); - await sleep(300); + await element(by.id('rooms-list-view-search-input')).typeText(room); + await sleep(300); await waitFor(element(by.id(`rooms-list-view-item-${ room }`))).toBeVisible().withTimeout(60000); } -async function tryTapping(theElement, timeout, longtap = false){ +async function tryTapping(theElement, timeout, longtap = false) { try { - if(longtap){ - await theElement.longPress() - } else { - await theElement.tap() - } - } catch(e) { - if(timeout <= 0){ //TODO: Maths. How closely has the timeout been honoured here? - throw e + if (longtap) { + await theElement.longPress(); + } else { + await theElement.tap(); } - await sleep(100) - await tryTapping(theElement, timeout - 100) + } catch (e) { + if (timeout <= 0) { // TODO: Maths. How closely has the timeout been honoured here? + throw e; + } + await sleep(100); + await tryTapping(theElement, timeout - 100); } } @@ -126,21 +123,21 @@ const checkServer = async(server) => { await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000); await waitFor(element(by.label(label))).toBeVisible().withTimeout(10000); await element(by.id('sidebar-close-drawer')).tap(); -} +}; module.exports = { - navigateToWorkspace, - navigateToLogin, - navigateToRegister, - login, - logout, - mockMessage, - starMessage, - pinMessage, - dismissReviewNag, - tapBack, - sleep, - searchRoom, - tryTapping, - checkServer -}; \ No newline at end of file + navigateToWorkspace, + navigateToLogin, + navigateToRegister, + login, + logout, + mockMessage, + starMessage, + pinMessage, + dismissReviewNag, + tapBack, + sleep, + searchRoom, + tryTapping, + checkServer +}; diff --git a/e2e/helpers/data_setup.js b/e2e/helpers/data_setup.js index 7e744f54a..fd02a20c5 100644 --- a/e2e/helpers/data_setup.js +++ b/e2e/helpers/data_setup.js @@ -6,176 +6,174 @@ const TEAM_TYPE = { PRIVATE: 1 }; -let server = data.server +const { server } = data; const rocketchat = axios.create({ - baseURL: `${server}/api/v1/`, - headers: { - 'Content-Type': 'application/json;charset=UTF-8', - } -}) + baseURL: `${ server }/api/v1/`, + headers: { + 'Content-Type': 'application/json;charset=UTF-8' + } +}); -const login = async (username, password) => { - console.log(`Logging in as user ${username}`) - const response = await rocketchat.post('login', { - "user": username, - "password": password - }) - const userId = response.data.data.userId - const authToken = response.data.data.authToken - rocketchat.defaults.headers.common['X-User-Id'] = userId - rocketchat.defaults.headers.common['X-Auth-Token'] = authToken - return { authToken, userId }; -} +const login = async(username, password) => { + console.log(`Logging in as user ${ username }`); + const response = await rocketchat.post('login', { + user: username, + password + }); + const { userId } = response.data.data; + const { authToken } = response.data.data; + rocketchat.defaults.headers.common['X-User-Id'] = userId; + rocketchat.defaults.headers.common['X-Auth-Token'] = authToken; + return { authToken, userId }; +}; -const createUser = async (username, password, name, email) => { - console.log(`Creating user ${username}`) - try { - await rocketchat.post('users.create', { - "username": username, - "password": password, - "name": name, - "email": email - }) - } catch (error) { - console.log(JSON.stringify(error)) - throw "Failed to create user" - } -} +const createUser = async(username, password, name, email) => { + console.log(`Creating user ${ username }`); + try { + await rocketchat.post('users.create', { + username, + password, + name, + email + }); + } catch (error) { + console.log(JSON.stringify(error)); + throw new Error('Failed to create user'); + } +}; -const createChannelIfNotExists = async (channelname) => { - console.log(`Creating public channel ${channelname}`) - try { - const room = await rocketchat.post('channels.create', { - "name": channelname - }) - return room - } catch (createError) { - try { //Maybe it exists already? - const room = rocketchat.get(`channels.info?roomName=${channelname}`) - return room - } catch (infoError) { - console.log(JSON.stringify(createError)) - console.log(JSON.stringify(infoError)) - throw "Failed to find or create public channel" - } - } -} +const createChannelIfNotExists = async(channelname) => { + console.log(`Creating public channel ${ channelname }`); + try { + const room = await rocketchat.post('channels.create', { + name: channelname + }); + return room; + } catch (createError) { + try { // Maybe it exists already? + const room = rocketchat.get(`channels.info?roomName=${ channelname }`); + return room; + } catch (infoError) { + console.log(JSON.stringify(createError)); + console.log(JSON.stringify(infoError)); + throw new Error('Failed to find or create public channel'); + } + } +}; -const createTeamIfNotExists = async (teamname) => { - console.log(`Creating private team ${teamname}`) - try { - await rocketchat.post('teams.create', { - "name": teamname, - "type": TEAM_TYPE.PRIVATE - }) - } catch (createError) { - try { //Maybe it exists already? - await rocketchat.get(`teams.info?teamName=${teamname}`) - } catch (infoError) { - console.log(JSON.stringify(createError)) - console.log(JSON.stringify(infoError)) - throw "Failed to find or create private team" - } - } -} +const createTeamIfNotExists = async(teamname) => { + console.log(`Creating private team ${ teamname }`); + try { + await rocketchat.post('teams.create', { + name: teamname, + type: TEAM_TYPE.PRIVATE + }); + } catch (createError) { + try { // Maybe it exists already? + await rocketchat.get(`teams.info?teamName=${ teamname }`); + } catch (infoError) { + console.log(JSON.stringify(createError)); + console.log(JSON.stringify(infoError)); + throw new Error('Failed to find or create private team'); + } + } +}; -const createGroupIfNotExists = async (groupname) => { - console.log(`Creating private group ${groupname}`) - try { - await rocketchat.post('groups.create', { - "name": groupname - }) - } catch (createError) { - try { //Maybe it exists already? - await rocketchat.get(`groups.info?roomName=${groupname}`) - } catch (infoError) { - console.log(JSON.stringify(createError)) - console.log(JSON.stringify(infoError)) - throw "Failed to find or create private group" - } - } -} +const createGroupIfNotExists = async(groupname) => { + console.log(`Creating private group ${ groupname }`); + try { + await rocketchat.post('groups.create', { + name: groupname + }); + } catch (createError) { + try { // Maybe it exists already? + await rocketchat.get(`groups.info?roomName=${ groupname }`); + } catch (infoError) { + console.log(JSON.stringify(createError)); + console.log(JSON.stringify(infoError)); + throw new Error('Failed to find or create private group'); + } + } +}; -const changeChannelJoinCode = async (roomId, joinCode) => { - console.log(`Changing channel Join Code ${roomId}`) - try { - await rocketchat.post('method.call/saveRoomSettings', { - message: JSON.stringify({ - method: 'saveRoomSettings', - params: [ - roomId, - { joinCode } - ] - }) - }) - } catch (createError) { - console.log(JSON.stringify(createError)) - throw "Failed to create protected channel" - } -} +const changeChannelJoinCode = async(roomId, joinCode) => { + console.log(`Changing channel Join Code ${ roomId }`); + try { + await rocketchat.post('method.call/saveRoomSettings', { + message: JSON.stringify({ + method: 'saveRoomSettings', + params: [ + roomId, + { joinCode } + ] + }) + }); + } catch (createError) { + console.log(JSON.stringify(createError)); + throw new Error('Failed to create protected channel'); + } +}; -const sendMessage = async (user, channel, msg) => { - console.log(`Sending message to ${channel}`) - try { - await login(user.username, user.password); - await rocketchat.post('chat.postMessage', { channel, msg }); - } catch (infoError) { - console.log(JSON.stringify(infoError)) - throw "Failed to find or create private group" - } -} +const sendMessage = async(user, channel, msg) => { + console.log(`Sending message to ${ channel }`); + try { + await login(user.username, user.password); + await rocketchat.post('chat.postMessage', { channel, msg }); + } catch (infoError) { + console.log(JSON.stringify(infoError)); + throw new Error('Failed to find or create private group'); + } +}; -const setup = async () => { - await login(data.adminUser, data.adminPassword) - - for (var userKey in data.users) { - if (data.users.hasOwnProperty(userKey)) { - const user = data.users[userKey] - await createUser(user.username, user.password, user.username, user.email) - } - } +const setup = async() => { + await login(data.adminUser, data.adminPassword); - for (var channelKey in data.channels) { - if (data.channels.hasOwnProperty(channelKey)) { - const channel = data.channels[channelKey] - const { data: { channel: { _id } } } = await createChannelIfNotExists(channel.name) + for (const userKey in data.users) { + if (Object.prototype.hasOwnProperty.call(data.users, userKey)) { + const user = data.users[userKey]; + await createUser(user.username, user.password, user.username, user.email); + } + } - if (channel.joinCode) { - await changeChannelJoinCode(_id, channel.joinCode); - } - } - } + for (const channelKey in data.channels) { + if (Object.prototype.hasOwnProperty.call(data.channels, channelKey)) { + const channel = data.channels[channelKey]; + const { data: { channel: { _id } } } = await createChannelIfNotExists(channel.name); - await login(data.users.regular.username, data.users.regular.password) + if (channel.joinCode) { + await changeChannelJoinCode(_id, channel.joinCode); + } + } + } - for (var groupKey in data.groups) { - if (data.groups.hasOwnProperty(groupKey)) { - const group = data.groups[groupKey] - await createGroupIfNotExists(group.name) - } - } + await login(data.users.regular.username, data.users.regular.password); - for (var teamKey in data.teams) { - if (data.teams.hasOwnProperty(teamKey)) { - const team = data.teams[teamKey] - await createTeamIfNotExists(team.name) - } - } + for (const groupKey in data.groups) { + if (Object.prototype.hasOwnProperty.call(data.groups, groupKey)) { + const group = data.groups[groupKey]; + await createGroupIfNotExists(group.name); + } + } - return -} + for (const teamKey in data.teams) { + if (Object.prototype.hasOwnProperty.call(data.teams, teamKey)) { + const team = data.teams[teamKey]; + await createTeamIfNotExists(team.name); + } + } +}; const get = (endpoint) => { - console.log(`GET /${ endpoint }`) - return rocketchat.get(endpoint); -} + console.log(`GET /${ endpoint }`); + return rocketchat.get(endpoint); +}; const post = (endpoint, body) => { - console.log(`POST /${ endpoint } ${ JSON.stringify(body) }`) - return rocketchat.post(endpoint, body); -} + console.log(`POST /${ endpoint } ${ JSON.stringify(body) }`); + return rocketchat.post(endpoint, body); +}; module.exports = { - setup, sendMessage, get, post, login -} \ No newline at end of file + setup, sendMessage, get, post, login +}; diff --git a/e2e/helpers/random.js b/e2e/helpers/random.js index d26e832e3..d41575c07 100644 --- a/e2e/helpers/random.js +++ b/e2e/helpers/random.js @@ -6,4 +6,4 @@ function random(length) { } return text; } -module.exports = random; \ No newline at end of file +module.exports = random; diff --git a/e2e/tests/assorted/01-e2eencryption.spec.js b/e2e/tests/assorted/01-e2eencryption.spec.js index 423d96152..de5ccb225 100644 --- a/e2e/tests/assorted/01-e2eencryption.spec.js +++ b/e2e/tests/assorted/01-e2eencryption.spec.js @@ -1,12 +1,11 @@ const { - expect, element, by, waitFor -} = require('detox'); -const { navigateToLogin, login, sleep, tapBack, mockMessage, searchRoom, logout } = require('../../helpers/app'); + navigateToLogin, login, sleep, tapBack, mockMessage, searchRoom, logout +} = require('../../helpers/app'); const data = require('../../data'); -const testuser = data.users.regular -const otheruser = data.users.alternate +const testuser = data.users.regular; +const otheruser = data.users.alternate; const checkServer = async(server) => { const label = `Connected to ${ server }`; @@ -14,11 +13,11 @@ const checkServer = async(server) => { await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000); await waitFor(element(by.label(label))).toBeVisible().withTimeout(60000); await element(by.id('sidebar-close-drawer')).tap(); -} +}; const checkBanner = async() => { await waitFor(element(by.id('listheader-encryption').withDescendant(by.label('Save Your Encryption Password')))).toBeVisible().withTimeout(10000); -} +}; async function navigateToRoom(roomName) { await searchRoom(`${ roomName }`); @@ -45,36 +44,36 @@ describe('E2E Encryption', () => { const room = `encrypted${ data.random }`; const newPassword = 'abc'; - before(async () => { + before(async() => { await device.launchApp({ permissions: { notifications: 'YES' }, delete: true }); await navigateToLogin(); await login(testuser.username, testuser.password); }); - describe('Banner', async() => { - describe('Render', async () => { - it('should have encryption badge', async () => { + describe('Banner', () => { + describe('Render', () => { + it('should have encryption badge', async() => { await checkBanner(); }); }); - - describe('Usage', async () => { + + describe('Usage', () => { it('should tap encryption badge and open save password modal', async() => { await element(by.id('listheader-encryption')).tap(); await waitFor(element(by.id('e2e-save-password-view'))).toBeVisible().withTimeout(2000); }); - + it('should tap "How it works" and navigate', async() => { await element(by.id('e2e-save-password-view-how-it-works').and(by.label('How It Works'))).tap(); await waitFor(element(by.id('e2e-how-it-works-view'))).toBeVisible().withTimeout(2000); await tapBack(); }); - + it('should tap "Save my password" and close modal', async() => { await element(by.id('e2e-save-password-view-saved-password').and(by.label('I Saved My E2E Password'))).tap(); await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(2000); }); - + it('should create encrypted room', async() => { await element(by.id('rooms-list-view-create-channel')).tap(); await waitFor(element(by.id('new-message-view'))).toBeVisible().withTimeout(2000); @@ -92,15 +91,15 @@ describe('E2E Encryption', () => { await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(60000); await waitFor(element(by.id(`room-view-title-${ room }`))).toBeVisible().withTimeout(60000); }); - + it('should send message and be able to read it', async() => { await mockMessage('message'); await tapBack(); }); }); - }) + }); - describe('Security and Privacy', async() => { + describe('Security and Privacy', () => { it('should navigate to security privacy', async() => { await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(2000); await element(by.id('rooms-list-view-sidebar')).tap(); @@ -120,7 +119,7 @@ describe('E2E Encryption', () => { }); }); - describe('E2E Encryption Security', async() => { + describe('E2E Encryption Security', () => { it('should navigate to e2e encryption security', async() => { await element(by.id('security-privacy-view-e2e-encryption')).tap(); await waitFor(element(by.id('e2e-encryption-security-view'))).toBeVisible().withTimeout(2000); @@ -133,9 +132,9 @@ describe('E2E Encryption', () => { await expect(element(by.id('e2e-encryption-security-view-change-password').and(by.label('Save Changes')))).toExist(); await expect(element(by.id('e2e-encryption-security-view-reset-key').and(by.label('Reset E2E Key')))).toExist(); }); - }) + }); - describe('Change password', async() => { + describe('Change password', () => { it('should change password', async() => { await element(by.id('e2e-encryption-security-view-password')).typeText(newPassword); await element(by.id('e2e-encryption-security-view-change-password')).tap(); @@ -184,7 +183,7 @@ describe('E2E Encryption', () => { }); }); - describe('Reset E2E key', async() => { + describe('Reset E2E key', () => { it('should reset e2e key', async() => { await tapBack(); await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(2000); @@ -195,7 +194,7 @@ describe('E2E Encryption', () => { await waitFor(element(by.text('Are you sure?'))).toExist().withTimeout(2000); await expect(element(by.text('You\'re going to be logged out.'))).toExist(); await element(by.label('Yes, reset it').and(by.type('UILabel'))).tap(); - await sleep(2000) + await sleep(2000); await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(10000); await waitFor(element(by.text('You\'ve been logged out by the server. Please log in again.'))).toExist().withTimeout(2000); await element(by.label('OK').and(by.type('_UIAlertControllerActionView'))).tap(); @@ -203,7 +202,7 @@ describe('E2E Encryption', () => { await waitFor(element(by.id('login-view'))).toBeVisible().withTimeout(2000); await login(testuser.username, testuser.password); await waitFor(element(by.id('listheader-encryption').withDescendant(by.label('Save Your Encryption Password')))).toBeVisible().withTimeout(2000); - }) + }); }); }); @@ -211,21 +210,21 @@ describe('E2E Encryption', () => { it('check save banner', async() => { await checkServer(data.server); await checkBanner(); - }) - + }); + it('should add server and create new user', async() => { await sleep(5000); await element(by.id('rooms-list-header-server-dropdown-button')).tap(); await waitFor(element(by.id('rooms-list-header-server-dropdown'))).toBeVisible().withTimeout(5000); await element(by.id('rooms-list-header-server-add')).tap(); - + // TODO: refactor await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(60000); - await element(by.id('new-server-view-input')).typeText(`${data.alternateServer}\n`); + await element(by.id('new-server-view-input')).typeText(`${ data.alternateServer }\n`); await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(60000); await element(by.id('workspace-view-register')).tap(); await waitFor(element(by.id('register-view'))).toBeVisible().withTimeout(2000); - + // Register new user await element(by.id('register-view-name')).replaceText(data.registeringUser.username); await element(by.id('register-view-username')).replaceText(data.registeringUser.username); @@ -233,10 +232,10 @@ describe('E2E Encryption', () => { await element(by.id('register-view-password')).typeText(data.registeringUser.password); await element(by.id('register-view-submit')).tap(); await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(60000); - + await checkServer(data.alternateServer); }); - + it('should change back', async() => { await element(by.id('rooms-list-header-server-dropdown-button')).tap(); await waitFor(element(by.id('rooms-list-header-server-dropdown'))).toBeVisible().withTimeout(5000); @@ -255,4 +254,4 @@ describe('E2E Encryption', () => { await checkBanner(); }); }); -}); \ No newline at end of file +}); diff --git a/e2e/tests/assorted/02-broadcast.spec.js b/e2e/tests/assorted/02-broadcast.spec.js index 059643c02..12350ee86 100644 --- a/e2e/tests/assorted/02-broadcast.spec.js +++ b/e2e/tests/assorted/02-broadcast.spec.js @@ -1,13 +1,13 @@ +// const OTP = require('otp.js'); +// const GA = OTP.googleAuthenticator; + const { - device, expect, element, by, waitFor -} = require('detox'); -const OTP = require('otp.js'); -const GA = OTP.googleAuthenticator; -const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom } = require('../../helpers/app'); + navigateToLogin, login, mockMessage, tapBack, searchRoom +} = require('../../helpers/app'); const data = require('../../data'); -const testuser = data.users.regular -const otheruser = data.users.alternate +const testuser = data.users.regular; +const otheruser = data.users.alternate; describe('Broadcast room', () => { before(async() => { @@ -28,7 +28,7 @@ describe('Broadcast room', () => { await element(by.id('selected-users-view-submit')).tap(); await waitFor(element(by.id('create-channel-view'))).toExist().withTimeout(5000); await element(by.id('create-channel-name')).replaceText(`broadcast${ data.random }`); - await element(by.id('create-channel-broadcast')).longPress(); //https://github.com/facebook/react-native/issues/28032 + await element(by.id('create-channel-broadcast')).longPress(); // https://github.com/facebook/react-native/issues/28032 await element(by.id('create-channel-submit')).tap(); await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(60000); await waitFor(element(by.id(`room-view-title-broadcast${ data.random }`))).toBeVisible().withTimeout(60000); @@ -54,11 +54,11 @@ describe('Broadcast room', () => { await navigateToLogin(); await login(otheruser.username, otheruser.password); - //await waitFor(element(by.id('two-factor'))).toBeVisible().withTimeout(5000); - //await expect(element(by.id('two-factor'))).toBeVisible(); - //const code = GA.gen(data.alternateUserTOTPSecret); - //await element(by.id('two-factor-input')).replaceText(code); - //await element(by.id('two-factor-send')).tap(); + // await waitFor(element(by.id('two-factor'))).toBeVisible().withTimeout(5000); + // await expect(element(by.id('two-factor'))).toBeVisible(); + // const code = GA.gen(data.alternateUserTOTPSecret); + // await element(by.id('two-factor-input')).replaceText(code); + // await element(by.id('two-factor-send')).tap(); await searchRoom(`broadcast${ data.random }`); await element(by.id(`rooms-list-view-item-broadcast${ data.random }`)).tap(); diff --git a/e2e/tests/assorted/03-profile.spec.js b/e2e/tests/assorted/03-profile.spec.js index 86fc001db..b17485a3f 100644 --- a/e2e/tests/assorted/03-profile.spec.js +++ b/e2e/tests/assorted/03-profile.spec.js @@ -1,10 +1,7 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const { navigateToLogin, login, sleep } = require('../../helpers/app'); const data = require('../../data'); -const profileChangeUser = data.users.profileChanges +const profileChangeUser = data.users.profileChanges; const scrollDown = 200; @@ -28,7 +25,7 @@ describe('Profile screen', () => { await waitFor(element(by.id('profile-view'))).toBeVisible().withTimeout(2000); }); - describe('Render', async() => { + describe('Render', () => { it('should have profile view', async() => { await expect(element(by.id('profile-view'))).toBeVisible(); }); @@ -56,7 +53,7 @@ describe('Profile screen', () => { it('should have avatar url', async() => { await expect(element(by.id('profile-view-avatar-url'))).toExist(); }); - + it('should have reset avatar button', async() => { await waitFor(element(by.id('profile-view-reset-avatar'))).toExist().whileElement(by.id('profile-view-list')).scroll(scrollDown, 'down'); }); @@ -74,7 +71,7 @@ describe('Profile screen', () => { }); }); - describe('Usage', async() => { + describe('Usage', () => { it('should change name and username', async() => { await element(by.id('profile-view-name')).replaceText(`${ profileChangeUser.username }new`); await element(by.id('profile-view-username')).typeText(`${ profileChangeUser.username }new`); @@ -87,7 +84,7 @@ describe('Profile screen', () => { await element(by.id('profile-view-email')).replaceText(`mobile+profileChangesNew${ data.random }@rocket.chat`); await element(by.id('profile-view-new-password')).replaceText(`${ profileChangeUser.password }new`); await element(by.id('profile-view-submit')).tap(); - await element(by.type('_UIAlertControllerTextField')).typeText(`${ profileChangeUser.password }\n`) + await element(by.type('_UIAlertControllerTextField')).typeText(`${ profileChangeUser.password }\n`); await waitForToast(); }); diff --git a/e2e/tests/assorted/04-setting.spec.js b/e2e/tests/assorted/04-setting.spec.js index 14bdbe71f..edfb3fd40 100644 --- a/e2e/tests/assorted/04-setting.spec.js +++ b/e2e/tests/assorted/04-setting.spec.js @@ -1,11 +1,8 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); -const { navigateToLogin, login, tapBack } = require('../../helpers/app'); +const { navigateToLogin, login } = require('../../helpers/app'); const data = require('../../data'); -const testuser = data.users.regular +const testuser = data.users.regular; describe('Settings screen', () => { before(async() => { @@ -20,7 +17,7 @@ describe('Settings screen', () => { await waitFor(element(by.id('settings-view'))).toBeVisible().withTimeout(2000); }); - describe('Render', async() => { + describe('Render', () => { it('should have settings view', async() => { await expect(element(by.id('settings-view'))).toBeVisible(); }); @@ -62,14 +59,14 @@ describe('Settings screen', () => { }); }); - describe('Usage', async() => { + describe('Usage', () => { it('should tap clear cache and navigate to roomslistview', async() => { await waitFor(element(by.id('settings-view'))).toBeVisible().withTimeout(2000); await element(by.id('settings-view-clear-cache')).tap(); await waitFor(element(by.text('This will clear all your offline data.'))).toExist().withTimeout(2000); - await element(by.label('Clear').and(by.type('_UIAlertControllerActionView'))).tap(); + await element(by.label('Clear').and(by.type('_UIAlertControllerActionView'))).tap(); await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(5000); await waitFor(element(by.id(`rooms-list-view-item-${ data.groups.private.name }`))).toExist().withTimeout(10000); - }) + }); }); }); diff --git a/e2e/tests/assorted/05-joinpublicroom.spec.js b/e2e/tests/assorted/05-joinpublicroom.spec.js index 15acbda9c..afeff4f76 100644 --- a/e2e/tests/assorted/05-joinpublicroom.spec.js +++ b/e2e/tests/assorted/05-joinpublicroom.spec.js @@ -1,10 +1,9 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); -const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom } = require('../../helpers/app'); +const { + navigateToLogin, login, mockMessage, tapBack, searchRoom +} = require('../../helpers/app'); -const testuser = data.users.regular +const testuser = data.users.regular; const room = data.channels.detoxpublic.name; async function navigateToRoom() { @@ -26,7 +25,7 @@ describe('Join public room', () => { await navigateToRoom(); }); - describe('Render', async() => { + describe('Render', () => { it('should have room screen', async() => { await expect(element(by.id('room-view'))).toBeVisible(); }); @@ -36,14 +35,14 @@ describe('Join public room', () => { // }); // Render - Header - describe('Header', async() => { + describe('Header', () => { it('should have actions button ', async() => { await expect(element(by.id('room-header'))).toBeVisible(); }); }); // Render - Join - describe('Join', async() => { + describe('Join', () => { it('should have join', async() => { await expect(element(by.id('room-view-join'))).toBeVisible(); }); @@ -61,7 +60,7 @@ describe('Join public room', () => { }); }); - describe('Room Actions', async() => { + describe('Room Actions', () => { before(async() => { await navigateToRoomActions(); }); @@ -117,11 +116,11 @@ describe('Join public room', () => { after(async() => { await tapBack(); await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(2000); - }) + }); }); }); - describe('Usage', async() => { + describe('Usage', () => { it('should join room', async() => { await element(by.id('room-view-join-button')).tap(); await tapBack(); diff --git a/e2e/tests/assorted/06-status.spec.js b/e2e/tests/assorted/06-status.spec.js index 52c6f9b98..7eeb246b1 100644 --- a/e2e/tests/assorted/06-status.spec.js +++ b/e2e/tests/assorted/06-status.spec.js @@ -1,17 +1,15 @@ -const { - expect, element, by, waitFor -} = require('detox'); const { navigateToLogin, login, sleep } = require('../../helpers/app'); const data = require('../../data'); -const testuser = data.users.regular + +const testuser = data.users.regular; async function waitForToast() { await sleep(300); } describe('Status screen', () => { - before(async () => { + before(async() => { await device.launchApp({ permissions: { notifications: 'YES' }, delete: true }); await navigateToLogin(); await login(testuser.username, testuser.password); @@ -24,8 +22,8 @@ describe('Status screen', () => { await waitFor(element(by.id('status-view'))).toBeVisible().withTimeout(2000); }); - describe('Render', async () => { - it('should have status input', async () => { + describe('Render', () => { + it('should have status input', async() => { await expect(element(by.id('status-view-input'))).toBeVisible(); await expect(element(by.id('status-view-online'))).toExist(); await expect(element(by.id('status-view-busy'))).toExist(); @@ -34,17 +32,17 @@ describe('Status screen', () => { }); }); - describe('Usage', async () => { - it('should change status', async () => { + describe('Usage', () => { + it('should change status', async() => { await element(by.id('status-view-busy')).tap(); await waitFor(element(by.id('status-view-current-busy'))).toExist().withTimeout(2000); }); - it('should change status text', async () => { + it('should change status text', async() => { await element(by.id('status-view-input')).typeText('status-text-new'); await element(by.id('status-view-submit')).tap(); await waitForToast(); await waitFor(element(by.label('status-text-new').withAncestor(by.id('sidebar-custom-status')))).toExist().withTimeout(2000); }); }); -}); \ No newline at end of file +}); diff --git a/e2e/tests/assorted/07-changeserver.spec.js b/e2e/tests/assorted/07-changeserver.spec.js index 06ac7c36a..4ed0d6b58 100644 --- a/e2e/tests/assorted/07-changeserver.spec.js +++ b/e2e/tests/assorted/07-changeserver.spec.js @@ -1,6 +1,3 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); const { navigateToLogin, login, checkServer } = require('../../helpers/app'); @@ -8,7 +5,7 @@ const reopenAndCheckServer = async(server) => { await device.launchApp({ permissions: { notifications: 'YES' } }); await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(6000); await checkServer(server); -} +}; describe('Change server', () => { before(async() => { @@ -24,7 +21,7 @@ describe('Change server', () => { await element(by.id('rooms-list-header-server-add')).tap(); await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(6000); - await element(by.id('new-server-view-input')).typeText(`${data.alternateServer}\n`); + await element(by.id('new-server-view-input')).typeText(`${ data.alternateServer }\n`); await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(10000); await reopenAndCheckServer(data.server); }); @@ -64,5 +61,5 @@ describe('Change server', () => { it('should reopen the app and show main server', async() => { await reopenAndCheckServer(data.server); - }) + }); }); diff --git a/e2e/tests/assorted/08-joinprotectedroom.spec.js b/e2e/tests/assorted/08-joinprotectedroom.spec.js index 9101a9659..f10d7bc5f 100644 --- a/e2e/tests/assorted/08-joinprotectedroom.spec.js +++ b/e2e/tests/assorted/08-joinprotectedroom.spec.js @@ -1,12 +1,11 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); -const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom } = require('../../helpers/app'); +const { + navigateToLogin, login, mockMessage, searchRoom +} = require('../../helpers/app'); -const testuser = data.users.regular -const room = data.channels.detoxpublicprotected.name -const joinCode = data.channels.detoxpublicprotected.joinCode +const testuser = data.users.regular; +const room = data.channels.detoxpublicprotected.name; +const { joinCode } = data.channels.detoxpublicprotected; async function navigateToRoom() { await searchRoom(room); @@ -27,10 +26,10 @@ describe('Join protected room', () => { await navigateToRoom(); }); - describe('Usage', async() => { + describe('Usage', () => { it('should tap join and ask for join code', async() => { await openJoinCode(); - }) + }); it('should cancel join room', async() => { await element(by.id('join-code-cancel')).tap(); diff --git a/e2e/tests/assorted/09-joinfromdirectory.spec.js b/e2e/tests/assorted/09-joinfromdirectory.spec.js index 039ef823c..e04faabf4 100644 --- a/e2e/tests/assorted/09-joinfromdirectory.spec.js +++ b/e2e/tests/assorted/09-joinfromdirectory.spec.js @@ -1,13 +1,12 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); -const { navigateToLogin, login, tapBack, sleep } = require('../../helpers/app'); +const { + navigateToLogin, login, tapBack, sleep +} = require('../../helpers/app'); -const testuser = data.users.regular +const testuser = data.users.regular; async function navigateToRoom(search) { - await element(by.id('directory-view-search')).replaceText(search); + await element(by.id('directory-view-search')).replaceText(search); await waitFor(element(by.id(`directory-view-item-${ search }`))).toBeVisible().withTimeout(10000); await sleep(300); // app takes some time to animate await element(by.id(`directory-view-item-${ search }`)).tap(); @@ -22,34 +21,34 @@ describe('Join room from directory', () => { await login(testuser.username, testuser.password); }); - describe('Usage', async() => { + describe('Usage', () => { it('should tap directory', async() => { - await element(by.id('rooms-list-view-directory')).tap(); + await element(by.id('rooms-list-view-directory')).tap(); await waitFor(element(by.id('directory-view'))).toExist().withTimeout(2000); - }) + }); it('should search public channel and navigate', async() => { await navigateToRoom(data.channels.detoxpublic.name); - }) - - it('should search user and navigate', async() => { - await tapBack(); - await element(by.id('rooms-list-view-directory')).tap(); - await waitFor(element(by.id('directory-view'))).toExist().withTimeout(2000); - await element(by.id('directory-view-dropdown')).tap(); - await element(by.label('Users')).tap(); - await element(by.label('Search by')).tap(); - await navigateToRoom(data.users.alternate.username); - }) + }); it('should search user and navigate', async() => { await tapBack(); await element(by.id('rooms-list-view-directory')).tap(); await waitFor(element(by.id('directory-view'))).toExist().withTimeout(2000); - await element(by.id('directory-view-dropdown')).tap(); + await element(by.id('directory-view-dropdown')).tap(); + await element(by.label('Users')).tap(); + await element(by.label('Search by')).tap(); + await navigateToRoom(data.users.alternate.username); + }); + + it('should search user and navigate', async() => { + await tapBack(); + await element(by.id('rooms-list-view-directory')).tap(); + await waitFor(element(by.id('directory-view'))).toExist().withTimeout(2000); + await element(by.id('directory-view-dropdown')).tap(); await element(by.label('Teams')).tap(); - await element(by.label('Search by')).tap(); + await element(by.label('Search by')).tap(); await navigateToRoom(data.teams.private.name); - }) + }); }); }); diff --git a/e2e/tests/assorted/10-deleteserver.spec.js b/e2e/tests/assorted/10-deleteserver.spec.js index 8e260fd70..d92d3c442 100644 --- a/e2e/tests/assorted/10-deleteserver.spec.js +++ b/e2e/tests/assorted/10-deleteserver.spec.js @@ -1,8 +1,7 @@ -const { - device, element, by, waitFor -} = require('detox'); const data = require('../../data'); -const { sleep, navigateToLogin, login, checkServer } = require('../../helpers/app'); +const { + sleep, navigateToLogin, login, checkServer +} = require('../../helpers/app'); describe('Delete server', () => { before(async() => { @@ -13,7 +12,7 @@ describe('Delete server', () => { it('should be logged in main server', async() => { await checkServer(data.server); - }) + }); it('should add server', async() => { await sleep(5000); @@ -22,7 +21,7 @@ describe('Delete server', () => { await element(by.id('rooms-list-header-server-add')).tap(); await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(10000); - await element(by.id('new-server-view-input')).typeText(`${data.alternateServer}\n`); + await element(by.id('new-server-view-input')).typeText(`${ data.alternateServer }\n`); await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(10000); await element(by.id('workspace-view-register')).tap(); await waitFor(element(by.id('register-view'))).toBeVisible().withTimeout(2000); @@ -42,7 +41,7 @@ describe('Delete server', () => { await element(by.id('rooms-list-header-server-dropdown-button')).tap(); await waitFor(element(by.id('rooms-list-header-server-dropdown'))).toBeVisible().withTimeout(5000); await element(by.id(`rooms-list-header-server-${ data.server }`)).longPress(1500); - await element(by.label('Delete').and(by.type('_UIAlertControllerActionView'))).tap(); + await element(by.label('Delete').and(by.type('_UIAlertControllerActionView'))).tap(); await element(by.id('rooms-list-header-server-dropdown-button')).tap(); await waitFor(element(by.id('rooms-list-header-server-dropdown'))).toBeVisible().withTimeout(5000); await waitFor(element(by.id(`rooms-list-header-server-${ data.server }`))).toBeNotVisible().withTimeout(10000); diff --git a/e2e/tests/assorted/11-deeplinking.spec.js b/e2e/tests/assorted/11-deeplinking.spec.js index c40cff7bf..8a30be0a9 100644 --- a/e2e/tests/assorted/11-deeplinking.spec.js +++ b/e2e/tests/assorted/11-deeplinking.spec.js @@ -1,13 +1,10 @@ -const { - device, element, by, waitFor -} = require('detox'); const data = require('../../data'); const { tapBack, checkServer, navigateToRegister } = require('../../helpers/app'); -const { post, get, login } = require('../../helpers/data_setup'); +const { get, login } = require('../../helpers/data_setup'); const DEEPLINK_METHODS = { AUTH: 'auth', ROOM: 'room' }; const getDeepLink = (method, server, params) => { - const deeplink = `rocketchat://${ method }?host=${ server.replace(/^(http:\/\/|https:\/\/)/, '') }&${params}`; + const deeplink = `rocketchat://${ method }?host=${ server.replace(/^(http:\/\/|https:\/\/)/, '') }&${ params }`; console.log(`Deeplinking to: ${ deeplink }`); return deeplink; }; @@ -43,7 +40,7 @@ describe('Deep linking', () => { await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000); await checkServer(data.server); await waitFor(element(by.id(`rooms-list-view-item-${ data.groups.private.name }`))).toBeVisible().withTimeout(2000); - } + }; it('should authenticate and navigate', async() => { await authAndNavigate(); @@ -63,7 +60,7 @@ describe('Deep linking', () => { }); describe('Room', () => { - describe('While logged in', async() => { + describe('While logged in', () => { it('should navigate to the room using path', async() => { await device.launchApp({ permissions: { notifications: 'YES' }, @@ -75,7 +72,7 @@ describe('Deep linking', () => { }); it('should navigate to the room using rid', async() => { - const roomResult = await get(`groups.info?roomName=${ data.groups.private.name }`) + const roomResult = await get(`groups.info?roomName=${ data.groups.private.name }`); await device.launchApp({ permissions: { notifications: 'YES' }, newInstance: true, @@ -87,7 +84,7 @@ describe('Deep linking', () => { }); }); - describe('Others', async() => { + describe('Others', () => { it('should change server', async() => { await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(2000); await element(by.id('rooms-list-header-server-dropdown-button')).tap(); diff --git a/e2e/tests/assorted/12-i18n.spec.js b/e2e/tests/assorted/12-i18n.spec.js index 51273fd72..1c4a6a9d5 100644 --- a/e2e/tests/assorted/12-i18n.spec.js +++ b/e2e/tests/assorted/12-i18n.spec.js @@ -1,11 +1,9 @@ -const { - device, element, by, waitFor -} = require('detox'); const { navigateToLogin, login, sleep } = require('../../helpers/app'); const { post } = require('../../helpers/data_setup'); const data = require('../../data'); -const testuser = data.users.regular + +const testuser = data.users.regular; const defaultLaunchArgs = { permissions: { notifications: 'YES' } }; const navToLanguage = async() => { @@ -25,8 +23,8 @@ describe('i18n', () => { await device.launchApp({ ...defaultLaunchArgs, languageAndLocale: { - language: "en", - locale: "en" + language: 'en', + locale: 'en' }, delete: true }); @@ -34,20 +32,20 @@ describe('i18n', () => { await expect(element(by.id('join-workspace').and(by.label('Join a workspace')))).toBeVisible(); await expect(element(by.id('create-workspace-button').and(by.label('Create a new workspace')))).toBeVisible(); }); - + it('OS set to unavailable language and fallback to \'en\'', async() => { await device.launchApp({ ...defaultLaunchArgs, languageAndLocale: { - language: "es-MX", - locale: "es-MX" + language: 'es-MX', + locale: 'es-MX' } }); await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000); await expect(element(by.id('join-workspace').and(by.label('Join a workspace')))).toBeVisible(); await expect(element(by.id('create-workspace-button').and(by.label('Create a new workspace')))).toBeVisible(); }); - + /** * This test might become outdated as soon as we support the language * Although this seems to be a bad approach, that's the intention for having fallback enabled @@ -110,5 +108,5 @@ describe('i18n', () => { await expect(element(by.id('sidebar-settings').withDescendant(by.label('Settings')))).toBeVisible(); await post('users.setPreferences', { data: { language: 'en' } }); // Set back to english }); - }) -}); \ No newline at end of file + }); +}); diff --git a/e2e/tests/init.js b/e2e/tests/init.js index 18ad98327..b1e08a2bd 100644 --- a/e2e/tests/init.js +++ b/e2e/tests/init.js @@ -1,13 +1,13 @@ const detox = require('detox'); -const config = require('../../package.json').detox; -const { setup } = require('../helpers/data_setup') const adapter = require('detox/runners/mocha/adapter'); +const config = require('../../package.json').detox; +const { setup } = require('../helpers/data_setup'); before(async() => { - await Promise.all([setup(), detox.init(config, { launchApp: false })]) - //await dataSetup() - //await detox.init(config, { launchApp: false }); - //await device.launchApp({ permissions: { notifications: 'YES' } }); + await Promise.all([setup(), detox.init(config, { launchApp: false })]); + // await dataSetup() + // await detox.init(config, { launchApp: false }); + // await device.launchApp({ permissions: { notifications: 'YES' } }); }); beforeEach(async function() { diff --git a/e2e/tests/onboarding/01-onboarding.spec.js b/e2e/tests/onboarding/01-onboarding.spec.js index e38a83764..a8cad8991 100644 --- a/e2e/tests/onboarding/01-onboarding.spec.js +++ b/e2e/tests/onboarding/01-onboarding.spec.js @@ -1,6 +1,3 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); describe('Onboarding', () => { @@ -12,10 +9,10 @@ describe('Onboarding', () => { describe('Render', () => { it('should have onboarding screen', async() => { await expect(element(by.id('onboarding-view'))).toBeVisible(); - }); + }); it('should have "Join a workspace"', async() => { - await expect(element(by.id('join-workspace'))).toBeVisible(); + await expect(element(by.id('join-workspace'))).toBeVisible(); }); it('should have "Create a new workspace"', async() => { @@ -27,7 +24,7 @@ describe('Onboarding', () => { // it('should navigate to create new workspace', async() => { // // webviews are not supported by detox: https://github.com/wix/detox/issues/136#issuecomment-306591554 // }); - + it('should navigate to join a workspace', async() => { await element(by.id('join-workspace')).tap(); await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(60000); @@ -50,7 +47,7 @@ describe('Onboarding', () => { await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(2000); await element(by.id('join-workspace')).tap(); await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(60000); - await element(by.id('new-server-view-input')).typeText(`${data.server}\n`); + await element(by.id('new-server-view-input')).typeText(`${ data.server }\n`); await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(60000); }); }); diff --git a/e2e/tests/onboarding/02-legal.spec.js b/e2e/tests/onboarding/02-legal.spec.js index 191e0647c..4ac96d985 100644 --- a/e2e/tests/onboarding/02-legal.spec.js +++ b/e2e/tests/onboarding/02-legal.spec.js @@ -1,24 +1,20 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const { navigateToRegister, navigateToLogin } = require('../../helpers/app'); describe('Legal screen', () => { - describe('From Login', () => { before(async() => { await device.launchApp({ permissions: { notifications: 'YES' }, delete: true }); await navigateToLogin(); }); - - it('should have legal button on login', async() => { + + it('should have legal button on login', async() => { await waitFor(element(by.id('login-view-more'))).toBeVisible().withTimeout(60000); }); - + it('should navigate to legal from login', async() => { await expect(element(by.id('login-view-more'))).toBeVisible(); await element(by.id('login-view-more')).tap(); - await waitFor(element(by.id('legal-view'))).toBeVisible().withTimeout(4000) + await waitFor(element(by.id('legal-view'))).toBeVisible().withTimeout(4000); }); }); @@ -28,32 +24,32 @@ describe('Legal screen', () => { await navigateToRegister(); }); - it('should have legal button on register', async() => { + it('should have legal button on register', async() => { await waitFor(element(by.id('register-view-more'))).toBeVisible().withTimeout(60000); }); - + it('should navigate to legal from register', async() => { await expect(element(by.id('register-view-more'))).toBeVisible(); await element(by.id('register-view-more')).tap(); await waitFor(element(by.id('legal-view'))).toBeVisible().withTimeout(4000); }); - + it('should have terms of service button', async() => { await expect(element(by.id('legal-terms-button'))).toBeVisible(); }); - + it('should have privacy policy button', async() => { await expect(element(by.id('legal-privacy-button'))).toBeVisible(); }); // We can't simulate how webview behaves, so I had to disable :( - /* + /* it('should navigate to terms', async() => { await element(by.id('legal-terms-button')).tap(); await waitFor(element(by.id('terms-view'))).toBeVisible().withTimeout(2000); await expect(element(by.id('terms-view'))).toBeVisible(); }); - + it('should navigate to privacy', async() => { await tapBack(); await element(by.id('legal-privacy-button')).tap(); diff --git a/e2e/tests/onboarding/03-forgotpassword.spec.js b/e2e/tests/onboarding/03-forgotpassword.spec.js index 03afe5925..d53690d6f 100644 --- a/e2e/tests/onboarding/03-forgotpassword.spec.js +++ b/e2e/tests/onboarding/03-forgotpassword.spec.js @@ -1,6 +1,3 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); const { navigateToLogin } = require('../../helpers/app'); @@ -12,7 +9,7 @@ describe('Forgot password screen', () => { await waitFor(element(by.id('forgot-password-view'))).toExist().withTimeout(2000); }); - describe('Render', async() => { + describe('Render', () => { it('should have forgot password screen', async() => { await expect(element(by.id('forgot-password-view'))).toExist(); }); @@ -26,7 +23,7 @@ describe('Forgot password screen', () => { }); }); - describe('Usage', async() => { + describe('Usage', () => { it('should reset password and navigate to login', async() => { await element(by.id('forgot-password-view-email')).replaceText(data.users.existing.email); await element(by.id('forgot-password-view-submit')).tap(); diff --git a/e2e/tests/onboarding/04-createuser.spec.js b/e2e/tests/onboarding/04-createuser.spec.js index cf706d78b..e88e9eab3 100644 --- a/e2e/tests/onboarding/04-createuser.spec.js +++ b/e2e/tests/onboarding/04-createuser.spec.js @@ -1,7 +1,4 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); -const { navigateToRegister, sleep } = require('../../helpers/app'); +const { navigateToRegister } = require('../../helpers/app'); const data = require('../../data'); describe('Create user screen', () => { @@ -37,7 +34,6 @@ describe('Create user screen', () => { }); describe('Usage', () => { - // FIXME: Detox isn't able to check if it's tappable: https://github.com/wix/Detox/issues/246 // it('should submit invalid email and do nothing', async() => { // const invalidEmail = 'invalidemail'; diff --git a/e2e/tests/onboarding/05-login.spec.js b/e2e/tests/onboarding/05-login.spec.js index 7c6b4853c..91cb91737 100644 --- a/e2e/tests/onboarding/05-login.spec.js +++ b/e2e/tests/onboarding/05-login.spec.js @@ -1,7 +1,4 @@ -const { - expect, element, by, waitFor -} = require('detox'); -const { navigateToLogin, tapBack, sleep } = require('../../helpers/app'); +const { navigateToLogin, tapBack } = require('../../helpers/app'); const data = require('../../data'); describe('Login screen', () => { @@ -46,13 +43,13 @@ describe('Login screen', () => { await waitFor(element(by.id('register-view'))).toBeVisible().withTimeout(2000); await tapBack(); }); - + it('should navigate to forgot password', async() => { await element(by.id('login-view-forgot-password')).tap(); await waitFor(element(by.id('forgot-password-view'))).toExist().withTimeout(2000); await tapBack(); }); - + it('should insert wrong password and get error', async() => { await element(by.id('login-view-email')).replaceText(data.users.regular.username); await element(by.id('login-view-password')).replaceText('NotMyActualPassword'); @@ -60,7 +57,7 @@ describe('Login screen', () => { await waitFor(element(by.text('Your credentials were rejected! Please try again.'))).toBeVisible().withTimeout(10000); await element(by.text('OK')).tap(); }); - + it('should login with success', async() => { await element(by.id('login-view-password')).replaceText(data.users.regular.password); await element(by.id('login-view-submit')).tap(); diff --git a/e2e/tests/onboarding/06-roomslist.spec.js b/e2e/tests/onboarding/06-roomslist.spec.js index ea6dc06c1..03e595edf 100644 --- a/e2e/tests/onboarding/06-roomslist.spec.js +++ b/e2e/tests/onboarding/06-roomslist.spec.js @@ -1,15 +1,13 @@ const { - device, expect, element, by, waitFor -} = require('detox'); -const { login, navigateToLogin, logout, tapBack, sleep, searchRoom } = require('../../helpers/app'); + login, navigateToLogin, logout, tapBack, searchRoom +} = require('../../helpers/app'); const data = require('../../data'); describe('Rooms list screen', () => { - before(async() => { await device.launchApp({ permissions: { notifications: 'YES' }, newInstance: true, delete: true }); await navigateToLogin(); - await login(data.users.regular.username, data.users.regular.password) + await login(data.users.regular.username, data.users.regular.password); }); describe('Render', () => { @@ -20,13 +18,13 @@ describe('Rooms list screen', () => { it('should have room item', async() => { await expect(element(by.id('rooms-list-view-item-general'))).toExist(); }); - + // Render - Header describe('Header', () => { it('should have create channel button', async() => { await expect(element(by.id('rooms-list-view-create-channel'))).toBeVisible(); }); - + it('should have sidebar button', async() => { await expect(element(by.id('rooms-list-view-sidebar'))).toBeVisible(); }); diff --git a/e2e/tests/onboarding/07-server-history.spec.js b/e2e/tests/onboarding/07-server-history.spec.js index fc1d6af9c..b984b9c8b 100644 --- a/e2e/tests/onboarding/07-server-history.spec.js +++ b/e2e/tests/onboarding/07-server-history.spec.js @@ -1,7 +1,6 @@ const { - device, expect, element, by, waitFor -} = require('detox'); -const { login, navigateToLogin, logout, tapBack } = require('../../helpers/app'); + login, navigateToLogin, logout, tapBack +} = require('../../helpers/app'); const data = require('../../data'); describe('Server history', () => { @@ -16,7 +15,7 @@ describe('Server history', () => { await logout(); await element(by.id('join-workspace')).tap(); await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(60000); - }) + }); it('should show servers history', async() => { await element(by.id('new-server-view-input')).tap(); diff --git a/e2e/tests/room/01-createroom.spec.js b/e2e/tests/room/01-createroom.spec.js index 874255e43..bc67b2c3e 100644 --- a/e2e/tests/room/01-createroom.spec.js +++ b/e2e/tests/room/01-createroom.spec.js @@ -1,10 +1,7 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); -const { tapBack, sleep, navigateToLogin, login, tryTapping } = require('../../helpers/app'); - - +const { + tapBack, navigateToLogin, login, tryTapping +} = require('../../helpers/app'); describe('Create room screen', () => { before(async() => { @@ -13,30 +10,30 @@ describe('Create room screen', () => { await login(data.users.regular.username, data.users.regular.password); }); - describe('New Message', async() => { + describe('New Message', () => { before(async() => { await element(by.id('rooms-list-view-create-channel')).tap(); }); - describe('Render', async() => { + describe('Render', () => { it('should have new message screen', async() => { await waitFor(element(by.id('new-message-view'))).toBeVisible().withTimeout(2000); }); - + it('should have search input', async() => { await waitFor(element(by.id('new-message-view-search'))).toBeVisible().withTimeout(2000); }); - }) + }); - describe('Usage', async() => { + describe('Usage', () => { it('should back to rooms list', async() => { await waitFor(element(by.id('new-message-view-close'))).toBeVisible().withTimeout(5000); await element(by.id('new-message-view-close')).tap(); await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(5000); - + await tryTapping(element(by.id('rooms-list-view-create-channel')), 3000); - //await element(by.id('rooms-list-view-create-channel')).tap(); + // await element(by.id('rooms-list-view-create-channel')).tap(); await waitFor(element(by.id('new-message-view'))).toExist().withTimeout(5000); }); @@ -56,13 +53,13 @@ describe('Create room screen', () => { await element(by.id('new-message-view-create-channel')).tap(); await waitFor(element(by.id('select-users-view'))).toExist().withTimeout(5000); }); - }) + }); }); - describe('Select Users', async() => { + describe('Select Users', () => { it('should search users', async() => { await element(by.id('select-users-view-search')).replaceText('rocket.cat'); - await waitFor(element(by.id(`select-users-view-item-rocket.cat`))).toBeVisible().withTimeout(10000); + await waitFor(element(by.id('select-users-view-item-rocket.cat'))).toBeVisible().withTimeout(10000); }); it('should select/unselect user', async() => { @@ -80,27 +77,27 @@ describe('Create room screen', () => { await element(by.id('selected-users-view-submit')).tap(); await waitFor(element(by.id('create-channel-view'))).toExist().withTimeout(10000); }); - }) + }); - describe('Create Channel', async() => { - describe('Render', async() => { + describe('Create Channel', () => { + describe('Render', () => { it('should render all fields', async() => { await expect(element(by.id('create-channel-name'))).toBeVisible(); await expect(element(by.id('create-channel-type'))).toBeVisible(); await expect(element(by.id('create-channel-readonly'))).toBeVisible(); await expect(element(by.id('create-channel-broadcast'))).toBeVisible(); - }) - }) + }); + }); - describe('Usage', async() => { + describe('Usage', () => { it('should get invalid room', async() => { await element(by.id('create-channel-name')).typeText('general'); await element(by.id('create-channel-submit')).tap(); - await waitFor(element(by.text(`A channel with name general exists`))).toExist().withTimeout(60000); - await expect(element(by.text(`A channel with name general exists`))).toExist(); + await waitFor(element(by.text('A channel with name general exists'))).toExist().withTimeout(60000); + await expect(element(by.text('A channel with name general exists'))).toExist(); await element(by.text('OK')).tap(); }); - + it('should create public room', async() => { const room = `public${ data.random }`; await element(by.id('create-channel-name')).replaceText(''); @@ -116,7 +113,7 @@ describe('Create room screen', () => { await waitFor(element(by.id(`rooms-list-view-item-${ room }`))).toExist().withTimeout(6000); await expect(element(by.id(`rooms-list-view-item-${ room }`))).toExist(); }); - + it('should create private room', async() => { const room = `private${ data.random }`; await waitFor(element(by.id('rooms-list-view'))).toExist().withTimeout(5000); @@ -161,6 +158,6 @@ describe('Create room screen', () => { await waitFor(element(by.id(`rooms-list-view-item-${ room }`))).toExist().withTimeout(60000); await expect(element(by.id(`rooms-list-view-item-${ room }`))).toExist(); }); - }) + }); }); }); diff --git a/e2e/tests/room/02-room.spec.js b/e2e/tests/room/02-room.spec.js index d6a374185..4e1711e64 100644 --- a/e2e/tests/room/02-room.spec.js +++ b/e2e/tests/room/02-room.spec.js @@ -1,8 +1,7 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); -const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom, starMessage, pinMessage, dismissReviewNag, tryTapping, logout } = require('../../helpers/app'); +const { + navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom, starMessage, pinMessage, dismissReviewNag, tryTapping +} = require('../../helpers/app'); async function navigateToRoom(roomName) { await searchRoom(`${ roomName }`); @@ -20,14 +19,14 @@ describe('Room screen', () => { await navigateToRoom(mainRoom); }); - describe('Render', async() => { + describe('Render', () => { it('should have room screen', async() => { await expect(element(by.id('room-view'))).toExist(); await waitFor(element(by.id(`room-view-title-${ mainRoom }`))).toExist().withTimeout(5000); }); // Render - Header - describe('Header', async() => { + describe('Header', () => { it('should have actions button ', async() => { await expect(element(by.id('room-header'))).toExist(); }); @@ -38,7 +37,7 @@ describe('Room screen', () => { }); // Render - Messagebox - describe('Messagebox', async() => { + describe('Messagebox', () => { it('should have messagebox', async() => { await expect(element(by.id('messagebox'))).toExist(); }); @@ -63,15 +62,15 @@ describe('Room screen', () => { }); }); - describe('Usage', async() => { - describe('Messagebox', async() => { + describe('Usage', () => { + describe('Messagebox', () => { it('should send message', async() => { - await mockMessage('message') + await mockMessage('message'); await expect(element(by.label(`${ data.random }message`)).atIndex(0)).toExist(); }); - it('should show/hide emoji keyboard', async () => { + it('should show/hide emoji keyboard', async() => { if (device.getPlatform() === 'android') { await element(by.id('messagebox-open-emoji')).tap(); await waitFor(element(by.id('messagebox-keyboard-emoji'))).toExist().withTimeout(10000); @@ -105,20 +104,20 @@ describe('Room screen', () => { it('should not show emoji autocomplete on semicolon in middle of a string', async() => { await element(by.id('messagebox-input')).tap(); // await element(by.id('messagebox-input')).replaceText(':'); - await element(by.id('messagebox-input')).typeText('name:is'); + await element(by.id('messagebox-input')).typeText('name:is'); await waitFor(element(by.id('messagebox-container'))).toNotExist().withTimeout(20000); await element(by.id('messagebox-input')).clearText(); }); it('should show and tap on user autocomplete and send mention', async() => { - const username = data.users.regular.username + const { username } = data.users.regular; await element(by.id('messagebox-input')).tap(); await element(by.id('messagebox-input')).typeText(`@${ username }`); await waitFor(element(by.id('messagebox-container'))).toExist().withTimeout(4000); - await waitFor(element(by.id(`mention-item-${ username }`))).toBeVisible().withTimeout(4000) + await waitFor(element(by.id(`mention-item-${ username }`))).toBeVisible().withTimeout(4000); await tryTapping(element(by.id(`mention-item-${ username }`)), 2000, true); await expect(element(by.id('messagebox-input'))).toHaveText(`@${ username } `); - await tryTapping(element(by.id('messagebox-input')), 2000) + await tryTapping(element(by.id('messagebox-input')), 2000); await element(by.id('messagebox-input')).typeText(`${ data.random }mention`); await element(by.id('messagebox-send-message')).tap(); // await waitFor(element(by.label(`@${ data.user } ${ data.random }mention`)).atIndex(0)).toExist().withTimeout(60000); @@ -126,7 +125,7 @@ describe('Room screen', () => { it('should not show user autocomplete on @ in the middle of a string', async() => { await element(by.id('messagebox-input')).tap(); - await element(by.id('messagebox-input')).typeText(`email@gmail`); + await element(by.id('messagebox-input')).typeText('email@gmail'); await waitFor(element(by.id('messagebox-container'))).toNotExist().withTimeout(4000); await element(by.id('messagebox-input')).clearText(); }); @@ -134,9 +133,9 @@ describe('Room screen', () => { it('should show and tap on room autocomplete', async() => { await element(by.id('messagebox-input')).tap(); await element(by.id('messagebox-input')).typeText('#general'); - //await waitFor(element(by.id('messagebox-container'))).toExist().withTimeout(4000); + // await waitFor(element(by.id('messagebox-container'))).toExist().withTimeout(4000); await waitFor(element(by.id('mention-item-general'))).toBeVisible().withTimeout(4000); - await tryTapping(element(by.id('mention-item-general')), 2000, true) + await tryTapping(element(by.id('mention-item-general')), 2000, true); await expect(element(by.id('messagebox-input'))).toHaveText('#general '); await element(by.id('messagebox-input')).clearText(); }); @@ -147,7 +146,7 @@ describe('Room screen', () => { await waitFor(element(by.id('messagebox-container'))).toNotExist().withTimeout(4000); await element(by.id('messagebox-input')).clearText(); }); - it('should draft message', async () => { + it('should draft message', async() => { await element(by.id('messagebox-input')).tap(); await element(by.id('messagebox-input')).typeText(`${ data.random }draft`); await tapBack(); @@ -159,10 +158,10 @@ describe('Room screen', () => { await navigateToRoom(mainRoom); await expect(element(by.id('messagebox-input'))).toHaveText(''); - }); + }); }); - describe('Message', async() => { + describe('Message', () => { it('should copy permalink', async() => { await element(by.label(`${ data.random }message`)).atIndex(0).longPress(); await expect(element(by.id('action-sheet'))).toExist(); @@ -184,9 +183,9 @@ describe('Room screen', () => { }); it('should star message', async() => { - await starMessage('message') + await starMessage('message'); - await sleep(1000) //https://github.com/RocketChat/Rocket.Chat.ReactNative/issues/2324 + await sleep(1000); // https://github.com/RocketChat/Rocket.Chat.ReactNative/issues/2324 await element(by.label(`${ data.random }message`)).atIndex(0).longPress(); await expect(element(by.id('action-sheet'))).toExist(); await expect(element(by.id('action-sheet-handle'))).toBeVisible(); @@ -229,8 +228,8 @@ describe('Room screen', () => { }); it('should ask for review', async() => { - await dismissReviewNag() //TODO: Create a proper test for this elsewhere. - }) + await dismissReviewNag(); // TODO: Create a proper test for this elsewhere. + }); it('should remove reaction', async() => { await element(by.id('message-reaction-:grinning:')).tap(); @@ -263,8 +262,8 @@ describe('Room screen', () => { }); it('should pin message', async() => { - await mockMessage('pin') - await pinMessage('pin') + await mockMessage('pin'); + await pinMessage('pin'); await waitFor(element(by.label(`${ data.random }pin`)).atIndex(0)).toExist().withTimeout(5000); await waitFor(element(by.label(`${ data.users.regular.username } Message pinned`)).atIndex(0)).toExist().withTimeout(5000); @@ -277,7 +276,7 @@ describe('Room screen', () => { }); it('should delete message', async() => { - await mockMessage('delete') + await mockMessage('delete'); await waitFor(element(by.label(`${ data.random }delete`)).atIndex(0)).toBeVisible(); await element(by.label(`${ data.random }delete`)).atIndex(0).longPress(); diff --git a/e2e/tests/room/03-roomactions.spec.js b/e2e/tests/room/03-roomactions.spec.js index ecbac2233..1d37bff3d 100644 --- a/e2e/tests/room/03-roomactions.spec.js +++ b/e2e/tests/room/03-roomactions.spec.js @@ -1,9 +1,8 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); -const { navigateToLogin, login, tapBack, sleep, searchRoom, mockMessage, starMessage, pinMessage } = require('../../helpers/app'); -const { sendMessage } = require('../../helpers/data_setup') +const { + navigateToLogin, login, tapBack, sleep, searchRoom, mockMessage, starMessage, pinMessage +} = require('../../helpers/app'); +const { sendMessage } = require('../../helpers/data_setup'); async function navigateToRoomActions(type) { let room; @@ -36,15 +35,14 @@ async function waitForToast() { } describe('Room actions screen', () => { - before(async() => { await device.launchApp({ permissions: { notifications: 'YES' }, delete: true }); await navigateToLogin(); await login(data.users.regular.username, data.users.regular.password); }); - - describe('Render', async() => { - describe('Direct', async() => { + + describe('Render', () => { + describe('Direct', () => { before(async() => { await navigateToRoomActions('d'); }); @@ -52,41 +50,41 @@ describe('Room actions screen', () => { it('should have room actions screen', async() => { await expect(element(by.id('room-actions-view'))).toExist(); }); - + it('should have info', async() => { await expect(element(by.id('room-actions-info'))).toExist(); }); - + // it('should have voice', async() => { // await expect(element(by.id('room-actions-voice'))).toExist(); // }); - + // it('should have video', async() => { // await expect(element(by.id('room-actions-video'))).toExist(); // }); - + it('should have files', async() => { await expect(element(by.id('room-actions-files'))).toExist(); }); - + it('should have mentions', async() => { await expect(element(by.id('room-actions-mentioned'))).toExist(); }); - + it('should have starred', async() => { await expect(element(by.id('room-actions-starred'))).toExist(); }); - + it('should have share', async() => { await waitFor(element(by.id('room-actions-share'))).toExist(); await expect(element(by.id('room-actions-share'))).toExist(); }); - + it('should have pinned', async() => { await waitFor(element(by.id('room-actions-pinned'))).toExist(); await expect(element(by.id('room-actions-pinned'))).toExist(); }); - + it('should have notifications', async() => { await waitFor(element(by.id('room-actions-notifications'))).toExist(); await expect(element(by.id('room-actions-notifications'))).toExist(); @@ -102,7 +100,7 @@ describe('Room actions screen', () => { }); }); - describe('Channel/Group', async() => { + describe('Channel/Group', () => { before(async() => { await navigateToRoomActions('c'); }); @@ -110,15 +108,15 @@ describe('Room actions screen', () => { it('should have room actions screen', async() => { await expect(element(by.id('room-actions-view'))).toExist(); }); - + it('should have info', async() => { await expect(element(by.id('room-actions-info'))).toExist(); }); - + // it('should have voice', async() => { // await expect(element(by.id('room-actions-voice'))).toExist(); // }); - + // it('should have video', async() => { // await expect(element(by.id('room-actions-video'))).toExist(); // }); @@ -130,34 +128,34 @@ describe('Room actions screen', () => { it('should have add user', async() => { await expect(element(by.id('room-actions-add-user'))).toExist(); }); - + it('should have files', async() => { await expect(element(by.id('room-actions-files'))).toExist(); }); - + it('should have mentions', async() => { await expect(element(by.id('room-actions-mentioned'))).toExist(); }); - + it('should have starred', async() => { await expect(element(by.id('room-actions-starred'))).toExist(); }); - + it('should have share', async() => { await waitFor(element(by.id('room-actions-share'))).toExist(); await expect(element(by.id('room-actions-share'))).toExist(); }); - + it('should have pinned', async() => { await waitFor(element(by.id('room-actions-pinned'))).toExist(); await expect(element(by.id('room-actions-pinned'))).toExist(); }); - + it('should have notifications', async() => { await waitFor(element(by.id('room-actions-notifications'))).toExist(); await expect(element(by.id('room-actions-notifications'))).toExist(); }); - + it('should have leave channel', async() => { await waitFor(element(by.id('room-actions-leave-channel'))).toExist(); await expect(element(by.id('room-actions-leave-channel'))).toExist(); @@ -165,7 +163,7 @@ describe('Room actions screen', () => { }); }); - describe('Usage', async() => { + describe('Usage', () => { describe('TDB', async() => { // TODO: test into a jitsi call // it('should NOT navigate to voice call', async() => { @@ -191,7 +189,7 @@ describe('Room actions screen', () => { // }); }); - describe('Common', async() => { + describe('Common', () => { it('should show mentioned messages', async() => { await element(by.id('room-actions-mentioned')).tap(); await waitFor(element(by.id('mentioned-messages-view'))).toExist().withTimeout(2000); @@ -200,24 +198,23 @@ describe('Room actions screen', () => { }); it('should show starred message and unstar it', async() => { - - //Go back to room and send a message + // Go back to room and send a message await tapBack(); await mockMessage('messageToStar'); - //Star the message - await starMessage('messageToStar') + // Star the message + await starMessage('messageToStar'); - //Back into Room Actions + // Back into Room Actions await element(by.id('room-header')).tap(); await waitFor(element(by.id('room-actions-view'))).toExist().withTimeout(5000); - //Go to starred messages + // Go to starred messages await element(by.id('room-actions-starred')).tap(); await waitFor(element(by.id('starred-messages-view'))).toExist().withTimeout(2000); await waitFor(element(by.label(`${ data.random }messageToStar`).withAncestor(by.id('starred-messages-view')))).toExist().withTimeout(60000); - - //Unstar message + + // Unstar message await element(by.label(`${ data.random }messageToStar`)).atIndex(0).longPress(); await expect(element(by.id('action-sheet'))).toExist(); await expect(element(by.id('action-sheet-handle'))).toBeVisible(); @@ -228,15 +225,14 @@ describe('Room actions screen', () => { }); it('should show pinned message and unpin it', async() => { - - //Go back to room and send a message + // Go back to room and send a message await tapBack(); await mockMessage('messageToPin'); - //Pin the message - await pinMessage('messageToPin') + // Pin the message + await pinMessage('messageToPin'); - //Back into Room Actions + // Back into Room Actions await element(by.id('room-header')).tap(); await waitFor(element(by.id('room-actions-view'))).toExist().withTimeout(5000); await element(by.id('room-actions-scrollview')).scrollTo('bottom'); @@ -273,7 +269,7 @@ describe('Room actions screen', () => { // }); }); - describe('Notification', async() => { + describe('Notification', () => { it('should navigate to notification preference view', async() => { await element(by.id('room-actions-scrollview')).scrollTo('bottom'); await waitFor(element(by.id('room-actions-notifications'))).toExist().withTimeout(2000); @@ -318,13 +314,13 @@ describe('Room actions screen', () => { after(async() => { await backToActions(); }); - }) + }); - describe('Channel/Group', async() => { + describe('Channel/Group', () => { // Currently, there's no way to add more owners to the room // So we test only for the 'You are the last owner...' message - const user = data.users.alternate + const user = data.users.alternate; it('should tap on leave channel and raise alert', async() => { await element(by.id('room-actions-scrollview')).scrollTo('bottom'); @@ -363,12 +359,24 @@ describe('Room actions screen', () => { await backToActions(); }); - describe('Room Members', async() => { + describe('Room Members', () => { before(async() => { await element(by.id('room-actions-members')).tap(); await waitFor(element(by.id('room-members-view'))).toExist().withTimeout(2000); }); + const openActionSheet = async(username) => { + await waitFor(element(by.id(`room-members-view-item-${ username }`))).toExist().withTimeout(5000); + await element(by.id(`room-members-view-item-${ username }`)).tap(); + await sleep(300); + await expect(element(by.id('action-sheet'))).toExist(); + await expect(element(by.id('action-sheet-handle'))).toBeVisible(); + }; + + const closeActionSheet = async() => { + await element(by.id('action-sheet-handle')).swipe('down', 'fast', 0.6); + }; + it('should show all users', async() => { await element(by.id('room-members-view-toggle-status')).tap(); await waitFor(element(by.id(`room-members-view-item-${ user.username }`))).toExist().withTimeout(60000); @@ -397,18 +405,6 @@ describe('Room actions screen', () => { await waitFor(element(by.id(`room-members-view-item-${ user.username }`))).toExist().withTimeout(60000); }); - const openActionSheet = async(username) => { - await waitFor(element(by.id(`room-members-view-item-${ username }`))).toExist().withTimeout(5000); - await element(by.id(`room-members-view-item-${ username }`)).tap(); - await sleep(300); - await expect(element(by.id('action-sheet'))).toExist(); - await expect(element(by.id('action-sheet-handle'))).toBeVisible(); - } - - const closeActionSheet = async() => { - await element(by.id('action-sheet-handle')).swipe('down', 'fast', 0.6); - } - it('should set/remove as owner', async() => { await openActionSheet(user.username); await element(by.id('action-sheet-set-owner')).tap(); @@ -504,9 +500,9 @@ describe('Room actions screen', () => { await waitFor(element(by.id('rooms-list-view'))).toExist().withTimeout(2000); }); }); - }) + }); - describe('Direct', async() => { + describe('Direct', () => { before(async() => { await navigateToRoomActions('d'); }); diff --git a/e2e/tests/room/04-discussion.spec.js b/e2e/tests/room/04-discussion.spec.js index aa39f2eaf..29fc5a090 100644 --- a/e2e/tests/room/04-discussion.spec.js +++ b/e2e/tests/room/04-discussion.spec.js @@ -1,7 +1,6 @@ const { - expect, element, by, waitFor -} = require('detox'); -const { navigateToLogin, login, mockMessage, tapBack, searchRoom } = require('../../helpers/app'); + navigateToLogin, login, mockMessage, tapBack, searchRoom +} = require('../../helpers/app'); const data = require('../../data'); const channel = data.groups.private.name; @@ -10,28 +9,28 @@ const navigateToRoom = async() => { await searchRoom(channel); await element(by.id(`rooms-list-view-item-${ channel }`)).tap(); await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(5000); -} +}; describe('Discussion', () => { before(async() => { await device.launchApp({ permissions: { notifications: 'YES' }, newInstance: true, delete: true }); await navigateToLogin(); - await login(data.users.regular.username, data.users.regular.password) + await login(data.users.regular.username, data.users.regular.password); }); it('should create discussion from NewMessageView', async() => { - const discussionName = `${data.random} Discussion NewMessageView`; + const discussionName = `${ data.random } Discussion NewMessageView`; await element(by.id('rooms-list-view-create-channel')).tap(); await waitFor(element(by.id('new-message-view'))).toExist().withTimeout(2000); await element(by.label('Create Discussion')).atIndex(0).tap(); await waitFor(element(by.id('create-discussion-view'))).toExist().withTimeout(60000); await expect(element(by.id('create-discussion-view'))).toExist(); await element(by.label('Select a Channel...')).tap(); - await element(by.id('multi-select-search')).replaceText(`${channel}`); - await waitFor(element(by.id(`multi-select-item-${channel}`))).toExist().withTimeout(10000); - await element(by.id(`multi-select-item-${channel}`)).tap(); + await element(by.id('multi-select-search')).replaceText(`${ channel }`); + await waitFor(element(by.id(`multi-select-item-${ channel }`))).toExist().withTimeout(10000); + await element(by.id(`multi-select-item-${ channel }`)).tap(); await element(by.id('multi-select-discussion-name')).replaceText(discussionName); - await waitFor(element(by.id(`create-discussion-submit`))).toExist().withTimeout(10000); + await waitFor(element(by.id('create-discussion-submit'))).toExist().withTimeout(10000); await element(by.id('create-discussion-submit')).tap(); await waitFor(element(by.id('room-view'))).toExist().withTimeout(10000); await waitFor(element(by.id(`room-view-title-${ discussionName }`))).toExist().withTimeout(5000); @@ -40,20 +39,20 @@ describe('Discussion', () => { }); it('should create discussion from action button', async() => { - const discussionName = `${data.random} Discussion Action Button`; + const discussionName = `${ data.random } Discussion Action Button`; await navigateToRoom(); await element(by.id('messagebox-actions')).tap(); await waitFor(element(by.id('action-sheet'))).toExist().withTimeout(2000); await element(by.label('Create Discussion')).atIndex(0).tap(); await waitFor(element(by.id('create-discussion-view'))).toExist().withTimeout(2000); await element(by.id('multi-select-discussion-name')).replaceText(discussionName); - await waitFor(element(by.id(`create-discussion-submit`))).toExist().withTimeout(10000); + await waitFor(element(by.id('create-discussion-submit'))).toExist().withTimeout(10000); await element(by.id('create-discussion-submit')).tap(); await waitFor(element(by.id('room-view'))).toExist().withTimeout(10000); await waitFor(element(by.id(`room-view-title-${ discussionName }`))).toExist().withTimeout(5000); }); - describe('Create Discussion from action sheet', async() => { + describe('Create Discussion from action sheet', () => { it('should send a message', async() => { await waitFor(element(by.id('messagebox'))).toBeVisible().withTimeout(60000); await mockMessage('message'); @@ -63,15 +62,15 @@ describe('Discussion', () => { const discussionName = `${ data.random }message`; await element(by.label(discussionName)).atIndex(0).longPress(); await waitFor(element(by.id('action-sheet'))).toExist().withTimeout(2000); - await element(by.label(`Start a Discussion`)).atIndex(0).tap(); + await element(by.label('Start a Discussion')).atIndex(0).tap(); await waitFor(element(by.id('create-discussion-view'))).toExist().withTimeout(2000); await element(by.id('create-discussion-submit')).tap(); await waitFor(element(by.id('room-view'))).toExist().withTimeout(10000); await waitFor(element(by.id(`room-view-title-${ discussionName }`))).toExist().withTimeout(5000); }); }); - - describe('Check RoomActionsView render', async() => { + + describe('Check RoomActionsView render', () => { it('should navigete to RoomActionsView', async() => { await waitFor(element(by.id('room-header'))).toBeVisible().withTimeout(5000); await element(by.id('room-header')).tap(); diff --git a/e2e/tests/room/05-threads.spec.js b/e2e/tests/room/05-threads.spec.js index 381fa2b07..e3eee4c36 100644 --- a/e2e/tests/room/05-threads.spec.js +++ b/e2e/tests/room/05-threads.spec.js @@ -1,8 +1,7 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); -const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom, starMessage, pinMessage, dismissReviewNag, tryTapping } = require('../../helpers/app'); +const { + navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom, dismissReviewNag +} = require('../../helpers/app'); async function navigateToRoom(roomName) { await device.launchApp({ permissions: { notifications: 'YES' }, delete: true }); @@ -20,14 +19,14 @@ describe('Threads', () => { await navigateToRoom(mainRoom); }); - describe('Render', async() => { + describe('Render', () => { it('should have room screen', async() => { await expect(element(by.id('room-view'))).toExist(); await waitFor(element(by.id(`room-view-title-${ mainRoom }`))).toExist().withTimeout(5000); }); // Render - Header - describe('Header', async() => { + describe('Header', () => { it('should have actions button ', async() => { await expect(element(by.id('room-header'))).toExist(); }); @@ -38,7 +37,7 @@ describe('Threads', () => { }); // Render - Messagebox - describe('Messagebox', async() => { + describe('Messagebox', () => { it('should have messagebox', async() => { await expect(element(by.id('messagebox'))).toExist(); }); @@ -63,8 +62,8 @@ describe('Threads', () => { }); }); - describe('Usage', async() => { - describe('Thread', async() => { + describe('Usage', () => { + describe('Thread', () => { const thread = `${ data.random }thread`; it('should create thread', async() => { await mockMessage('thread'); @@ -104,9 +103,9 @@ describe('Threads', () => { const messageText = 'threadonly'; await mockMessage(messageText, true); await tapBack(); - await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000); - await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000); - await sleep(500) //TODO: Find a better way to wait for the animation to finish and the messagebox-input to be available and usable :( + await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000); + await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000); + await sleep(500); // TODO: Find a better way to wait for the animation to finish and the messagebox-input to be available and usable :( await waitFor(element(by.label(`${ data.random }${ messageText }`)).atIndex(0)).toNotExist().withTimeout(2000); }); @@ -117,24 +116,24 @@ describe('Threads', () => { await element(by.id('messagebox-send-to-channel')).tap(); await element(by.id('messagebox-send-message')).tap(); await tapBack(); - await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000); - await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000); - await sleep(500) //TODO: Find a better way to wait for the animation to finish and the messagebox-input to be available and usable :( + await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000); + await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000); + await sleep(500); // TODO: Find a better way to wait for the animation to finish and the messagebox-input to be available and usable :( await waitFor(element(by.label(messageText)).atIndex(0)).toExist().withTimeout(2000); }); it('should navigate to thread from thread name', async() => { const messageText = 'navthreadname'; await mockMessage('dummymessagebetweenthethread'); - await dismissReviewNag() //TODO: Create a proper test for this elsewhere. + await dismissReviewNag(); // TODO: Create a proper test for this elsewhere. await element(by.id(`message-thread-button-${ thread }`)).tap(); await element(by.id('messagebox-input-thread')).typeText(messageText); await element(by.id('messagebox-send-to-channel')).tap(); await element(by.id('messagebox-send-message')).tap(); await tapBack(); - await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000); - await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000); - await waitFor(element(by.id(`message-thread-replied-on-${ thread }`))).toBeVisible().withTimeout(2000); + await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000); + await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000); + await waitFor(element(by.id(`message-thread-replied-on-${ thread }`))).toBeVisible().withTimeout(2000); await element(by.id(`message-thread-replied-on-${ thread }`)).tap(); await waitFor(element(by.id(`room-view-title-${ thread }`))).toExist().withTimeout(5000); await expect(element(by.id(`room-view-title-${ thread }`))).toExist(); @@ -155,7 +154,7 @@ describe('Threads', () => { await tapBack(); }); - it('should draft thread message', async () => { + it('should draft thread message', async() => { await element(by.id(`message-thread-button-${ thread }`)).tap(); await waitFor(element(by.id(`room-view-title-${ thread }`))).toExist().withTimeout(5000); await element(by.id('messagebox-input-thread')).typeText(`${ thread }draft`); diff --git a/e2e/tests/room/06-createdmgroup.spec.js b/e2e/tests/room/06-createdmgroup.spec.js index a6451bfd7..bd2be06ab 100644 --- a/e2e/tests/room/06-createdmgroup.spec.js +++ b/e2e/tests/room/06-createdmgroup.spec.js @@ -1,8 +1,7 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); -const { tapBack, sleep, navigateToLogin, login, tryTapping } = require('../../helpers/app'); +const { + navigateToLogin, login +} = require('../../helpers/app'); @@ -13,41 +12,39 @@ describe('Group DM', () => { await login(data.users.regular.username, data.users.regular.password); }); - describe('Create Group DM', async() => { + describe('Create Group DM', () => { before(async() => { await element(by.id('rooms-list-view-create-channel')).tap(); }); - describe('Render', async() => { + describe('Render', () => { it('should have new message screen', async() => { await waitFor(element(by.id('new-message-view'))).toBeVisible().withTimeout(2000); }); - + it('should have search input', async() => { await waitFor(element(by.id('new-message-view-search'))).toBeVisible().withTimeout(2000); }); - }) + }); - describe('Usage', async() => { + describe('Usage', () => { it('should navigate to create DM', async() => { await element(by.label('Create Direct Messages')).tap(); }); it('should add users', async() => { await element(by.id('select-users-view-search')).replaceText('rocket.cat'); - await waitFor(element(by.id(`select-users-view-item-rocket.cat`))).toBeVisible().withTimeout(10000); + await waitFor(element(by.id('select-users-view-item-rocket.cat'))).toBeVisible().withTimeout(10000); await element(by.id('select-users-view-item-rocket.cat')).tap(); await element(by.id('select-users-view-search')).replaceText(data.users.existing.username); - await waitFor(element(by.id(`select-users-view-item-${data.users.existing.username}`))).toBeVisible().withTimeout(10000); - await element(by.id(`select-users-view-item-${data.users.existing.username}`)).tap(); + await waitFor(element(by.id(`select-users-view-item-${ data.users.existing.username }`))).toBeVisible().withTimeout(10000); + await element(by.id(`select-users-view-item-${ data.users.existing.username }`)).tap(); await element(by.id('selected-users-view-submit')).tap(); }); it('check Group DM exist', async() => { - await waitFor(element(by.id(`room-view-title-${data.users.existing.username}, rocket.cat`))).toExist().withTimeout(10000); + await waitFor(element(by.id(`room-view-title-${ data.users.existing.username }, rocket.cat`))).toExist().withTimeout(10000); }); - - - }) + }); }); }); diff --git a/e2e/tests/room/07-markasunread.spec.js b/e2e/tests/room/07-markasunread.spec.js index 383f49a7b..82920ba84 100644 --- a/e2e/tests/room/07-markasunread.spec.js +++ b/e2e/tests/room/07-markasunread.spec.js @@ -1,9 +1,8 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); -const { navigateToLogin, login, searchRoom, sleep } = require('../../helpers/app'); -const { sendMessage } = require('../../helpers/data_setup') +const { + navigateToLogin, login, searchRoom, sleep +} = require('../../helpers/app'); +const { sendMessage } = require('../../helpers/data_setup'); async function navigateToRoom(user) { await searchRoom(`${ user }`); @@ -12,7 +11,7 @@ async function navigateToRoom(user) { } describe('Mark as unread', () => { - const user = data.users.alternate.username + const user = data.users.alternate.username; before(async() => { await device.launchApp({ permissions: { notifications: 'YES' }, delete: true }); @@ -21,9 +20,8 @@ describe('Mark as unread', () => { await navigateToRoom(user); }); - // TODO: Fix flakiness. If it fails, run it solo. - describe('Usage', async() => { - describe('Mark message as unread', async() => { + describe('Usage', () => { + describe('Mark message as unread', () => { it('should mark message as unread', async() => { const message = `${ data.random }message-mark-as-unread`; const channelName = `@${ data.users.regular.username }`; @@ -35,7 +33,7 @@ describe('Mark as unread', () => { await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5); await element(by.label('Mark Unread')).atIndex(0).tap(); await waitFor(element(by.id('rooms-list-view'))).toExist().withTimeout(5000); - await expect(element(by.id(`rooms-list-view-item-${data.users.alternate.username}`))).toExist(); + await expect(element(by.id(`rooms-list-view-item-${ data.users.alternate.username }`))).toExist(); }); }); }); diff --git a/e2e/tests/room/08-roominfo.spec.js b/e2e/tests/room/08-roominfo.spec.js index fd6216cf9..8786c3761 100644 --- a/e2e/tests/room/08-roominfo.spec.js +++ b/e2e/tests/room/08-roominfo.spec.js @@ -1,10 +1,9 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); -const { navigateToLogin, login, tapBack, sleep, searchRoom } = require('../../helpers/app'); +const { + navigateToLogin, login, tapBack, sleep, searchRoom +} = require('../../helpers/app'); -const privateRoomName = data.groups.private.name +const privateRoomName = data.groups.private.name; async function navigateToRoomInfo(type) { let room; @@ -31,14 +30,13 @@ async function waitForToast() { } describe('Room info screen', () => { - before(async() => { await device.launchApp({ permissions: { notifications: 'YES' }, delete: true }); await navigateToLogin(); await login(data.users.regular.username, data.users.regular.password); }); - describe('Direct', async() => { + describe('Direct', () => { before(async() => { await navigateToRoomInfo('d'); }); @@ -49,107 +47,107 @@ describe('Room info screen', () => { }); after(async() => { - await tapBack() - await tapBack() - await tapBack() - }) + await tapBack(); + await tapBack(); + await tapBack(); + }); }); - describe('Channel/Group', async() => { + describe('Channel/Group', () => { before(async() => { await navigateToRoomInfo('c'); }); - describe('Render', async() => { + describe('Render', () => { it('should have room info view', async() => { await expect(element(by.id('room-info-view'))).toExist(); }); - + it('should have name', async() => { await expect(element(by.id('room-info-view-name'))).toExist(); }); - + it('should have description', async() => { await expect(element(by.label('Description'))).toExist(); }); - + it('should have topic', async() => { await expect(element(by.label('Topic'))).toExist(); }); - + it('should have announcement', async() => { await expect(element(by.label('Announcement'))).toExist(); }); - + it('should have edit button', async() => { await expect(element(by.id('room-info-view-edit-button'))).toExist(); }); }); - describe('Render Edit', async() => { + describe('Render Edit', () => { before(async() => { await waitFor(element(by.id('room-info-view-edit-button'))).toExist().withTimeout(10000); await element(by.id('room-info-view-edit-button')).tap(); await waitFor(element(by.id('room-info-edit-view'))).toExist().withTimeout(2000); }); - + it('should have room info edit view', async() => { await expect(element(by.id('room-info-edit-view'))).toExist(); }); - + it('should have name input', async() => { await expect(element(by.id('room-info-edit-view-name'))).toExist(); }); - + it('should have description input', async() => { await expect(element(by.id('room-info-edit-view-description'))).toExist(); }); - + it('should have topic input', async() => { await expect(element(by.id('room-info-edit-view-topic'))).toExist(); }); - + it('should have announcement input', async() => { await expect(element(by.id('room-info-edit-view-announcement'))).toExist(); }); - + it('should have password input', async() => { await expect(element(by.id('room-info-edit-view-password'))).toExist(); }); - + it('should have type switch', async() => { // Ugly hack to scroll on detox await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.8); await expect(element(by.id('room-info-edit-view-t'))).toExist(); }); - + it('should have ready only switch', async() => { await expect(element(by.id('room-info-edit-view-ro'))).toExist(); }); - + it('should have submit button', async() => { await expect(element(by.id('room-info-edit-view-submit'))).toExist(); }); - + it('should have reset button', async() => { await expect(element(by.id('room-info-edit-view-reset'))).toExist(); }); - + it('should have archive button', async() => { await expect(element(by.id('room-info-edit-view-archive'))).toExist(); }); - + it('should have delete button', async() => { await expect(element(by.id('room-info-edit-view-delete'))).toExist(); }); - + after(async() => { // Ugly hack to scroll on detox await element(by.id('room-info-edit-view-list')).swipe('down', 'fast', 0.8); }); }); - - describe('Usage', async() => { + + describe('Usage', () => { // it('should enter "invalid name" and get error', async() => { // await element(by.type('UIScrollView')).atIndex(1).swipe('down'); // await element(by.id('room-info-edit-view-name')).replaceText('invalid name'); @@ -161,7 +159,7 @@ describe('Room info screen', () => { // await waitFor(element(by.text('There was an error while saving settings!'))).toBeNotVisible().withTimeout(10000); // await element(by.type('UIScrollView')).atIndex(1).swipe('down'); // }); - + it('should change room name', async() => { await element(by.id('room-info-edit-view-name')).replaceText(`${ privateRoomName }new`); await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5); @@ -179,7 +177,7 @@ describe('Room info screen', () => { await waitForToast(); await element(by.id('room-info-edit-view-list')).swipe('down', 'fast', 0.8); }); - + it('should reset form', async() => { await element(by.id('room-info-edit-view-name')).replaceText('abc'); await element(by.id('room-info-edit-view-description')).replaceText('abc'); @@ -188,7 +186,7 @@ describe('Room info screen', () => { await element(by.id('room-info-edit-view-password')).replaceText('abc'); await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5); await element(by.id('room-info-edit-view-t')).tap(); - await element(by.id('room-info-edit-view-ro')).longPress(); //https://github.com/facebook/react-native/issues/28032 + await element(by.id('room-info-edit-view-ro')).longPress(); // https://github.com/facebook/react-native/issues/28032 await element(by.id('room-info-edit-view-react-when-ro')).tap(); await element(by.id('room-info-edit-view-reset')).tap(); // after reset @@ -202,7 +200,7 @@ describe('Room info screen', () => { await expect(element(by.id('room-info-edit-view-react-when-ro'))).toBeNotVisible(); await element(by.id('room-info-edit-view-list')).swipe('down', 'fast', 0.8); }); - + it('should change room description', async() => { await element(by.id('room-info-edit-view-description')).replaceText('new description'); await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5); @@ -212,7 +210,7 @@ describe('Room info screen', () => { await waitFor(element(by.id('room-info-view'))).toExist().withTimeout(2000); await expect(element(by.label('new description').withAncestor(by.id('room-info-view-description')))).toExist(); }); - + it('should change room topic', async() => { await waitFor(element(by.id('room-info-view-edit-button'))).toExist().withTimeout(10000); await element(by.id('room-info-view-edit-button')).tap(); @@ -225,7 +223,7 @@ describe('Room info screen', () => { await waitFor(element(by.id('room-info-view'))).toExist().withTimeout(2000); await expect(element(by.label('new topic').withAncestor(by.id('room-info-view-topic')))).toExist(); }); - + it('should change room announcement', async() => { await waitFor(element(by.id('room-info-view-edit-button'))).toExist().withTimeout(10000); await element(by.id('room-info-view-edit-button')).tap(); @@ -238,7 +236,7 @@ describe('Room info screen', () => { await waitFor(element(by.id('room-info-view'))).toExist().withTimeout(2000); await expect(element(by.label('new announcement').withAncestor(by.id('room-info-view-announcement')))).toExist(); }); - + it('should change room password', async() => { await waitFor(element(by.id('room-info-view-edit-button'))).toExist().withTimeout(10000); await element(by.id('room-info-view-edit-button')).tap(); @@ -248,7 +246,7 @@ describe('Room info screen', () => { await element(by.id('room-info-edit-view-submit')).tap(); await waitForToast(); }); - + it('should change room type', async() => { await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5); await element(by.id('room-info-edit-view-t')).tap(); @@ -258,7 +256,7 @@ describe('Room info screen', () => { await element(by.id('room-info-edit-view-submit')).tap(); await waitForToast(); }); - + // it('should change room read only and allow reactions', async() => { // await sleep(1000); // await element(by.type('UIScrollView')).atIndex(1).swipe('up'); @@ -270,7 +268,7 @@ describe('Room info screen', () => { // await waitForToast(); // // TODO: test if it's possible to react // }); - + it('should archive room', async() => { await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5); await element(by.id('room-info-edit-view-archive')).tap(); diff --git a/e2e/tests/room/09-jumptomessage.spec.js b/e2e/tests/room/09-jumptomessage.spec.js index 5071e4de9..82ab06e5b 100644 --- a/e2e/tests/room/09-jumptomessage.spec.js +++ b/e2e/tests/room/09-jumptomessage.spec.js @@ -1,8 +1,7 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); -const { navigateToLogin, mockMessage, tapBack, login, sleep, searchRoom } = require('../../helpers/app'); +const { + navigateToLogin, tapBack, login, searchRoom +} = require('../../helpers/app'); async function navigateToRoom(roomName) { await searchRoom(`${ roomName }`); @@ -20,9 +19,9 @@ async function clearCache() { await waitFor(element(by.id('settings-view'))).toBeVisible().withTimeout(2000); await element(by.id('settings-view-clear-cache')).tap(); await waitFor(element(by.text('This will clear all your offline data.'))).toExist().withTimeout(2000); - await element(by.label('Clear').and(by.type('_UIAlertControllerActionView'))).tap(); + await element(by.label('Clear').and(by.type('_UIAlertControllerActionView'))).tap(); await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(5000); - await waitFor(element(by.id(`rooms-list-view-item-jumping`))).toExist().withTimeout(10000); + await waitFor(element(by.id('rooms-list-view-item-jumping'))).toExist().withTimeout(10000); } async function waitForLoading() { @@ -51,7 +50,7 @@ describe('Room', () => { await element(by.id('nav-jump-to-bottom')).tap(); await waitFor(element(by.label('Quote first message'))).toExist().withTimeout(5000); await clearCache(); - }) + }); it('should load messages on scroll', async() => { await navigateToRoom('jumping'); @@ -64,6 +63,7 @@ describe('Room', () => { await expect(element(by.label('249'))).toExist(); found = true; } catch { + // } } await clearCache(); @@ -80,7 +80,7 @@ describe('Room', () => { await expect(element(by.label('30'))).toExist(); await expect(element(by.label('31'))).toExist(); await expect(element(by.label('32'))).toExist(); - }) + }); it('should load newer and older messages', async() => { await element(by.id('room-view-messages')).atIndex(0).swipe('down', 'fast', 0.8); @@ -114,9 +114,9 @@ describe('Room', () => { const expectThreadMessages = async(message) => { await waitFor(element(by.id('room-view-title-jumping-thread'))).toExist().withTimeout(5000); await expect(element(by.label(message))).toExist(); -} +}; -describe('Threads', async() => { +describe('Threads', () => { it('should navigate to a thread from another room', async() => { await navigateToRoom('jumping'); await waitFor(element(by.label('Go to jumping-thread\'s thread')).atIndex(0)).toExist().withTimeout(5000); @@ -150,5 +150,5 @@ describe('Threads', async() => { await expectThreadMessages('to be searched'); }); - //TODO: Threads pagination -}); \ No newline at end of file + // TODO: Threads pagination +}); diff --git a/e2e/tests/team/01-createteam.spec.js b/e2e/tests/team/01-createteam.spec.js index 3c9a2260c..0fb71a7b6 100644 --- a/e2e/tests/team/01-createteam.spec.js +++ b/e2e/tests/team/01-createteam.spec.js @@ -1,6 +1,3 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); const { navigateToLogin, login } = require('../../helpers/app'); @@ -13,7 +10,7 @@ describe('Create team screen', () => { await login(data.users.regular.username, data.users.regular.password); }); - describe('New Message', async() => { + describe('New Message', () => { before(async() => { await element(by.id('rooms-list-view-create-channel')).tap(); }); @@ -28,17 +25,17 @@ describe('Create team screen', () => { }); }); - describe('Select Users', async() => { + describe('Select Users', () => { it('should nav to create team', async() => { await element(by.id('selected-users-view-submit')).tap(); await waitFor(element(by.id('create-channel-view'))).toExist().withTimeout(10000); }); - }) + }); - describe('Create Team', async() => { - describe('Usage', async() => { + describe('Create Team', () => { + describe('Usage', () => { it('should get invalid team name', async() => { - await element(by.id('create-channel-name')).typeText(`${data.teams.private.name}`); + await element(by.id('create-channel-name')).typeText(`${ data.teams.private.name }`); await element(by.id('create-channel-submit')).tap(); await element(by.text('OK')).tap(); }); @@ -52,10 +49,10 @@ describe('Create team screen', () => { await waitFor(element(by.id(`room-view-title-${ teamName }`))).toExist().withTimeout(6000); await expect(element(by.id(`room-view-title-${ teamName }`))).toExist(); }); - }) + }); }); - describe('Delete Team', async() => { + describe('Delete Team', () => { it('should navigate to room info edit view', async() => { await element(by.id('room-header')).tap(); await waitFor(element(by.id('room-actions-view'))).toExist().withTimeout(5000); diff --git a/e2e/tests/team/02-team.spec.js b/e2e/tests/team/02-team.spec.js index f9b819595..c8451cc45 100644 --- a/e2e/tests/team/02-team.spec.js +++ b/e2e/tests/team/02-team.spec.js @@ -1,8 +1,7 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); -const { navigateToLogin, login, tapBack, sleep, searchRoom } = require('../../helpers/app'); +const { + navigateToLogin, login, tapBack, sleep, searchRoom +} = require('../../helpers/app'); async function navigateToRoom(roomName) { await searchRoom(`${ roomName }`); @@ -29,7 +28,7 @@ async function backToActions() { await waitFor(element(by.id('room-actions-view'))).toExist().withTimeout(2000); } async function closeActionSheet() { - await element(by.id('action-sheet-handle')).swipe('down', 'fast', 0.6); + await element(by.id('action-sheet-handle')).swipe('down', 'fast', 0.6); } async function waitForToast() { @@ -49,13 +48,13 @@ describe('Team', () => { await navigateToRoom(team); }); - describe('Team Room', async() => { - describe('Team Header', async() => { + describe('Team Room', () => { + describe('Team Header', () => { it('should have actions button ', async() => { await expect(element(by.id('room-header'))).toExist(); }); - - it('should have team channels button ', async() => { + + it('should have team channels button ', async() => { await expect(element(by.id('room-view-header-team-channels'))).toExist(); }); @@ -69,19 +68,19 @@ describe('Team', () => { }); }); - describe('Team Header Usage', async() => { + describe('Team Header Usage', () => { it('should navigate to team channels view', async() => { await element(by.id('room-view-header-team-channels')).tap(); await waitFor(element(by.id('team-channels-view'))).toExist().withTimeout(5000); }); - }) + }); - describe('Team Channels Header', async() => { + describe('Team Channels Header', () => { it('should have actions button ', async() => { await expect(element(by.id('room-header'))).toExist(); }); - - it('should have team channels button ', async() => { + + it('should have team channels button ', async() => { await expect(element(by.id('team-channels-view-create'))).toExist(); }); @@ -90,10 +89,10 @@ describe('Team', () => { }); }); - describe('Team Channels Header Usage', async() => { + describe('Team Channels Header Usage', () => { it('should navigate to add team channels view', async() => { await element(by.id('team-channels-view-create')).tap(); - await waitFor(element(by.id('add-channel-team-view'))).toExist().withTimeout(5000); + await waitFor(element(by.id('add-channel-team-view'))).toExist().withTimeout(5000); }); it('should have create new button', async() => { @@ -103,11 +102,10 @@ describe('Team', () => { it('should add existing button', async() => { await waitFor(element(by.id('add-channel-team-view-add-existing'))).toExist().withTimeout(5000); }); - }) + }); - describe('Channels', async() => { + describe('Channels', () => { it('should create new channel for team', async() => { - await element(by.id('add-channel-team-view-create-channel')).tap(); await element(by.id('select-users-view-search')).replaceText('rocket.cat'); @@ -138,12 +136,11 @@ describe('Team', () => { }); it('should add existing channel to team', async() => { - await element(by.id('team-channels-view-create')).tap(); await waitFor(element(by.id('add-channel-team-view'))).toExist().withTimeout(5000); await element(by.id('add-channel-team-view-add-existing')).tap(); - await waitFor(element(by.id('add-existing-channel-view'))).toExist().withTimeout(60000) + await waitFor(element(by.id('add-existing-channel-view'))).toExist().withTimeout(60000); await expect(element(by.id(`add-existing-channel-view-item-${ existingRoom }`))).toExist(); await element(by.id(`add-existing-channel-view-item-${ existingRoom }`)).tap(); await waitFor(element(by.id('add-existing-channel-view-submit'))).toExist().withTimeout(6000); @@ -174,14 +171,14 @@ describe('Team', () => { await waitFor(element(by.id('auto-join-tag'))).toBeNotVisible().withTimeout(5000); await waitFor(element(by.id(`rooms-list-view-item-${ existingRoom }`))).toExist().withTimeout(6000); }); - }) + }); - describe('Team actions', () => { + describe('Team actions', () => { before(async() => { await tapBack(); await navigateToRoomActions(); }); - + it('should add users to the team', async() => { await waitFor(element(by.id('room-actions-add-user'))).toExist().withTimeout(10000); await element(by.id('room-actions-add-user')).tap(); @@ -214,9 +211,9 @@ describe('Team', () => { await element(by.id('room-actions-leave-channel')).tap(); await waitFor(element(by.id('select-list-view'))).toExist().withTimeout(2000); - await waitFor(element(by.id(`select-list-view-item-${room}`))).toExist().withTimeout(2000); - await waitFor(element(by.id(`select-list-view-item-${existingRoom}`))).toExist().withTimeout(2000); - await element(by.id(`select-list-view-item-${room}`)).tap(); + await waitFor(element(by.id(`select-list-view-item-${ room }`))).toExist().withTimeout(2000); + await waitFor(element(by.id(`select-list-view-item-${ existingRoom }`))).toExist().withTimeout(2000); + await element(by.id(`select-list-view-item-${ room }`)).tap(); await waitFor(element(by.label('You are the last owner of this channel. Once you leave the team, the channel will be kept inside the team but you will be managing it from outside.'))).toExist().withTimeout(2000); await element(by.text('OK')).tap(); @@ -227,8 +224,8 @@ describe('Team', () => { await tapBack(); await waitFor(element(by.id('room-actions-view'))).toExist().withTimeout(2000); }); - - describe('Room Members', async() => { + + describe('Room Members', () => { before(async() => { await element(by.id('room-actions-members')).tap(); await waitFor(element(by.id('room-members-view'))).toExist().withTimeout(2000); @@ -278,9 +275,9 @@ describe('Team', () => { await element(by.id('room-actions-leave-channel')).tap(); await waitFor(element(by.id('select-list-view'))).toExist().withTimeout(2000); - await waitFor(element(by.id(`select-list-view-item-${room}`))).toExist().withTimeout(2000); - await waitFor(element(by.id(`select-list-view-item-${existingRoom}`))).toExist().withTimeout(2000); - await element(by.id(`select-list-view-item-${room}`)).tap(); + await waitFor(element(by.id(`select-list-view-item-${ room }`))).toExist().withTimeout(2000); + await waitFor(element(by.id(`select-list-view-item-${ existingRoom }`))).toExist().withTimeout(2000); + await element(by.id(`select-list-view-item-${ room }`)).tap(); await waitFor(element(by.label('You are the last owner of this channel. Once you leave the team, the channel will be kept inside the team but you will be managing it from outside.'))).toExist().withTimeout(2000); await element(by.text('OK')).tap(); @@ -291,4 +288,4 @@ describe('Team', () => { }); }); }); -}); \ No newline at end of file +}); diff --git a/e2e/tests/team/03-moveconvert.spec.js b/e2e/tests/team/03-moveconvert.spec.js index 17143c609..7c071442b 100644 --- a/e2e/tests/team/03-moveconvert.spec.js +++ b/e2e/tests/team/03-moveconvert.spec.js @@ -1,8 +1,7 @@ -const { - device, expect, element, by, waitFor -} = require('detox'); const data = require('../../data'); -const { navigateToLogin, login, tapBack, searchRoom, sleep } = require('../../helpers/app'); +const { + navigateToLogin, login, tapBack, searchRoom, sleep +} = require('../../helpers/app'); const toBeConverted = `to-be-converted-${ data.random }`; const toBeMoved = `to-be-moved-${ data.random }`; @@ -21,7 +20,7 @@ const createChannel = async(room) => { await tapBack(); await waitFor(element(by.id('rooms-list-view'))).toExist().withTimeout(2000); await waitFor(element(by.id(`rooms-list-view-item-${ room }`))).toExist().withTimeout(60000); -} +}; async function navigateToRoom(room) { await searchRoom(`${ room }`); @@ -42,7 +41,7 @@ describe('Move/Convert Team', () => { await login(data.users.regular.username, data.users.regular.password); }); - describe('Convert', async() => { + describe('Convert', () => { before(async() => { await createChannel(toBeConverted); }); @@ -61,10 +60,10 @@ describe('Move/Convert Team', () => { after(async() => { await tapBack(); await waitFor(element(by.id('rooms-list-view'))).toExist().withTimeout(2000); - }) + }); }); - describe('Move', async() => { + describe('Move', () => { before(async() => { await createChannel(toBeMoved); }); @@ -78,12 +77,12 @@ describe('Move/Convert Team', () => { await element(by.id('select-list-view-submit')).tap(); await sleep(2000); await waitFor(element(by.id('select-list-view'))).toExist().withTimeout(2000); - await waitFor(element(by.id(`select-list-view-item-${toBeConverted}`))).toExist().withTimeout(2000); - await element(by.id(`select-list-view-item-${toBeConverted}`)).tap(); + await waitFor(element(by.id(`select-list-view-item-${ toBeConverted }`))).toExist().withTimeout(2000); + await element(by.id(`select-list-view-item-${ toBeConverted }`)).tap(); await element(by.id('select-list-view-submit')).atIndex(0).tap(); await waitFor(element(by.label('After reading the previous intructions about this behavior, do you still want to move this channel to the selected team?'))).toExist().withTimeout(2000); await element(by.text('Yes, move it!')).tap(); await waitFor(element(by.id('room-view-header-team-channels'))).toExist().withTimeout(10000); }); - }) + }); });