Skip to content

Commit

Permalink
Merge pull request #425 from Progi1984/boOrderMessagesCreatePage
Browse files Browse the repository at this point in the history
Migrate `@pages/BO/customerService/orderMessages/add` from Core
  • Loading branch information
Progi1984 authored Feb 19, 2025
2 parents df05984 + 0e35c5b commit 48c2c25
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,8 @@ export {default as boMultistoreShopCreatePage} from '@pages/BO/advancedParameter
export {default as boMultistoreShopUrlCreatePage} from '@pages/BO/advancedParameters/multistore/url/create';
export {default as boMyProfilePage} from '@pages/BO/advancedParameters/team/myProfile';
export {default as boNewExperimentalFeaturesPage} from '@pages/BO/advancedParameters/newExperimentalFeatures';
export {default as boOrderMessagesPage} from '@pages/BO/customerService/orderMessages';
export {default as boOrderMessagesCreatePage} from '@pages/BO/customerService/orderMessages/create';
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';
Expand All @@ -278,7 +280,6 @@ export {default as boOrdersViewBlockMessagesPage} from '@pages/BO/orders/view/bl
export {default as boOrdersViewBlockPaymentsPage} from '@pages/BO/orders/view/blockPayments';
export {default as boOrdersViewBlockProductsPage} from '@pages/BO/orders/view/blockProducts';
export {default as boOrdersViewBlockTabListPage} from '@pages/BO/orders/view/blockTabList';
export {default as boOrderMessagesPage} from '@pages/BO/customerService/orderMessages';
export {default as boOrderSettingsPage} from '@pages/BO/shopParameters/orderSettings';
export {default as boOutstandingPage} from '@pages/BO/catalog/outstanding';
export {default as boPaymentMethodsPage} from '@pages/BO/payment/paymentMethods';
Expand Down
11 changes: 11 additions & 0 deletions src/interfaces/BO/customerService/orderMessages/create.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import type FakerOrderMessage from '@data/faker/orderMessage';
import {BOBasePagePageInterface} from '@interfaces/BO';
import {type Page} from '@playwright/test';

export interface BOOrderMessagesCreatePageInterface extends BOBasePagePageInterface {
readonly pageTitle: string;
readonly pageTitleEdit: string;
readonly pageTitleView: string;

addEditOrderMessage(page: Page, orderMessageData: FakerOrderMessage): Promise<string>;
}
9 changes: 9 additions & 0 deletions src/pages/BO/customerService/orderMessages/create.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import {type BOOrderMessagesCreatePageInterface} from '@interfaces/BO/customerService/orderMessages/create';

/* eslint-disable global-require, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */
function requirePage(): BOOrderMessagesCreatePageInterface {
return require('@versions/develop/pages/BO/customerService/orderMessages/create');
}
/* eslint-enable global-require, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */

export default requirePage();
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import type FakerOrderMessage from '@data/faker/orderMessage';
import {type BOOrderMessagesCreatePageInterface} from '@interfaces/BO/customerService/orderMessages/create';
import BOBasePage from '@pages/BO/BOBasePage';
import {type Page} from '@playwright/test';

/**
* Add order message page, contains selectors and functions for the page
* @class
* @extends BOBasePage
*/
class BOOrderMessagesCreatePage extends BOBasePage implements BOOrderMessagesCreatePageInterface {
public readonly pageTitle: string;

public readonly pageTitleEdit: string;

public readonly pageTitleView: string;

private readonly nameLangButton: string;

private readonly langDropdownDiv: string;

private readonly nameLangSpan: (lang: string) => string;

private readonly nameInput: (id: number) => string;

private readonly messageTextarea: (id: number) => string;

private readonly saveButton: string;

/**
* @constructs
* Setting up titles and selectors to use on add order message page
*/
constructor() {
super();

this.pageTitle = `New order message • ${global.INSTALL.SHOP_NAME}`;
this.pageTitleEdit = 'Editing message';
this.pageTitleView = 'Customer thread';

// Selectors
this.nameLangButton = '#order_message_name_dropdown';
this.langDropdownDiv = 'div.locale-dropdown-menu[aria-labelledby="order_message_name_dropdown"]';
this.nameLangSpan = (lang: string) => `${this.langDropdownDiv} span[data-locale='${lang}']`;
this.nameInput = (id: number) => `#order_message_name_${id}`;
this.messageTextarea = (id: number) => `#order_message_message_${id}`;
this.saveButton = '#save-button';
}

/*
Methods
*/

/**
* Change form language
* @param page {Page} Browser tab
* @param lang {string} Language to set on form
* @return {Promise<void>}
*/
async changeFormLang(page: Page, lang: string = 'en'): Promise<void> {
await Promise.all([
page.locator(this.nameLangButton).click(),
this.waitForVisibleSelector(page, `${this.nameLangButton}[aria-expanded='true']`),
]);
await Promise.all([
page.locator(this.nameLangSpan(lang)).click(),
this.waitForVisibleSelector(page, `${this.nameLangButton}[aria-expanded='false']`),
]);
}

/**
* Add/Edit order message
* @param page {Page} Browser tab
* @param orderMessageData {FakerOrderMessage} Data to set order message form
* @returns {Promise<string>}
*/
async addEditOrderMessage(page: Page, orderMessageData: FakerOrderMessage): Promise<string> {
// Change lang to 'en' than set inputs value
await this.changeFormLang(page, 'en');
await this.setValue(page, this.nameInput(1), orderMessageData.name);
await this.setValue(page, this.messageTextarea(1), orderMessageData.message);
// Change lang to 'fr' than set inputs value
await this.changeFormLang(page, 'fr');
await this.setValue(page, this.nameInput(2), orderMessageData.frName);
await this.setValue(page, this.messageTextarea(2), orderMessageData.frMessage);
// Save order message
await this.clickAndWaitForURL(page, this.saveButton);
return this.getAlertSuccessBlockParagraphContent(page);
}
}

module.exports = new BOOrderMessagesCreatePage();

0 comments on commit 48c2c25

Please sign in to comment.