// const OTP = require('otp.js'); // const GA = OTP.googleAuthenticator; import { expect } from 'detox'; import { navigateToLogin, login, mockMessage, tapBack, searchRoom, platformTypes, TTextMatcher, sleep } from '../../helpers/app'; import data from '../../data'; const testuser = data.users.regular; const otheruser = data.users.alternate; describe('Broadcast room', () => { let textMatcher: TTextMatcher; before(async () => { await device.launchApp({ permissions: { notifications: 'YES' }, delete: true }); ({ textMatcher } = platformTypes[device.getPlatform()]); await navigateToLogin(); await login(testuser.username, testuser.password); }); it('should create broadcast room', async () => { await waitFor(element(by.id('rooms-list-view-create-channel'))) .toExist() .withTimeout(2000); await element(by.id('rooms-list-view-create-channel')).tap(); await waitFor(element(by.id('new-message-view'))) .toBeVisible() .withTimeout(2000); await element(by.id('new-message-view-create-channel')).tap(); await waitFor(element(by.id('select-users-view'))) .toBeVisible() .withTimeout(2000); await element(by.id('select-users-view-search')).replaceText(otheruser.username); await waitFor(element(by.id(`select-users-view-item-${otheruser.username}`))) .toBeVisible() .withTimeout(60000); await element(by.id(`select-users-view-item-${otheruser.username}`)).tap(); await waitFor(element(by.id(`selected-user-${otheruser.username}`))) .toBeVisible() .withTimeout(5000); 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-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); await sleep(500); await element(by.id('room-header')).tap(); await waitFor(element(by.id('room-actions-view'))) .toBeVisible() .withTimeout(5000); await element(by.id('room-actions-info')).tap(); await waitFor(element(by.id('room-info-view'))) .toBeVisible() .withTimeout(2000); await expect(element(by.label('Broadcast').withAncestor(by.id('room-info-view-broadcast')))).toBeVisible(); await tapBack(); await waitFor(element(by.id('room-actions-view'))) .toBeVisible() .withTimeout(2000); await tapBack(); await waitFor(element(by.id('room-view'))) .toBeVisible() .withTimeout(2000); }); it('should send message', async () => { await waitFor(element(by.id('room-view'))) .toBeVisible() .withTimeout(5000); await mockMessage('message'); await tapBack(); }); it('should login as user without write message authorization and enter room', async () => { await device.launchApp({ permissions: { notifications: 'YES' }, delete: true }); 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 searchRoom(`broadcast${data.random}`); await element(by.id(`rooms-list-view-item-broadcast${data.random}`)).tap(); await waitFor(element(by.id('room-view'))) .toBeVisible() .withTimeout(5000); await waitFor(element(by.id(`room-view-title-broadcast${data.random}`))) .toBeVisible() .withTimeout(60000); }); it('should not have messagebox', async () => { await expect(element(by.id('messagebox'))).toBeNotVisible(); }); it('should be read only', async () => { await expect(element(by.label('This room is read only'))).toExist(); }); it('should have the message created earlier', async () => { await waitFor(element(by[textMatcher](`${data.random}message`))) .toExist() .withTimeout(60000); }); it('should have reply button', async () => { await expect(element(by.id('message-broadcast-reply'))).toBeVisible(); }); it('should tap on reply button and navigate to direct room', async () => { await element(by.id('message-broadcast-reply')).tap(); await waitFor(element(by.id(`room-view-title-${testuser.username}`))) .toBeVisible() .withTimeout(5000); }); it('should reply broadcasted message', async () => { // Server is adding 2 spaces in front a reply message await element(by.id('messagebox-input')).replaceText(`${data.random}broadcastreply`); await sleep(300); await element(by.id('messagebox-send-message')).tap(); await waitFor(element(by[textMatcher](`${data.random}message`))) .toExist() .withTimeout(10000); await element(by[textMatcher](`${data.random}message`)).tap(); await sleep(600); await waitFor(element(by.id(`room-view-title-broadcast${data.random}`))) .toBeVisible() .withTimeout(10000); }); });