vn-verdnaturachat/e2e/tests/room/09-jumptomessage.spec.js

227 lines
7.2 KiB
JavaScript

const data = require('../../data');
const { navigateToLogin, tapBack, login, searchRoom } = require('../../helpers/app');
async function navigateToRoom(roomName) {
await searchRoom(`${roomName}`);
await element(by.id(`rooms-list-view-item-${roomName}`)).tap();
await waitFor(element(by.id('room-view')))
.toBeVisible()
.withTimeout(5000);
}
async function clearCache() {
await waitFor(element(by.id('room-view')))
.toBeVisible()
.withTimeout(5000);
await tapBack();
await waitFor(element(by.id('rooms-list-view')))
.toBeVisible()
.withTimeout(10000);
await element(by.id('rooms-list-view-sidebar')).tap();
await waitFor(element(by.id('sidebar-view')))
.toBeVisible()
.withTimeout(2000);
await element(by.id('sidebar-settings')).tap();
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 waitFor(element(by.id('rooms-list-view')))
.toBeVisible()
.withTimeout(5000);
await waitFor(element(by.id('rooms-list-view-item-jumping')))
.toExist()
.withTimeout(10000);
}
async function waitForLoading() {
await waitFor(element(by.id('loading')))
.toBeVisible()
.withTimeout(5000);
await waitFor(element(by.id('loading')))
.toBeNotVisible()
.withTimeout(10000);
}
describe('Room', () => {
before(async () => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
await navigateToLogin();
await login(data.adminUser, data.adminPassword);
});
it('should jump to an old message and load its surroundings', async () => {
await navigateToRoom('jumping');
await waitFor(element(by.label('Quote first message')))
.toExist()
.withTimeout(5000);
await element(by.label('1')).atIndex(0).tap();
await waitForLoading();
await waitFor(element(by.label('1')).atIndex(0))
.toExist()
.withTimeout(10000);
await expect(element(by.label('2'))).toExist();
});
it('should tap FAB and scroll to bottom', async () => {
await waitFor(element(by.id('nav-jump-to-bottom')))
.toExist()
.withTimeout(5000);
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');
await waitFor(element(by.id('room-view-messages')))
.toExist()
.withTimeout(5000);
await waitFor(element(by.label('300')))
.toExist()
.withTimeout(5000);
let found = false;
while (!found) {
await element(by.id('room-view-messages')).atIndex(0).scroll(500, 'up');
try {
await expect(element(by.label('249'))).toExist();
found = true;
} catch {
//
}
}
await clearCache();
});
it('should search for old message and load its surroundings', async () => {
await navigateToRoom('jumping');
await element(by.id('room-view-search')).tap();
await waitFor(element(by.id('search-messages-view')))
.toExist()
.withTimeout(5000);
await element(by.id('search-message-view-input')).typeText('30\n');
await waitFor(element(by.label('30')).atIndex(0))
.toExist()
.withTimeout(5000);
await element(by.label('30')).atIndex(0).tap();
await waitForLoading();
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);
await waitFor(element(by.label('5')))
.toExist()
.withTimeout(10000);
await waitFor(element(by.label('Load Older')))
.toExist()
.withTimeout(5000);
await element(by.label('Load Older')).atIndex(0).tap();
await waitFor(element(by.label('4')))
.toExist()
.withTimeout(5000);
await element(by.id('room-view-messages')).atIndex(0).swipe('down', 'fast', 0.5);
await waitFor(element(by.label('1')))
.toExist()
.withTimeout(5000);
await element(by.id('room-view-messages')).atIndex(0).swipe('up', 'fast', 0.5);
await waitFor(element(by.label('25')))
.toExist()
.withTimeout(5000);
await element(by.id('room-view-messages')).atIndex(0).swipe('up', 'fast', 0.5);
await waitFor(element(by.label('50')))
.toExist()
.withTimeout(5000);
await element(by.id('room-view-messages')).atIndex(0).swipe('up', 'slow', 0.5);
await waitFor(element(by.label('Load Newer')))
.toExist()
.withTimeout(5000);
await element(by.label('Load Newer')).atIndex(0).tap();
await waitFor(element(by.label('104')))
.toExist()
.withTimeout(5000);
await waitFor(element(by.label('Load Newer')))
.toExist()
.withTimeout(5000);
await element(by.label('Load Newer')).atIndex(0).tap();
await waitFor(element(by.label('154')))
.toExist()
.withTimeout(5000);
await waitFor(element(by.label('Load Newer')))
.toExist()
.withTimeout(5000);
await element(by.label('Load Newer')).atIndex(0).tap();
await waitFor(element(by.label('Load Newer')))
.toNotExist()
.withTimeout(5000);
await expect(element(by.label('Load More'))).toNotExist();
await expect(element(by.label('201'))).toExist();
await expect(element(by.label('202'))).toExist();
await tapBack();
});
});
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', () => {
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);
await element(by.label("Go to jumping-thread's thread")).atIndex(0).tap();
await waitForLoading();
await expectThreadMessages("Go to jumping-thread's thread");
await tapBack();
});
it('should tap on thread message from main room', async () => {
await waitFor(element(by.label('thread message sent to main room')).atIndex(0))
.toExist()
.withTimeout(5000);
await element(by.label('thread message sent to main room')).atIndex(0).tap();
await expectThreadMessages('thread message sent to main room');
await tapBack();
});
it('should tap on quote', async () => {
await waitFor(element(by.label('quoted')))
.toExist()
.withTimeout(5000);
await element(by.label('quoted')).atIndex(0).tap();
await expectThreadMessages('quoted');
await tapBack();
});
it('should jump from search message', async () => {
await waitFor(element(by.id('room-view-title-jumping-thread')))
.toExist()
.withTimeout(5000);
await element(by.id('room-view-search')).atIndex(0).tap();
await waitFor(element(by.id('search-messages-view')))
.toExist()
.withTimeout(5000);
await element(by.id('search-message-view-input')).typeText('to be searched\n');
await waitFor(element(by.label('to be searched')))
.toExist()
.withTimeout(5000);
await element(by.label('to be searched')).atIndex(1).tap();
await expectThreadMessages('to be searched');
});
// TODO: Threads pagination
});