| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- import { expect } from "../setup";
- import { loginAsCustomer, addAddress } from "../utils/customer";
- import {
- generateName,
- generateSKU,
- generateDescription,
- generateHostname,
- } from "../utils/faker";
- export async function generateOrder(page) {
- /**
- * Customer login.
- */
- await loginAsCustomer(page);
- /**
- * Fill customer default address.
- */
- await addAddress(page);
- /**
- * Go to the shop to buy a product.
- */
- await page.goto("");
- await page.waitForLoadState("networkidle");
- await page
- .locator("#main div")
- .filter({ hasText: "New Products View All New" })
- .locator("button")
- .first()
- .waitFor({ state: "visible" });
- await page
- .locator("#main div")
- .filter({ hasText: "New Products View All New" })
- .locator("button")
- .first()
- .click();
- await expect(page.locator("#app")).toContainText("Item Added Successfully");
- await page.waitForTimeout(2000);
- await page.getByRole("button", { name: "Shopping Cart" }).click();
- await page.getByRole("link", { name: "Continue to Checkout" }).click();
- await page
- .locator(
- 'span[class="icon-checkout-address text-6xl text-navyBlue max-sm:text-5xl"]'
- )
- .nth(0)
- .click();
- await page.getByRole("button", { name: "Proceed" }).click();
- await page.waitForTimeout(2000);
- /**
- * Choose shipping method.
- */
- await page.waitForSelector("text=Free Shipping");
- await page.getByText("Free Shipping").first().click();
- await page.waitForTimeout(2000);
- /**
- * Choose payment option.
- */
- await page.waitForSelector("text=Cash On Delivery");
- await page.getByText("Cash On Delivery").first().click();
- await page.waitForTimeout(2000);
- /**
- * Place order.
- */
- await page.getByRole("button", { name: "Place Order" }).click();
- await page.waitForTimeout(2000);
- await page.waitForSelector("text=Thank you for your order!");
- await expect(page.locator("text=Thank you for your order!")).toBeVisible();
- }
- export async function downloadableOrder(page) {
- /**
- * Main product data which we will use to create the product.
- */
- const product = {
- name: generateName(),
- sku: generateSKU(),
- productNumber: generateSKU(),
- shortDescription: generateDescription(),
- description: generateDescription(),
- price: "199",
- };
- /**
- * Reaching to the create product page.
- */
- await page.goto("admin/catalog/products");
- await page.waitForSelector(
- 'button.primary-button:has-text("Create Product")'
- );
- await page.getByRole("button", { name: "Create Product" }).click();
- /**
- * Opening create product form in modal.
- */
- await page.locator('select[name="type"]').selectOption("downloadable");
- await page.locator('select[name="attribute_family_id"]').selectOption("1");
- await page.locator('input[name="sku"]').fill(generateSKU());
- await page.getByRole("button", { name: "Save Product" }).click();
- /**
- * After creating the product, the page is redirected to the edit product page, where
- * all the details need to be filled in.
- */
- await page.waitForSelector(
- 'button.primary-button:has-text("Save Product")'
- );
- /**
- * Waiting for the main form to be visible.
- */
- await page.waitForSelector('form[enctype="multipart/form-data"]');
- /**
- * General Section.
- */
- await page.locator("#product_number").fill(product.productNumber);
- await page.locator("#name").fill(product.name);
- const name = await page.locator('input[name="name"]').inputValue();
- /**
- * Description Section.
- */
- await page.fillInTinymce(
- "#short_description_ifr",
- product.shortDescription
- );
- await page.fillInTinymce("#description_ifr", product.description);
- /**
- * Meta Description Section.
- */
- await page.locator("#meta_title").fill(product.name);
- await page.locator("#meta_keywords").fill(product.name);
- await page.locator("#meta_description").fill(product.shortDescription);
- /**
- * Image Section.
- */
- // Will add images later.
- /**
- * Price Section.
- */
- await page.locator("#price").fill(product.price);
- /**
- * Downloadable Links Section.
- */
- await page.getByText("Add Link").first().click();
- await page.waitForSelector(".min-h-0 > div > div");
- await page.locator('input[name="title"]').fill(generateName());
- const linkTitle = await page.locator('input[name="title"]').inputValue();
- await page.locator('input[name="price"]').first().fill("100");
- await page.locator('input[name="downloads"]').fill("10");
- await page.locator('select[name="type"]').selectOption("url");
- await page.waitForSelector('input[name="url"]');
- await page.locator('input[name="url"]').fill(generateHostname());
- await page.locator('select[name="sample_type"]').selectOption("url");
- await page.waitForSelector('input[name="sample_url"]');
- await page.locator('input[name="sample_url"]').fill(generateHostname());
- /**
- * Saving the Downloadable Link.
- */
- await page.getByText("Link Save").click();
- await page.getByRole("button", { name: "Save", exact: true }).click();
- await expect(page.getByText(`${linkTitle}`)).toBeVisible();
- /**
- * Saving the product.
- */
- await page.getByRole("button", { name: "Save Product" }).click();
- /**
- * Expecting for the product to be saved.
- */
- await expect(page.locator("#app")).toContainText(
- "Product updated successfully"
- );
- /**
- * Checking the product in the list.
- */
- await page.goto("admin/catalog/products");
- await expect(
- page.locator("p.break-all.text-base").filter({ hasText: product.name })
- ).toBeVisible();
- /**
- * Customer login.
- */
- await loginAsCustomer(page);
- /**
- * Fill customer default address.
- */
- await addAddress(page);
- /**
- * customer to buy a product
- */
- await page.goto("");
- await page.getByRole("textbox", { name: "Search products here" }).click();
- await page
- .getByRole("textbox", { name: "Search products here" })
- .fill(product.name);
- await page
- .getByRole("textbox", { name: "Search products here" })
- .press("Enter");
- await page.waitForTimeout(2000);
- await page.getByRole("button", { name: "Add To Cart" }).click();
- await page.waitForTimeout(2000)
- await page.locator('#main label').nth(1).click();
- await page.getByRole("button", { name: "Add To Cart" }).click();
- await expect(
- page
- .getByRole("paragraph")
- .filter({ hasText: "Item Added Successfully" })
- ).toBeVisible();
- await page.getByRole("button", { name: "Shopping Cart" }).click();
- await page.getByRole("link", { name: "Continue to Checkout" }).click();
- await page
- .locator(
- 'span[class="icon-checkout-address text-6xl text-navyBlue max-sm:text-5xl"]'
- )
- .nth(0)
- .click();
- await page.getByRole("button", { name: "Proceed" }).click();
- await page.waitForTimeout(2000);
- /**
- * Choose payment option.
- */
- await expect(
- page.locator("label").filter({ hasText: "Money Transfer" })
- ).toBeVisible();
- await page.locator(".relative > .icon-radio-unselect").first().click();
- await page.waitForTimeout(2000);
- /**
- * Place order.
- */
- await page.getByRole("button", { name: "Place Order" }).click();
- await page.waitForTimeout(2000);
- await page.waitForSelector("text=Thank you for your order!");
- await expect(page.locator("text=Thank you for your order!")).toBeVisible();
- /**
- * completing the order.
- */
- await page.goto("admin/sales/orders");
- await page.locator(".row > div:nth-child(4) > a").first().click();
- await page.getByText("Invoice", { exact: true }).click();
- await page.locator("#can_create_transaction").nth(1).click();
- await page.getByRole("button", { name: "Create Invoice" }).click();
- await expect(
- page.getByText("Invoice created successfully Close")
- ).toBeVisible();
- return product.name;
- }
|