Skip to content

Commit a041b90

Browse files
Merge pull request #255 from nesrineabdmouleh/fixCreateProductForVersionInfTo9
Fix create product method for PS versions < 9
2 parents 372fdb6 + f2331bd commit a041b90

File tree

7 files changed

+103
-4
lines changed

7 files changed

+103
-4
lines changed

src/pages/BO/catalog/products/create/index.ts

+3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ function requirePage(): BOProductsCreatePageInterface {
1818
if (semver.lt(psVersion, '8.1.0')) {
1919
return require('@versions/8.0/pages/BO/catalog/products/create').createProduct;
2020
}
21+
if (semver.lt(psVersion, '8.3.0')) {
22+
return require('@versions/8.2/pages/BO/catalog/products/create').createProduct;
23+
}
2124
return require('@versions/develop/pages/BO/catalog/products/create').createProduct;
2225
}
2326

src/pages/BO/catalog/products/create/tabDetails.ts

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ function requirePage(): BOProductsCreateTabDetailsPageInterface {
99
if (semver.lt(psVersion, '8.1.0')) {
1010
return require('@versions/8.0/pages/BO/catalog/products/create/tabDetails').detailsTab;
1111
}
12+
if (semver.lt(psVersion, '8.3.0')) {
13+
return require('@versions/8.2/pages/BO/catalog/products/create/tabDetails').detailsTab;
14+
}
1215
return require('@versions/develop/pages/BO/catalog/products/create/tabDetails').detailsTab;
1316
}
1417
/* eslint-enable global-require, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */

src/versions/8.0/pages/BO/catalog/products/create/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Import pages
22
import type {BOProductsCreatePageInterface} from '@interfaces/BO/catalog/products/create';
3-
import {CreateProduct} from '@versions/develop/pages/BO/catalog/products/create';
3+
import {CreateProduct} from '@versions/8.2/pages/BO/catalog/products/create';
44

55
import type {Page} from 'playwright';
66

@@ -33,7 +33,7 @@ class BOCreateProductVersion extends CreateProduct implements BOProductsCreatePa
3333
this.productName = '[id*="form_step1_name"]';
3434
this.productNameInput = (locale: string) => `${this.productName} div[data-locale=${locale}] input`;
3535
this.productNameLanguageButton = '#form_switch_language';
36-
this.tabLink = (tabName: string) => `tab_step${tabName}`;
36+
this.tabLink = (tabName: string) => `#tab_step${tabName}`;
3737
this.productOnlineTitle = 'h2.for-switch.online-title';
3838
this.productActiveSwitchButtonToggleInput = '.product-footer div.switch-input';
3939
this.saveProductButton = '#form div.product-footer button.btn-primary[type="submit"]';

src/versions/8.0/pages/BO/catalog/products/create/tabDetails.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Import pages
22
import type {BOProductsCreateTabDetailsPageInterface} from '@interfaces/BO/catalog/products/create/tabDetails';
3-
import {DetailsTab} from '@versions/develop/pages/BO/catalog/products/create/tabDetails';
3+
import {DetailsTab} from '@versions/8.2/pages/BO/catalog/products/create/tabDetails';
44

55
// Import data
66
import type FakerProduct from '@data/faker/product';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
// Import pages
2+
import type {BOProductsCreatePageInterface} from '@interfaces/BO/catalog/products/create';
3+
import {CreateProduct} from '@versions/develop/pages/BO/catalog/products/create';
4+
5+
import descriptionTab from '@pages/BO/catalog/products/create/tabDescription';
6+
import pricingTab from '@pages/BO/catalog/products/create/tabPricing';
7+
import detailsTab from '@pages/BO/catalog/products/create/tabDetails';
8+
import virtualProductTab from '@pages/BO/catalog/products/create/tabVirtualProduct';
9+
import stocksTab from '@pages/BO/catalog/products/create/tabStocks';
10+
import packTab from '@pages/BO/catalog/products/create/tabPack';
11+
12+
import type FakerProduct from '@data/faker/product';
13+
14+
import type {Page} from 'playwright';
15+
16+
/**
17+
* Bo create product page, contains functions that can be used on the page
18+
* @class
19+
* @extends CreateProduct
20+
*/
21+
class BOCreateProductVersion extends CreateProduct implements BOProductsCreatePageInterface {
22+
/**
23+
* Set product
24+
* @param page {Page} Browser tab
25+
* @param productData {FakerProduct} Data to set in new product page
26+
* @returns {Promise<string>}
27+
*/
28+
async setProduct(page: Page, productData: FakerProduct): Promise<string|null> {
29+
await this.waitForVisibleSelector(page, this.productActiveSwitchButtonToggleInput);
30+
31+
//// Tab "Description"
32+
// Set description
33+
await descriptionTab.setProductDescription(page, productData);
34+
// Set name
35+
await this.setProductName(page, productData.nameFR, 'fr');
36+
await this.setProductName(page, productData.name, 'en');
37+
38+
// Set status
39+
await this.setProductStatus(page, productData.status);
40+
41+
//// Tab "Details"
42+
await detailsTab.setProductDetails(page, productData);
43+
44+
//// Tab "Stocks"
45+
if (productData.type === 'virtual') {
46+
await virtualProductTab.setVirtualProduct(page, productData);
47+
} else if (productData.type !== 'combinations') {
48+
await stocksTab.setProductStock(page, productData);
49+
}
50+
51+
if (productData.type === 'pack') {
52+
await packTab.setPackOfProducts(page, productData.pack);
53+
}
54+
55+
//// Tab "Pricing"
56+
await pricingTab.setProductPricing(page, productData);
57+
58+
return this.saveProduct(page);
59+
}
60+
}
61+
62+
const createProduct = new BOCreateProductVersion();
63+
export {createProduct, BOCreateProductVersion as CreateProduct};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Import pages
2+
import type {BOProductsCreateTabDetailsPageInterface} from '@interfaces/BO/catalog/products/create/tabDetails';
3+
import {DetailsTab} from '@versions/develop/pages/BO/catalog/products/create/tabDetails';
4+
5+
// Import data
6+
import type FakerProduct from '@data/faker/product';
7+
8+
import type {Page} from 'playwright';
9+
10+
/**
11+
* Details tab in product page, contains functions that can be used on the page
12+
* @class
13+
* @extends DetailsTab
14+
*/
15+
class DetailsTabVersion extends DetailsTab implements BOProductsCreateTabDetailsPageInterface {
16+
/**
17+
* Set product details
18+
* @param page {Page} Browser tab
19+
* @param productData {FakerProduct} Data to set in details form
20+
* @returns {Promise<void>}
21+
*/
22+
async setProductDetails(page: Page, productData: FakerProduct): Promise<void> {
23+
await this.waitForSelectorAndClick(page, this.detailsTabLink);
24+
await this.setValue(page, this.productReferenceInput, productData.reference);
25+
await this.setCondition(page, productData);
26+
}
27+
}
28+
29+
const detailsTab = new DetailsTabVersion();
30+
export {detailsTab, DetailsTabVersion as DetailsTab};

src/versions/develop/pages/BO/catalog/products/create/tabDetails.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import type {Frame, Page} from 'playwright';
1616
class DetailsTab extends BOBasePage implements BOProductsCreateTabDetailsPageInterface {
1717
public readonly featureCustomValueNotDefaultLanguageMessage: string;
1818

19-
private readonly detailsTabLink: string;
19+
protected detailsTabLink: string;
2020

2121
private readonly productEAN13Input: string;
2222

0 commit comments

Comments
 (0)