Skip to content

Commit

Permalink
Migrate @pages/BO/orders/view/messagesBlock from Core
Browse files Browse the repository at this point in the history
  • Loading branch information
Progi1984 committed Jan 23, 2025
1 parent 0e4dfe6 commit 9748434
Show file tree
Hide file tree
Showing 5 changed files with 179 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,7 @@ export {default as boOrdersPage} from '@pages/BO/orders';
export {default as boOrdersCreatePage} from '@pages/BO/orders/create';
export {default as boOrdersViewBasePage} from '@pages/BO/orders/view/viewOrderBasePage';
export {default as boOrdersViewBlockCustomersPage} from '@pages/BO/orders/view/blockCustomers';
export {default as boOrdersViewBlockMessagesPage} from '@pages/BO/orders/view/blockMessages';
export {default as boOrdersViewBlockProductsPage} from '@pages/BO/orders/view/blockProducts';
export {default as boOrdersViewBlockTabListPage} from '@pages/BO/orders/view/blockTabList';
export {default as boOrderSettingsPage} from '@pages/BO/shopParameters/orderSettings';
Expand Down
13 changes: 13 additions & 0 deletions src/interfaces/BO/orders/view/blockMessages.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import {type OrderMessage} from '@data/types/order';
import {BOViewOrderBasePageInterface} from '@interfaces/BO/orders/view/viewOrderBasePage';
import {type Page} from '@playwright/test';

export interface BOProductBlockMessagesPageInterface extends BOViewOrderBasePageInterface {
clickOnConfigureMessageLink(page: Page): Promise<void>;
getMessagesNumber(page: Page): Promise<number>;
getTextMessage(page: Page, messageID?: number, messageFrom?: string): Promise<string>;
isEmployeeIconVisible(page: Page, messageID?: number): Promise<boolean>;
isEmployeePrivateIconVisible(page: Page, messageID?: number): Promise<boolean>;
isMessageVisible(page: Page, messageID?: number, messageFrom?: string): Promise<boolean>;
sendMessage(page: Page, messageData: OrderMessage): Promise<string>;
}
1 change: 1 addition & 0 deletions src/interfaces/BO/orders/view/viewOrderBasePage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {BOBasePagePageInterface} from '@interfaces/BO';
import type {Page} from '@playwright/test';

export interface BOViewOrderBasePageInterface extends BOBasePagePageInterface {
readonly commentSuccessfullMessage: string;
readonly discountCannotExceedTotalErrorMessage: string;
readonly discountMustBeNumberErrorMessage: string;
readonly errorAddSameProduct: string;
Expand Down
9 changes: 9 additions & 0 deletions src/pages/BO/orders/view/blockMessages.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import {type BOProductBlockMessagesPageInterface} from '@interfaces/BO/orders/view/blockMessages';

/* eslint-disable global-require, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */
function requirePage(): BOProductBlockMessagesPageInterface {
return require('@versions/develop/pages/BO/orders/view/blockMessages');
}
/* eslint-enable global-require, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */

export default requirePage();
155 changes: 155 additions & 0 deletions src/versions/develop/pages/BO/orders/view/blockMessages.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
import {type OrderMessage} from '@data/types/order';
import {type BOProductBlockMessagesPageInterface} from '@interfaces/BO/orders/view/blockMessages';
import {type Page} from '@playwright/test';
import {ViewOrderBasePage} from '@versions/develop/pages/BO/orders/view/viewOrderBasePage';

/**
* Messages block, contains functions that can be used on view/edit messages block on view order page
* @class
* @extends ViewOrderBasePage
*/
class BOProductBlockMessagesPage extends ViewOrderBasePage implements BOProductBlockMessagesPageInterface {
private readonly messageBlock: string;

private readonly messageBlockTitle: string;

private readonly orderMessageSelect: string;

private readonly displayToCustometCheckbox: string;

private readonly messageTextarea: string;

private readonly sendMessageButton: string;

private readonly messageBlockList: string;

private readonly messageListChild: (messageID: number) => string;

private readonly messageBlockEmployee: (messageID: number) => string;

private readonly messageBlockCustomer: (messageID: number) => string;

private readonly messageEmployeeBlockContent: (messageID: number) => string;

private readonly messageCustomerBlockContent: (messageID: number) => string;

private readonly messageBlockIcon: (messageID: number) => string;

private readonly configureLink: string;

/**
* @constructs
* Setting up texts and selectors to use on view/edit messages block
*/
constructor() {
super();

// Messages block
this.messageBlock = 'div[data-role=\'message-card\']';
this.messageBlockTitle = `${this.messageBlock} .card-header-title`;
this.orderMessageSelect = '#order_message_order_message';
this.displayToCustometCheckbox = `${this.messageBlock} .md-checkbox label`;
this.messageTextarea = '#order_message_message';
this.sendMessageButton = `${this.messageBlock} .btn-primary`;
this.messageBlockList = `${this.messageBlock} .messages-block`;
this.messageListChild = (messageID: number) => `${this.messageBlockList} li:nth-child(${messageID})`;
this.messageBlockEmployee = (messageID: number) => `${this.messageListChild(messageID)}.messages-block-employee`;
this.messageBlockCustomer = (messageID: number) => `${this.messageListChild(messageID)}.messages-block-customer`;
this.messageEmployeeBlockContent = (messageID: number) => `${this.messageBlockEmployee(messageID)} .messages-block-content`;
this.messageCustomerBlockContent = (messageID: number) => `${this.messageBlockCustomer(messageID)} .messages-block-content`;
this.messageBlockIcon = (messageID: number) => `${this.messageBlockEmployee(messageID)} .messages-block-icon`;
this.configureLink = `${this.messageBlock} .configure-link`;
}

/*
Methods
*/
/**
* Send message
* @param page {Page} Browser tab
* @param messageData {OrderMessage} Data to set on the form
* @returns {Promise<string>}
*/
async sendMessage(page: Page, messageData: OrderMessage): Promise<string> {
await this.selectByVisibleText(page, this.orderMessageSelect, messageData.orderMessage);
await this.setChecked(page, this.displayToCustometCheckbox, messageData.displayToCustomer);

if (messageData.message !== '') {
await this.setValue(page, this.messageTextarea, messageData.message);
}

await this.waitForSelectorAndClick(page, this.sendMessageButton);

return this.getAlertSuccessBlockParagraphContent(page);
}

/**
* Get messages number
* @param page {Page} Browser tab
* @returns {Promise<number>}
*/
async getMessagesNumber(page: Page): Promise<number> {
return this.getNumberFromText(page, this.messageBlockTitle);
}

/**
* Is message visible
* @param page {Page} Browser tab
* @param messageID {number} Message ID on the list
* @param messageFrom {string} The message sender
* @returns {Promise<boolean>}
*/
async isMessageVisible(page: Page, messageID: number = 1, messageFrom: string = 'employee'): Promise<boolean> {
if (messageFrom === 'employee') {
return this.elementVisible(page, this.messageEmployeeBlockContent(messageID), 1000);
}

return this.elementVisible(page, this.messageCustomerBlockContent(messageID), 1000);
}

/**
* Is employee icon visible
* @param page {Page} Browser tab
* @param messageID {number} Message id number
* @returns {Promise<boolean>}
*/
async isEmployeeIconVisible(page: Page, messageID: number = 1): Promise<boolean> {
return this.elementVisible(page, `${this.messageBlockIcon(messageID)} .employee-icon`, 1000);
}

/**
* Is employee private icon visible
* @param page {Page} Browser tab
* @param messageID {number} Message id number
* @returns {Promise<boolean>}
*/
async isEmployeePrivateIconVisible(page: Page, messageID: number = 1): Promise<boolean> {
return this.elementVisible(page, `${this.messageBlockIcon(messageID)} .employee-icon--private`, 1000);
}

/**
* Get text message
* @param page {Page} Browser tab
* @param messageID {number} Message ID on the list
* @param messageFrom {string} The message sender
* @returns {Promise<string>}
*/
async getTextMessage(page: Page, messageID: number = 1, messageFrom: string = 'employee'): Promise<string> {
if (messageFrom === 'employee') {
return this.getTextContent(page, this.messageEmployeeBlockContent(messageID));
}

return this.getTextContent(page, this.messageCustomerBlockContent(messageID));
}

/**
* Click on configure predefined messages link
* @param page {Page} Browser tab
* @returns {Promise<void>}
*/
async clickOnConfigureMessageLink(page: Page): Promise<void> {
await this.clickAndWaitForURL(page, this.configureLink);
}
}

module.exports = new BOProductBlockMessagesPage();

0 comments on commit 9748434

Please sign in to comment.