-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Migrate
@pages/BO/orders/view/messagesBlock
from Core
- Loading branch information
Showing
5 changed files
with
179 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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>; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
155
src/versions/develop/pages/BO/orders/view/blockMessages.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); |