wip: optimized steps
This commit is contained in:
parent
6f67a3a5b3
commit
56bd958dde
|
@ -7,13 +7,13 @@ const {
|
||||||
verifyPublishAndTrash,
|
verifyPublishAndTrash,
|
||||||
uiUnblocked
|
uiUnblocked
|
||||||
} = require('@woocommerce/e2e-utils');
|
} = require('@woocommerce/e2e-utils');
|
||||||
const faker = require('faker');
|
|
||||||
const config = require('config');
|
const config = require('config');
|
||||||
const { HTTPClientFactory,
|
const { HTTPClientFactory,
|
||||||
VariableProduct,
|
VariableProduct,
|
||||||
GroupedProduct,
|
GroupedProduct,
|
||||||
SimpleProduct,
|
SimpleProduct,
|
||||||
ProductVariation
|
ProductVariation,
|
||||||
|
ExternalProduct
|
||||||
} = require('@woocommerce/api');
|
} = require('@woocommerce/api');
|
||||||
|
|
||||||
const runCreateOrderTest = () => {
|
const runCreateOrderTest = () => {
|
||||||
|
@ -46,84 +46,103 @@ const runCreateOrderTest = () => {
|
||||||
|
|
||||||
// todo remove .only
|
// todo remove .only
|
||||||
it('can create new complex order with multiple product types & tax classes', async () => {
|
it('can create new complex order with multiple product types & tax classes', async () => {
|
||||||
// Initialize different product types
|
// Initialize products for each product type
|
||||||
|
const variations = config.get('products.variations');;
|
||||||
const initProducts = async () => {
|
const initProducts = async () => {
|
||||||
|
// Initialize HTTP client
|
||||||
const apiUrl = config.get('url');
|
const apiUrl = config.get('url');
|
||||||
const adminUsername = config.get('users.admin.username');
|
const adminUsername = config.get('users.admin.username');
|
||||||
const adminPassword = config.get('users.admin.password');
|
const adminPassword = config.get('users.admin.password');
|
||||||
const httpClient = HTTPClientFactory.build(apiUrl)
|
const httpClient = HTTPClientFactory.build(apiUrl)
|
||||||
.withBasicAuth(adminUsername, adminPassword)
|
.withBasicAuth(adminUsername, adminPassword)
|
||||||
.create();
|
.create();
|
||||||
const productName = () => faker.commerce.productName();
|
|
||||||
const price = () => faker.commerce.price(1, 999);
|
|
||||||
|
|
||||||
// Initialize repositories
|
// Initialization functions per product type
|
||||||
const simpleRepo = SimpleProduct.restRepository(httpClient);
|
const initSimpleProduct = async () => {
|
||||||
const variationsRepo = ProductVariation.restRepository(httpClient);
|
const repo = SimpleProduct.restRepository(httpClient);
|
||||||
const variableRepo = VariableProduct.restRepository(httpClient);
|
const props = config.get('products.simple');
|
||||||
const groupedRepo = GroupedProduct.restRepository(httpClient);
|
return await repo.create(props);
|
||||||
|
};
|
||||||
|
const initVariableProduct = async () => {
|
||||||
|
const prodProps = config.get('products.variable');
|
||||||
|
const productRepo = VariableProduct.restRepository(httpClient);
|
||||||
|
const variationRepo = ProductVariation.restRepository(httpClient);
|
||||||
|
const variableProduct = await productRepo.create(prodProps);
|
||||||
|
for (const v of variations) {
|
||||||
|
await variationRepo.create(variableProduct.id, v);
|
||||||
|
}
|
||||||
|
|
||||||
// Initialize Simple Product
|
return variableProduct;
|
||||||
const simpleProduct = await simpleRepo.create({ name: productName(), price: price() });
|
};
|
||||||
|
const initGroupedProduct = async () => {
|
||||||
|
const repo = GroupedProduct.restRepository(httpClient);
|
||||||
|
const props = config.get('products.grouped');
|
||||||
|
return await repo.create(props);
|
||||||
|
};
|
||||||
|
const initExternalProduct = async () => {
|
||||||
|
const repo = ExternalProduct.restRepository(httpClient);
|
||||||
|
const props = config.get('products.external');
|
||||||
|
return await repo.create(props);
|
||||||
|
};
|
||||||
|
|
||||||
// Initialize Variable Product
|
// Create a product for each product type
|
||||||
const variations = config.get('products.variations');
|
const simpleProduct = await initSimpleProduct();
|
||||||
const variableProduct = await variableRepo.create({ name: productName() });
|
const variableProduct = await initVariableProduct();
|
||||||
await variationsRepo.create(variableProduct.id, variations)
|
const groupedProduct = await initGroupedProduct();
|
||||||
|
const externalProduct = await initExternalProduct();
|
||||||
// Initialize Grouped Products
|
|
||||||
const groupSize = 3;
|
|
||||||
const groupedProducts = [];
|
|
||||||
for (let i = 0; i < groupSize; i++) {
|
|
||||||
const prod = await simpleRepo.create({ name: productName(), price: price() });
|
|
||||||
groupedProducts.push(prod)
|
|
||||||
}
|
|
||||||
const groupedProduct = await groupedRepo.create({
|
|
||||||
name: productName(),
|
|
||||||
groupedProducts: groupedProducts
|
|
||||||
});
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
simpleProduct,
|
simpleProduct,
|
||||||
variableProduct,
|
variableProduct,
|
||||||
groupedProduct
|
groupedProduct,
|
||||||
|
externalProduct
|
||||||
];
|
];
|
||||||
}
|
};
|
||||||
const products = await initProducts();
|
const products = await initProducts();
|
||||||
|
|
||||||
// Go to "add order" page
|
// Go to "add order" page
|
||||||
await merchant.openNewOrder();
|
await merchant.openNewOrder();
|
||||||
|
|
||||||
// Add products (line items) to the order
|
// Open modal window for adding line items
|
||||||
await expect(page).toClick('button.add-line-item');
|
await expect(page).toClick('button.add-line-item');
|
||||||
await expect(page).toClick('button.add-order-item');
|
await expect(page).toClick('button.add-order-item');
|
||||||
await page.waitForSelector('.wc-backbone-modal-header');
|
await page.waitForSelector('.wc-backbone-modal-header');
|
||||||
for (const { name, id } of products) {
|
|
||||||
|
// Search for each product to add, then verify that they are saved
|
||||||
|
for (const { name } of products) {
|
||||||
await expect(page).toClick('.wc-backbone-modal-content tr:last-child .wc-product-search');
|
await expect(page).toClick('.wc-backbone-modal-content tr:last-child .wc-product-search');
|
||||||
await expect(page).toFill('#wc-backbone-modal-dialog + .select2-container .select2-search__field', name);
|
await expect(page).toFill('#wc-backbone-modal-dialog + .select2-container .select2-search__field',
|
||||||
await expect(page).toClick('li[aria-selected="true"]');
|
name
|
||||||
|
);
|
||||||
|
const firstResult = await page.waitForSelector('li[data-selected]');
|
||||||
|
await firstResult.click();
|
||||||
await expect(page).toMatchElement(
|
await expect(page).toMatchElement(
|
||||||
'.wc-backbone-modal-content tr:nth-last-child(2) .wc-product-search option',
|
'.wc-backbone-modal-content tr:nth-last-child(2) .wc-product-search option',
|
||||||
`${name} (#${id})`
|
name
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
await page.click('.wc-backbone-modal-content #btn-ok');
|
// Save the line items, then verify
|
||||||
|
await expect(page).toClick('.wc-backbone-modal-content #btn-ok');
|
||||||
await uiUnblocked();
|
await uiUnblocked();
|
||||||
|
await expect(page).toClick('button.save_order');
|
||||||
// Verify the products we added show as line items now
|
await page.waitForNavigation();
|
||||||
for (const { name } of products) {
|
for (const { name } of products) {
|
||||||
await expect(page).toMatchElement('.wc-order-item-name', { text: name });
|
await expect(page).toMatchElement('.wc-order-item-name', { text: name });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify variation details in variable product line item
|
// Verify variation details
|
||||||
await expect(page).toMatchElement('.wc-order-item-variation', { text: products.filter(p => p.variations).id })
|
const lastVariation = variations[0];
|
||||||
|
const attributes = lastVariation.attributes;
|
||||||
|
const actualAttributes = await page.$('.display_meta');
|
||||||
|
await expect(page).toMatchElement('.wc-order-item-variation', { text: lastVariation.id });
|
||||||
|
for (const { name, option } of attributes) {
|
||||||
|
await expect(actualAttributes).toMatch(name);
|
||||||
|
await expect(actualAttributes).toMatch(option);
|
||||||
|
}
|
||||||
|
|
||||||
// todo specify quantities
|
// todo specify quantities
|
||||||
// todo setup tax classes
|
// todo setup tax classes
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue