mattermost-mobile/detox/e2e/support/ui/screen/more_channels.js

99 lines
3.8 KiB
JavaScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {
BottomSheet,
MainSidebar,
SearchBar,
} from '@support/ui/component';
class MoreChannelsScreen {
testID = {
moreChannelsScreenPrefix: 'more_channels.',
moreChannelsScreen: 'more_channels.screen',
closeMoreChannelsButton: 'close.more_channels.button',
createButton: 'more_channels.create.button',
channelDropdown: 'more_channels.channel.dropdown',
channelDropdownArchived: 'more_channels.channel.dropdown.archived',
channelDropdownPublic: 'more_channels.channel.dropdown.public',
channelsList: 'more_channels.custom_list',
channelItem: 'more_channels.custom_list.channel_item',
channelItemDisplayName: 'more_channels.custom_list.channel_item.display_name',
}
moreChannelsScreen = element(by.id(this.testID.moreChannelsScreen));
closeMoreChannelsButton = element(by.id(this.testID.closeMoreChannelsButton));
createButton = element(by.id(this.testID.createButton));
channelDropdown = element(by.id(this.testID.channelDropdown));
channelDropdownArchived = element(by.id(this.testID.channelDropdownArchived));
channelDropdownPublic = element(by.id(this.testID.channelDropdownPublic));
channelsList = element(by.id(this.testID.channelsList));
// convenience props
searchBar = SearchBar.getSearchBar(this.testID.moreChannelsScreenPrefix);
searchInput = SearchBar.getSearchInput(this.testID.moreChannelsScreenPrefix);
cancelButton = SearchBar.getCancelButton(this.testID.moreChannelsScreenPrefix);
clearButton = SearchBar.getClearButton(this.testID.moreChannelsScreenPrefix);
archivedChannelsOption = BottomSheet.archivedChannelsOption;
cancelOption = BottomSheet.cancelOption;
publicChannelsOption = BottomSheet.publicChannelsOption;
getChannel = (channelId, displayName) => {
const channelItemTestID = `${this.testID.channelItem}.${channelId}`;
const baseMatcher = by.id(channelItemTestID);
const channelItemMatcher = displayName ? baseMatcher.withDescendant(by.text(displayName)) : baseMatcher;
const channelItemDisplayNameMatcher = by.id(this.testID.channelItemDisplayName).withAncestor(channelItemMatcher);
return {
channelItem: element(channelItemMatcher),
channelItemDisplayName: element(channelItemDisplayNameMatcher),
};
}
getChannelByDisplayName = (displayName) => {
return element(by.text(displayName).withAncestor(by.id(this.testID.channelsList)));
}
getChannelDisplayNameAtIndex = (index) => {
return element(by.id(this.testID.channelItemDisplayName)).atIndex(index);
}
toBeVisible = async () => {
await expect(this.moreChannelsScreen).toBeVisible();
return this.moreChannelsScreen;
}
open = async () => {
// # Open more channels screen
await MainSidebar.openMoreChannelsButton.tap();
return this.toBeVisible();
}
close = async () => {
await this.closeMoreChannelsButton.tap();
await expect(this.moreChannelsScreen).not.toBeVisible();
}
showArchivedChannels = async () => {
await this.channelDropdown.tap();
await this.archivedChannelsOption.tap();
await expect(this.channelDropdownArchived).toBeVisible();
}
showPublicChannels = async () => {
await this.channelDropdown.tap();
await this.publicChannelsOption.tap();
await expect(this.channelDropdownPublic).toBeVisible();
}
hasChannelDisplayNameAtIndex = async (index, channelDisplayName) => {
await expect(
this.getChannelDisplayNameAtIndex(index),
).toHaveText(channelDisplayName);
}
}
const moreChannelsScreen = new MoreChannelsScreen();
export default moreChannelsScreen;