Skip to content

Commit 8e98f8d

Browse files
committed
OBPIH-6969 Replace hardcoded products with date from csv file
1 parent 4c51bb0 commit 8e98f8d

File tree

5 files changed

+25
-88
lines changed

5 files changed

+25
-88
lines changed

src/config/AppConfig.ts

Lines changed: 11 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import TestUserConfig from '@/config/TestUserConfig';
88
import { ActivityCode } from '@/constants/ActivityCodes';
99
import { LocationTypeCode } from '@/constants/LocationTypeCode';
1010
import RoleType from '@/constants/RoleTypes';
11+
import { readCsvFile } from '@/utils/FileIOUtils';
1112
import UniqueIdentifier from '@/utils/UniqueIdentifier';
1213

1314
export enum USER_KEY {
@@ -69,7 +70,7 @@ class AppConfig {
6970
public locations!: Record<LOCATION_KEY, LocationConfig>;
7071

7172
// test products used in all of the tests
72-
public products!: Record<PRODUCT_KEY, ProductConfig>;
73+
public products: Record<string, ProductConfig> = {};
7374

7475
//recivingbin configurable prefix
7576
public receivingBinPrefix!: string;
@@ -262,44 +263,16 @@ class AppConfig {
262263
}),
263264
};
264265

265-
this.products = {
266-
productOne: new ProductConfig({
267-
id: env.get('PRODUCT_ONE').asString(),
268-
key: PRODUCT_KEY.ONE,
269-
name: this.uniqueIdentifier.generateUniqueString('product-one'),
270-
quantity: 122,
266+
// Fulfill products data in app config dynamically based on the products.csv
267+
const productsData = readCsvFile(AppConfig.PRODUCTS_IMPORT_FILE_PATH);
268+
productsData.forEach((productData) => {
269+
this.products[productData['ProductCode']] = new ProductConfig({
270+
key: productData['ProductCode'],
271+
name: productData['Name'],
272+
quantity: parseInt(productData['Quantity']),
271273
required: false,
272-
}),
273-
productTwo: new ProductConfig({
274-
id: env.get('PRODUCT_TWO').asString(),
275-
key: PRODUCT_KEY.TWO,
276-
name: this.uniqueIdentifier.generateUniqueString('product-two'),
277-
quantity: 123,
278-
required: false,
279-
}),
280-
productThree: new ProductConfig({
281-
id: env.get('PRODUCT_THREE').asString(),
282-
key: PRODUCT_KEY.THREE,
283-
name: this.uniqueIdentifier.generateUniqueString('product-three'),
284-
quantity: 150,
285-
required: false,
286-
}),
287-
productFour: new ProductConfig({
288-
id: env.get('PRODUCT_FOUR').asString(),
289-
key: PRODUCT_KEY.FOUR,
290-
name: this.uniqueIdentifier.generateUniqueString('product-four'),
291-
quantity: 100,
292-
required: false,
293-
}),
294-
productFive: new ProductConfig({
295-
id: env.get('PRODUCT_FIVE').asString(),
296-
key: PRODUCT_KEY.FIVE,
297-
name: this.uniqueIdentifier.generateUniqueString('aa-product-five'),
298-
//'aa' part was added to improve visibility of ordering products alphabetically
299-
quantity: 160,
300-
required: false,
301-
}),
302-
};
274+
})
275+
})
303276

304277
this.receivingBinPrefix = env
305278
.get('RECEIVING_BIN_PREFIX')

src/config/ProductConfig.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class ProductConfig {
4444
* @returns {boolean}
4545
*/
4646
get isCreateNew() {
47-
return !this.id;
47+
return !this.readId();
4848
}
4949

5050
/**

src/setup/createData.setup.ts

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,19 @@
11
import AppConfig from '@/config/AppConfig';
22
import { test } from '@/fixtures/fixtures';
33
import { readFile, writeToFile } from '@/utils/FileIOUtils';
4-
import { parseUrl } from '@/utils/UrlUtils';
54

65
test('create data', async ({
7-
page,
8-
createProductPage,
9-
productShowPage,
106
locationService,
117
mainLocationService,
128
}) => {
139
// eslint-disable-next-line playwright/no-conditional-in-test
1410
const data = readFile(AppConfig.TEST_DATA_FILE_PATH) || {};
1511

16-
const seedData: Record<'products' | 'locations', Record<string, string>> = {
12+
const seedData: Record<'locations', Record<string, string>> = {
1713
...data,
18-
products: {},
1914
locations: {},
2015
};
2116

22-
// // PRODUCST
23-
const products = Object.values(AppConfig.instance.products).filter(
24-
(product) => product.isCreateNew
25-
);
26-
27-
for (const product of products) {
28-
await test.step(`create product ${product.key}`, async () => {
29-
await createProductPage.goToPage();
30-
await createProductPage.waitForUrl();
31-
await createProductPage.productDetails.nameField.fill(product.name);
32-
await createProductPage.productDetails.categorySelect.click();
33-
await createProductPage.productDetails.categorySelectDropdown
34-
.getByRole('listitem')
35-
.first()
36-
.click();
37-
await createProductPage.saveButton.click();
38-
39-
await productShowPage.recordStockButton.click();
40-
41-
await productShowPage.recordStock.lineItemsTable
42-
.row(1)
43-
.newQuantity.getByRole('textbox')
44-
.fill(`${product.quantity}`);
45-
await productShowPage.recordStock.lineItemsTable.saveButton.click();
46-
await productShowPage.showStockCardButton.click();
47-
48-
const productUrl = parseUrl(
49-
page.url(),
50-
'/openboxes/inventoryItem/showStockCard/$id'
51-
);
52-
seedData.products[`${product.key}`] = productUrl.id;
53-
});
54-
}
55-
5617
// LOCATIONS
5718
const { organization } = await mainLocationService.getLocation();
5819
const { data: locationTypes } = await locationService.getLocationTypes();

src/setup/dataImport.setup.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ test('import data', async ({ request }) => {
77
// eslint-disable-next-line playwright/no-conditional-in-test
88
const data = readFile(AppConfig.TEST_DATA_FILE_PATH) || {};
99

10+
const seedData: Record<'products', Record<string, string>> = {
11+
...data,
12+
products: {},
13+
};
14+
1015
// PRODUCTS
1116
const productService = new ProductService(request);
1217

@@ -15,9 +20,9 @@ test('import data', async ({ request }) => {
1520
await test.step(`importing ${productsData.length} products`, async () => {
1621
const importedData = await productService.importProducts(productsData);
1722
importedData.data.forEach((product) => {
18-
data.products[product.productCode] = product.id;
23+
seedData.products[product.productCode] = product.id;
1924
})
2025
})
2126

22-
writeToFile(AppConfig.TEST_DATA_FILE_PATH, data);
27+
writeToFile(AppConfig.TEST_DATA_FILE_PATH, seedData);
2328
});

src/setup/dataImport/products.csv

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
Id,ProductCode,ProductType,Name,ProductFamily,Category,GLAccount,Description,UnitOfMeasure,Tags,UnitCost,LotAndExpiryControl,ColdChain,ControlledSubstance,HazardousMaterial,Reconditioned,Manufacturer,BrandName,ManufacturerCode,ManufacturerName,Vendor,VendorCode,VendorName,UPC,NDC,Created,Updated
2-
,1,Default,E2E-product-one-T0SOek,,ARVS,,,,,,,,,,,,,,,,,,,,19/Dec/2024 02:43:40,19/Dec/2024 02:43:40
3-
,2,Default,E2E-product-two-T0SOek,,ARVS,,,,,,,,,,,,,,,,,,,,19/Dec/2024 02:43:46,19/Dec/2024 02:43:46
4-
,3,Default,E2E-product-three-sUuCcW,,ARVS,,,,,,,,,,,,,,,,,,,,18/Feb/2025 11:15:58,18/Feb/2025 11:15:58
5-
,4,Default,E2E-product-four-sUuCcW,,ARVS,,,,,,,,,,,,,,,,,,,,18/Feb/2025 11:16:03,18/Feb/2025 11:16:03
6-
,5,Default,E2E-product-five-sUuCcW,,ARVS,,,,,,,,,,,,,,,,,,,,18/Feb/2025 11:16:07,18/Feb/2025 11:16:07
7-
,10001,Default,test product 1,,Food,,,,,,,,,,,,,,,,,,,,20/Feb/2025 02:53:27,20/Feb/2025 02:53:27
8-
,10002,Default,test product 2,,Chronic Care,,,,,,,,,,,,,,,,,,,,20/Feb/2025 02:54:03,20/Feb/2025 02:54:03
2+
,1,Default,E2E-product-one,,ARVS,,,,,,,,,,,,,,,,,,,,,
3+
,2,Default,E2E-product-two,,ARVS,,,,,,,,,,,,,,,,,,,,,
4+
,3,Default,E2E-product-three,,ARVS,,,,,,,,,,,,,,,,,,,,,
5+
,4,Default,E2E-product-four,,ARVS,,,,,,,,,,,,,,,,,,,,,
6+
,5,Default,E2E-product-five,,ARVS,,,,,,,,,,,,,,,,,,,,,

0 commit comments

Comments
 (0)