platform dependent component types

This commit is contained in:
Anant Bhasin 2021-06-04 16:38:12 +05:30
parent af1de5711b
commit ec22d9446a
7 changed files with 45 additions and 19 deletions

View File

@ -2,6 +2,7 @@ const {
device, expect, element, by, waitFor
} = require('detox');
const data = require('../data');
const platformTypes = require('./platformTypes');
async function navigateToWorkspace(server = data.server) {
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(10000);
@ -36,12 +37,14 @@ async function login(username, password) {
}
async function logout() {
const deviceType = device.getPlatform();
const scrollViewType = platformTypes[deviceType].scrollViewType;
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('android.widget.ScrollView')).atIndex(1).scrollTo('bottom');
await element(by.type(scrollViewType)).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);
@ -83,8 +86,10 @@ async function pinMessage(message){
}
async function dismissReviewNag(){
const deviceType = device.getPlatform();
const alertButtonType = platformTypes[deviceType].alertButtonType;
await waitFor(element(by.text('Are you enjoying this app?'))).toExist().withTimeout(60000);
await element(by.text('No').and(by.type('android.widget.Button'))).tap(); // Tap `no` on ask for review alert
await element(by.text('No').and(by.type(alertButtonType))).tap(); // Tap `no` on ask for review alert
}
async function tapBack() {

View File

@ -1,11 +1,11 @@
const { device } = require('detox');
export default device.getPlatform() === 'android' ? {
exports.android = {
//Android types
alertButtonType: 'android.widget.Button',
scrollViewType: 'android.widget.ScrollView',
textInputType: 'android.widget.EditText',
} : {
};
exports.ios = {
//iOS types
alertButtonType: '_UIAlertControllerActionView',
scrollViewType: 'UIScrollView',

View File

@ -3,6 +3,8 @@ const {
} = require('detox');
const { navigateToLogin, login, sleep, tapBack, mockMessage, searchRoom, logout } = require('../../helpers/app');
const platformTypes = require('../../helpers/platformTypes');
const data = require('../../data');
const testuser = data.users.regular
@ -44,9 +46,13 @@ async function navigateSecurityPrivacy() {
describe('E2E Encryption', () => {
const room = `encrypted${ data.random }`;
const newPassword = 'abc';
let alertButtonType, scrollViewType;
before(async () => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
const deviceType = device.getPlatform();
alertButtonType = platformTypes[deviceType].alertButtonType;
scrollViewType = platformTypes[deviceType].scrollViewType;
await navigateToLogin();
await login(testuser.username, testuser.password);
});
@ -141,7 +147,7 @@ describe('E2E Encryption', () => {
await element(by.id('e2e-encryption-security-view-change-password')).tap();
await waitFor(element(by.text('Are you sure?'))).toExist().withTimeout(2000);
await expect(element(by.text('Make sure you\'ve saved it carefully somewhere else.'))).toExist();
await element(by.text('Yes, change it').and(by.type('android.widget.Button'))).tap();
await element(by.text('Yes, change it').and(by.type(alertButtonType))).tap();
await waitForToast();
});
@ -194,10 +200,10 @@ describe('E2E Encryption', () => {
await element(by.id('e2e-encryption-security-view-reset-key').and(by.label('Reset E2E Key'))).tap();
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.text('Yes, reset it').and(by.type('android.widget.Button'))).tap();
await element(by.text('Yes, reset it').and(by.type(alertButtonType))).tap();
await sleep(2000)
await waitFor(element(by.text('OK').and(by.type('android.widget.Button')))).toExist().withTimeout(2000);
await element(by.text('OK').and(by.type('android.widget.Button'))).tap();
await waitFor(element(by.text('OK').and(by.type(alertButtonType)))).toExist().withTimeout(2000);
await element(by.text('OK').and(by.type(alertButtonType))).tap();
await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(10000);
await element(by.id('workspace-view-login')).tap();
await waitFor(element(by.id('login-view'))).toBeVisible().withTimeout(2000);
@ -231,7 +237,7 @@ describe('E2E Encryption', () => {
await element(by.id('register-view-username')).replaceText(data.registeringUser.username);
await element(by.id('register-view-email')).replaceText(data.registeringUser.email);
await element(by.id('register-view-password')).typeText(data.registeringUser.password);
element(by.type('android.widget.ScrollView')).atIndex(1).scrollTo('bottom');
element(by.type(scrollViewType)).atIndex(1).scrollTo('bottom');
await element(by.id('register-view-submit')).tap();
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(60000);

View File

@ -17,8 +17,13 @@ async function waitForToast() {
}
describe('Profile screen', () => {
let textInputType, scrollViewType;
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
const deviceType = device.getPlatform();
textInputType = platformTypes[deviceType].textInputType;
scrollViewType = platformTypes[deviceType].scrollViewType;
await navigateToLogin();
await login(profileChangeUser.username, profileChangeUser.password);
await element(by.id('rooms-list-view-sidebar')).tap();
@ -79,7 +84,7 @@ describe('Profile screen', () => {
await element(by.id('profile-view-name')).replaceText(`${ profileChangeUser.username }new`);
await element(by.id('profile-view-username')).typeText(`${ profileChangeUser.username }new`);
await device.pressBack();
await element(by.type('android.widget.ScrollView')).atIndex(1).swipe('up');
await element(by.type(scrollViewType)).atIndex(1).swipe('up');
await element(by.id('profile-view-submit')).tap();
await waitForToast();
});
@ -88,13 +93,13 @@ 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('android.widget.EditText')).typeText(`${ profileChangeUser.password }\n`);
await element(by.type(textInputType)).typeText(`${ profileChangeUser.password }\n`);
await element(by.text('SAVE')).tap();
await waitForToast();
});
it('should reset avatar', async() => {
await element(by.type('android.widget.ScrollView')).atIndex(1).swipe('up');
await element(by.type(scrollViewType)).atIndex(1).swipe('up');
await element(by.id('profile-view-reset-avatar')).tap();
await waitForToast();
});

View File

@ -8,8 +8,11 @@ const data = require('../../data');
const testuser = data.users.regular
describe('Settings screen', () => {
let alertButtonType;
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
const deviceType = device.getPlatform();
alertButtonType = platformTypes[deviceType].alertButtonType;
await navigateToLogin();
await login(testuser.username, testuser.password);
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000);
@ -67,7 +70,7 @@ describe('Settings screen', () => {
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.text('Clear').and(by.type('android.widget.Button'))).tap();
await element(by.text('Clear').and(by.type(alertButtonType))).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);
})

View File

@ -19,8 +19,11 @@ async function navigateToRoomActions() {
}
describe('Join public room', () => {
let scrollViewType;
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
const deviceType = device.getPlatform();
scrollViewType = platformTypes[deviceType].scrollViewType;
await navigateToLogin();
await login(testuser.username, testuser.password);
await navigateToRoom();
@ -151,11 +154,11 @@ describe('Join public room', () => {
await expect(element(by.id('room-actions-mentioned'))).toBeVisible();
await expect(element(by.id('room-actions-starred'))).toBeVisible();
// await expect(element(by.id('room-actions-search'))).toBeVisible();
await element(by.type('android.widget.ScrollView')).atIndex(1).swipe('down');
await element(by.type(scrollViewType)).atIndex(1).swipe('down');
await expect(element(by.id('room-actions-share'))).toBeVisible();
await expect(element(by.id('room-actions-pinned'))).toBeVisible();
await expect(element(by.id('room-actions-notifications'))).toBeVisible();
await element(by.type('android.widget.ScrollView')).atIndex(0).swipe('up');
await element(by.type(scrollViewType)).atIndex(0).swipe('up');
await expect(element(by.id('room-actions-leave-channel'))).toBeVisible();
});

View File

@ -5,8 +5,12 @@ const data = require('../../data');
const { sleep, navigateToLogin, login, checkServer } = require('../../helpers/app');
describe('Delete server', () => {
let scrollViewType, alertButtonType;
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
const deviceType = device.getPlatform();
alertButtonType = platformTypes[deviceType].alertButtonType;
scrollViewType = platformTypes[deviceType].scrollViewType;
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password);
});
@ -32,7 +36,7 @@ describe('Delete server', () => {
await element(by.id('register-view-username')).replaceText(data.registeringUser3.username);
await element(by.id('register-view-email')).replaceText(data.registeringUser3.email);
await element(by.id('register-view-password')).typeText(data.registeringUser3.password);
await element(by.type('android.widget.ScrollView')).atIndex(0).swipe('up');
await element(by.type(scrollViewType)).atIndex(0).swipe('up');
await element(by.id('register-view-submit')).tap();
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(60000);
@ -43,7 +47,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.text('Delete').and(by.type('android.widget.Button'))).tap();
await element(by.text('Delete').and(by.type(alertButtonType))).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);