From e1a7f435523c7a29528e4c822f934cd7da0cd6ed Mon Sep 17 00:00:00 2001 From: Gung Wah <41157464+kresnaputra@users.noreply.github.com> Date: Thu, 18 Mar 2021 22:36:50 +0800 Subject: [PATCH] [TESTS] Add E2E tests to discussions (#2970) * [E2E TEST] Discussions * fix error Cannot find UI elemen * Fix tests Co-authored-by: Diego Mello --- app/containers/UIKit/MultiSelect/Items.js | 36 +++-- app/containers/UIKit/MultiSelect/index.js | 1 + app/presentation/RoomItem/index.js | 3 +- app/views/CreateDiscussionView/index.js | 1 + app/views/RoomsListView/index.js | 1 - e2e/tests/room/04-discussion.spec.js | 139 ++++++++++++++++++ ...4-roominfo.spec.js => 05-roominfo.spec.js} | 0 7 files changed, 162 insertions(+), 19 deletions(-) create mode 100644 e2e/tests/room/04-discussion.spec.js rename e2e/tests/room/{04-roominfo.spec.js => 05-roominfo.spec.js} (100%) diff --git a/app/containers/UIKit/MultiSelect/Items.js b/app/containers/UIKit/MultiSelect/Items.js index c1619e2e2..c2f784d03 100644 --- a/app/containers/UIKit/MultiSelect/Items.js +++ b/app/containers/UIKit/MultiSelect/Items.js @@ -16,22 +16,26 @@ const keyExtractor = item => item.value.toString(); // RectButton doesn't work on modal (Android) const Item = ({ item, selected, onSelect, theme -}) => ( - onSelect(item)} - style={[ - styles.item, - { backgroundColor: themes[theme].backgroundColor } - ]} - > - <> - {item.imageUrl ? : null} - {textParser([item.text])} - {selected ? : null} - - -); +}) => { + const itemName = item.value.name || item.text.text.toLowerCase(); + return ( + onSelect(item)} + style={[ + styles.item, + { backgroundColor: themes[theme].backgroundColor } + ]} + > + <> + {item.imageUrl ? : null} + {textParser([item.text])} + {selected ? : null} + + + ); +}; Item.propTypes = { item: PropTypes.object, selected: PropTypes.number, diff --git a/app/containers/UIKit/MultiSelect/index.js b/app/containers/UIKit/MultiSelect/index.js index 246a44ec0..0d366b6d7 100644 --- a/app/containers/UIKit/MultiSelect/index.js +++ b/app/containers/UIKit/MultiSelect/index.js @@ -112,6 +112,7 @@ export const MultiSelect = React.memo(({ { + await searchRoom(channel); + await waitFor(element(by.id(`rooms-list-view-item-${ channel }`))).toExist().withTimeout(60000); + 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) + }); + + it('should create discussion from NewMessageView', async() => { + 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')).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-discussion-name')).replaceText(discussionName); + 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); + await tapBack(); + await waitFor(element(by.id(`rooms-list-view-item-${ discussionName }`))).toExist().withTimeout(5000); + }); + + it('should create discussion from action button', async() => { + 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')).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 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() => { + it('should send a message', async() => { + await waitFor(element(by.id('messagebox'))).toBeVisible().withTimeout(60000); + await mockMessage('message'); + }); + + it('should create discussion', async() => { + 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 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() => { + it('should navigete to RoomActionsView', async() => { + await waitFor(element(by.id('room-view-header-actions'))).toBeVisible().withTimeout(5000); + await element(by.id('room-view-header-actions')).tap(); + await waitFor(element(by.id('room-actions-view'))).toBeVisible().withTimeout(5000); + }); + + it('should have room actions screen', async() => { + await expect(element(by.id('room-actions-view'))).toBeVisible(); + }); + + it('should have info', async() => { + await expect(element(by.id('room-actions-info'))).toBeVisible(); + }); + + it('should have members', async() => { + await expect(element(by.id('room-actions-members'))).toBeVisible(); + }); + + it('should have files', async() => { + await expect(element(by.id('room-actions-files'))).toBeVisible(); + }); + + it('should have mentions', async() => { + await expect(element(by.id('room-actions-mentioned'))).toBeVisible(); + }); + + it('should have starred', async() => { + await expect(element(by.id('room-actions-starred'))).toBeVisible(); + }); + + it('should have search', async() => { + await expect(element(by.id('room-actions-search'))).toBeVisible(); + }); + + it('should have share', async() => { + await element(by.type('UIScrollView')).atIndex(1).swipe('up'); + await expect(element(by.id('room-actions-share'))).toBeVisible(); + }); + + it('should have pinned', async() => { + await expect(element(by.id('room-actions-pinned'))).toBeVisible(); + }); + + it('should not have notifications', async() => { + await expect(element(by.id('room-actions-notifications'))).toBeVisible(); + }); + + it('should not have leave channel', async() => { + await expect(element(by.id('room-actions-leave-channel'))).toBeVisible(); + }); + + it('should navigate to RoomActionView', async() => { + await element(by.type('UIScrollView')).atIndex(1).swipe('down'); + await expect(element(by.id('room-actions-info'))).toBeVisible(); + await element(by.id('room-actions-info')).tap(); + await waitFor(element(by.id('room-info-view'))).toExist().withTimeout(60000); + await expect(element(by.id('room-info-view'))).toExist(); + }); + + it('should not have edit button', async() => { + await expect(element(by.id('room-info-view-edit-button'))).toBeNotVisible(); + }); + }); +}); diff --git a/e2e/tests/room/04-roominfo.spec.js b/e2e/tests/room/05-roominfo.spec.js similarity index 100% rename from e2e/tests/room/04-roominfo.spec.js rename to e2e/tests/room/05-roominfo.spec.js