mattermost-mobile/detox/e2e/support/ui/screen/create_direct_message.ts
yasser khan 3cbde1663d
E2E feature schedule posts (#8709)
- Fix iOS and Android CI.
- Fixes E2E tests on both platform
- Added tests for scheduled draft feature.
2025-04-23 12:10:37 +05:30

108 lines
4.4 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {ProfilePicture} from '@support/ui/component';
import {ChannelListScreen} from '@support/ui/screen';
import {isIos, timeouts, wait} from '@support/utils';
import {expect} from 'detox';
class CreateDirectMessageScreen {
testID = {
selectedDMUserPrefix: 'create_direct_message.',
selectedUserPrefix: 'create_direct_message.selected_user.',
userItemPrefix: 'create_direct_message.user_list.user_item.',
createDirectMessageScreen: 'create_direct_message.screen',
closeButton: 'close.create_direct_message.button',
startButton: 'create_direct_message.start.button',
searchInput: 'create_direct_message.search_bar.search.input',
searchClearButton: 'create_direct_message.search_bar.search.clear.button',
searchCancelButton: 'create_direct_message.search_bar.search.cancel.button',
flatUserList: 'create_direct_message.user_list.flat_list',
sectionUserList: 'create_direct_message.user_list.section_list',
tutorialHighlight: 'tutorial_highlight',
tutorialSwipeLeft: 'tutorial_swipe_left',
scheduledPostTooltipCloseButton: 'scheduled_post.tooltip.close.button',
};
scheduledPostTooltipCloseButton = element(by.id(this.testID.scheduledPostTooltipCloseButton));
createDirectMessageScreen = element(by.id(this.testID.createDirectMessageScreen));
closeButton = element(by.id(this.testID.closeButton));
startButton = element(by.id(this.testID.startButton));
searchInput = element(by.id(this.testID.searchInput));
searchClearButton = element(by.id(this.testID.searchClearButton));
searchCancelButton = element(by.id(this.testID.searchCancelButton));
flatUserList = element(by.id(this.testID.flatUserList));
sectionUserList = element(by.id(this.testID.sectionUserList));
tutorialHighlight = element(by.id(this.testID.tutorialHighlight));
tutorialSwipeLeft = element(by.id(this.testID.tutorialSwipeLeft));
getSelectedUser = (userId: string) => {
return element(by.id(`${this.testID.selectedUserPrefix}${userId}`));
};
getSelectedUserDisplayName = (userId: string) => {
return element(by.id(`${this.testID.selectedUserPrefix}${userId}.display_name`));
};
getSelectedDMUserDisplayName = (userId: string) => {
return element(by.id(`${this.testID.selectedDMUserPrefix}${userId}.display_name`));
};
getSelectedUserRemoveButton = (userId: string) => {
return element(by.id(`${this.testID.selectedUserPrefix}${userId}.remove.button`));
};
getUserItem = (userId: string) => {
return element(by.id(`${this.testID.userItemPrefix}${userId}.${userId}`));
};
getUserItemProfilePicture = (userId: string) => {
return element(ProfilePicture.getProfilePictureItemMatcher(this.testID.userItemPrefix, userId));
};
getUserItemDisplayName = (userId: string) => {
return element(by.id(`${this.testID.userItemPrefix}${userId}.${userId}.display_name`));
};
toBeVisible = async () => {
if (isIos()) {
await waitFor(this.createDirectMessageScreen).toExist().withTimeout(timeouts.TEN_SEC);
}
return this.createDirectMessageScreen;
};
open = async () => {
// # Open create direct message screen
await ChannelListScreen.headerPlusButton.tap();
await wait(timeouts.ONE_SEC);
await ChannelListScreen.openDirectMessageItem.tap();
await wait(timeouts.TEN_SEC);
return this.toBeVisible();
};
close = async () => {
await this.closeButton.tap();
await expect(this.createDirectMessageScreen).not.toBeVisible();
};
closeTutorial = async () => {
try {
if (isIos()) {
await waitFor(this.tutorialHighlight).toExist().withTimeout(timeouts.HALF_MIN);
await this.tutorialSwipeLeft.tap();
await expect(this.tutorialHighlight).not.toExist();
} else {
await wait(timeouts.ONE_SEC);
await device.pressBack();
await wait(timeouts.ONE_SEC);
}
} catch {
// eslint-disable-next-line no-console
console.log('Tutorial element not visible, skipping action:');
}
};
}
const createDirectMessageScreen = new CreateDirectMessageScreen();
export default createDirectMessageScreen;