105 lines
4.5 KiB
TypeScript
105 lines
4.5 KiB
TypeScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import {
|
|
AccountScreen,
|
|
EmojiPickerScreen,
|
|
} from '@support/ui/screen';
|
|
import {timeouts, wait} from '@support/utils';
|
|
import {expect} from 'detox';
|
|
|
|
class CustomStatusScreen {
|
|
testID = {
|
|
customStatusEmojiPrefix: 'custom_status.custom_status_emoji.',
|
|
customStatusDurationPrefix: 'custom_status.clear_after.custom_status_duration.',
|
|
customStatusSuggestionPrefix: 'custom_status.custom_status_suggestion.',
|
|
customStatusScreen: 'custom_status.screen',
|
|
doneButton: 'custom_status.done.button',
|
|
scrollView: 'custom_status.scroll_view',
|
|
statusInput: 'custom_status.status.input',
|
|
statusInputClearButton: 'custom_status.status.input.clear.button',
|
|
recents: 'custom_status.recents',
|
|
suggestions: 'custom_status.suggestions',
|
|
};
|
|
|
|
customStatusScreen = element(by.id(this.testID.customStatusScreen));
|
|
doneButton = element(by.id(this.testID.doneButton));
|
|
scrollView = element(by.id(this.testID.scrollView));
|
|
statusInput = element(by.id(this.testID.statusInput));
|
|
statusInputClearButton = element(by.id(this.testID.statusInputClearButton));
|
|
recents = element(by.id(this.testID.recents));
|
|
suggestions = element(by.id(this.testID.suggestions));
|
|
|
|
getCustomStatusEmoji = (emojiName: string) => {
|
|
return element(by.id(`${this.testID.customStatusEmojiPrefix}${emojiName}`));
|
|
};
|
|
|
|
getCustomStatusClearAfterAction = (duration: string) => {
|
|
return element(by.id(`${this.testID.customStatusDurationPrefix}${duration}.action`));
|
|
};
|
|
|
|
getCustomStatusExpiry = (duration: string) => {
|
|
return element(by.id(`${this.testID.customStatusDurationPrefix}${duration}.custom_status_expiry`));
|
|
};
|
|
|
|
getCustomStatusSuggestion = (blockMatcher: Detox.NativeMatcher, emojiName: string, text: string, duration: string) => {
|
|
const customStatusSuggestionTestId = `${this.testID.customStatusSuggestionPrefix}${text}`;
|
|
const customStatusSuggestionMatcher = by.id(customStatusSuggestionTestId).withAncestor(blockMatcher);
|
|
const customStatusEmojiMatcher = by.id(`${customStatusSuggestionTestId}.custom_status_emoji.${emojiName}`).withAncestor(blockMatcher);
|
|
const customStatusTextMatcher = by.id(`${customStatusSuggestionTestId}.custom_status_text`).withAncestor(blockMatcher);
|
|
const customStatusDurationMatcher = by.id(`${customStatusSuggestionTestId}.custom_status_duration.${duration}`).withAncestor(blockMatcher);
|
|
const customStatusClearButtonMatcher = by.id(`${customStatusSuggestionTestId}.clear.button`).withAncestor(blockMatcher);
|
|
|
|
return {
|
|
customStatusSuggestion: element(customStatusSuggestionMatcher),
|
|
customStatusSuggestionEmoji: element(customStatusEmojiMatcher),
|
|
customStatusSuggestionText: element(customStatusTextMatcher),
|
|
customStatusSuggestionDuration: element(customStatusDurationMatcher),
|
|
customStatusClearButton: element(customStatusClearButtonMatcher),
|
|
};
|
|
};
|
|
|
|
getRecentCustomStatus = (emojiName: string, text: string, duration: string) => {
|
|
const recentsMatcher = by.id(this.testID.recents);
|
|
return this.getCustomStatusSuggestion(recentsMatcher, emojiName, text, duration);
|
|
};
|
|
|
|
getSuggestedCustomStatus = (emojiName: string, text: string, duration: string) => {
|
|
const suggestedMatcher = by.id(this.testID.suggestions);
|
|
return this.getCustomStatusSuggestion(suggestedMatcher, emojiName, text, duration);
|
|
};
|
|
|
|
toBeVisible = async () => {
|
|
await waitFor(this.customStatusScreen).toExist().withTimeout(timeouts.TEN_SEC);
|
|
|
|
return this.customStatusScreen;
|
|
};
|
|
|
|
open = async () => {
|
|
// # Open custom status screen
|
|
await AccountScreen.setStatusOption.tap();
|
|
|
|
return this.toBeVisible();
|
|
};
|
|
|
|
openEmojiPicker = async (emojiName: string, closeToolTip = false) => {
|
|
await this.getCustomStatusEmoji(emojiName).tap();
|
|
if (closeToolTip) {
|
|
await wait(timeouts.TWO_SEC);
|
|
try {
|
|
await EmojiPickerScreen.toolTipCloseButton.tap();
|
|
} catch (error) {
|
|
// Tool tip not shown
|
|
}
|
|
}
|
|
await EmojiPickerScreen.toBeVisible();
|
|
};
|
|
|
|
close = async () => {
|
|
await this.doneButton.tap();
|
|
await expect(this.customStatusScreen).not.toBeVisible();
|
|
};
|
|
}
|
|
|
|
const customStatusScreen = new CustomStatusScreen();
|
|
export default customStatusScreen;
|