Files
mattermost-mobile/detox/e2e/support/ui/screen/account.ts

101 lines
4.3 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {
Alert,
ProfilePicture,
} from '@support/ui/component';
import {HomeScreen} from '@support/ui/screen';
import {timeouts} from '@support/utils';
import {expect} from 'detox';
class AccountScreen {
testID = {
userInfoPrefix: 'account.user_info.',
customStatusPrefix: 'account.custom_status.',
accountScreen: 'account.screen',
userPresenceOption: 'account.user_presence.option',
setStatusOption: 'account.custom_status.option',
yourProfileOption: 'account.your_profile.option',
settingsOption: 'account.settings.option',
logoutOption: 'account.logout.option',
onlineUserStatusOption: 'user_status.online.option',
awayUserStatusOption: 'user_status.away.option',
dndUserStatusOption: 'user_status.dnd.option',
offlineUserStatusOption: 'user_status.offline.option',
customStatusFailureMessage: 'account.custom_status.failure_message',
customStatusClearButton: 'account.custom_status.clear.button',
};
accountScreen = element(by.id(this.testID.accountScreen));
userPresenceOption = element(by.id(this.testID.userPresenceOption));
setStatusOption = element(by.id(this.testID.setStatusOption));
yourProfileOption = element(by.id(this.testID.yourProfileOption));
settingsOption = element(by.id(this.testID.settingsOption));
logoutOption = element(by.id(this.testID.logoutOption));
onlineUserStatusOption = element(by.id(this.testID.onlineUserStatusOption));
awayUserStatusOption = element(by.id(this.testID.awayUserStatusOption));
dndUserStatusOption = element(by.id(this.testID.dndUserStatusOption));
offlineUserStatusOption = element(by.id(this.testID.offlineUserStatusOption));
customStatusFailureMessage = element(by.id(this.testID.customStatusFailureMessage));
customStatusClearButton = element(by.id(this.testID.customStatusClearButton));
getUserInfo = (userId: string) => {
const userInfoTestId = `${this.testID.userInfoPrefix}${userId}`;
const userInfoProfilePictureMatcher = ProfilePicture.getProfilePictureItemMatcher(this.testID.userInfoPrefix, userId);
const userInfoUserDisplayNameMatcher = by.id(`${userInfoTestId}.display_name`);
const userInfoUsernameMatcher = by.id(`${userInfoTestId}.username`);
return {
userInfoProfilePicture: element(userInfoProfilePictureMatcher),
userInfoUserDisplayName: element(userInfoUserDisplayNameMatcher),
userInfoUsername: element(userInfoUsernameMatcher),
};
};
getUserPresenceIndicator = (status: string) => {
return element(by.id(`user_status.indicator.${status}`)).atIndex(0);
};
getUserPresenceLabel = (status: string) => {
return element(by.id(`user_status.label.${status}`)).atIndex(0);
};
getCustomStatus = (emojiName: string, duration: string) => {
const accountCustomStatusEmojiMatcher = by.id(`${this.testID.customStatusPrefix}custom_status_emoji.${emojiName}`);
const accountCustomStatusTextMatcher = by.id(`${this.testID.customStatusPrefix}custom_status_text`);
const accountCustomStatusExpiryMatcher = by.id(`${this.testID.customStatusPrefix}custom_status_duration.${duration}.custom_status_expiry`);
return {
accountCustomStatusEmoji: element(accountCustomStatusEmojiMatcher),
accountCustomStatusText: element(accountCustomStatusTextMatcher),
accountCustomStatusExpiry: element(accountCustomStatusExpiryMatcher),
};
};
toBeVisible = async () => {
await waitFor(this.accountScreen).toExist().withTimeout(timeouts.TEN_SEC);
return this.accountScreen;
};
open = async () => {
// # Open account screen
await HomeScreen.accountTab.tap();
return this.toBeVisible();
};
logout = async (serverDisplayName: string | null = null) => {
await this.logoutOption.tap();
if (serverDisplayName) {
await expect(Alert.logoutTitle(serverDisplayName)).toBeVisible();
}
await Alert.logoutButton.tap();
await expect(this.accountScreen).not.toBeVisible();
};
}
const accountScreen = new AccountScreen();
export default accountScreen;