Skip to content

Commit

Permalink
feat: add wishlist page and related tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
ocavli committed Jan 31, 2025
1 parent c937208 commit 9291d9e
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 3 deletions.
2 changes: 2 additions & 0 deletions src/page-objects/storefront/Home.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ export class Home implements PageObject {
});
const wishlistNotAddedIcon = listingItem.locator('.product-wishlist-not-added');
const wishlistAddedIcon = listingItem.locator('.product-wishlist-added');
const removeProductFromWishlist = listingItem.locator('.icon-wishlist-remove');

return {
productImage: productImage,
Expand All @@ -120,6 +121,7 @@ export class Home implements PageObject {
productAddToShoppingCart: productAddToShoppingCart,
wishlistNotAddedIcon: wishlistNotAddedIcon,
wishlistAddedIcon: wishlistAddedIcon,
removeFromWishlistXButton: removeProductFromWishlist,
};
}

Expand Down
34 changes: 34 additions & 0 deletions src/page-objects/storefront/Wishlist.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import type { Page, Locator } from '@playwright/test';
import type { PageObject } from '../../types/PageObject';
import { Home } from './Home';

export class Wishlist extends Home implements PageObject {
public readonly wishListHeader: Locator;
public readonly removeAlert: Locator;
public readonly emptyListing: Locator;

public readonly offCanvas: Locator;
public readonly offCanvasCartTitle: Locator;
public readonly offCanvasCart: Locator;
public readonly offCanvasCartGoToCheckoutButton: Locator;
public readonly offCanvasLineItemImages: Locator;
public readonly offCanvasSummaryTotalPrice: Locator;

constructor(public readonly page: Page) {
super(page);
this.wishListHeader = page.locator('.wishlist-headline');
this.removeAlert = page.locator('.alert-content');
this.emptyListing = page.locator('.wishlist-listing-empty');

this.offCanvas = page.locator('offcanvas-body');
this.offCanvasCartTitle = page.getByText('Shopping cart', { exact: true });
this.offCanvasCart = page.getByRole('dialog');
this.offCanvasCartGoToCheckoutButton = page.getByRole('link', { name: 'Go to checkout' });
this.offCanvasLineItemImages = page.locator('.line-item-img-link');
this.offCanvasSummaryTotalPrice = page.locator('.offcanvas-summary').locator('dt:has-text("Subtotal") + dd');
}

url() {
return `wishlist`;
}
}
8 changes: 5 additions & 3 deletions src/tasks/shop-customer-tasks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ import { OpenSearchSuggestPage } from './shop-customer/Search/OpenSearchSuggestP
import { SearchForTerm } from './shop-customer/Search/SearchForTerm';

import { ValidateAccessibility } from './shop-customer/Accessibility/ValidateAccessibility';
import { AddProductToWishlist } from './shop-customer/Wishlist/addProductToWishlist';
import { RemoveProductFromWishlist } from './shop-customer/Wishlist/RemoveProductFromWishlist';
import { AddProductToCartFromWishlist } from './shop-customer/Wishlist/AddProductToCartFromWishlist';
import { AddProductToWishlist } from './shop-customer/Wishlist/AddProductToWishlist';

export const test = mergeTests(
Login,
Expand All @@ -48,6 +49,7 @@ export const test = mergeTests(
OpenSearchSuggestPage,
SearchForTerm,
ValidateAccessibility,
AddProductToWishlist,
RemoveProductFromWishlist
RemoveProductFromWishlist,
AddProductToCartFromWishlist,
AddProductToWishlist
);
20 changes: 20 additions & 0 deletions src/tasks/shop-customer/Wishlist/AddProductToCartFromWishlist.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { test as base } from '@playwright/test';
import type { Task } from '../../../types/Task';
import type { FixtureTypes } from '../../../types/FixtureTypes';
import { Product } from '../../../types/ShopwareTypes';

export const AddProductToCartFromWishlist = base.extend<{ AddProductToCartFromWishlist: Task }, FixtureTypes>({
AddProductToCartFromWishlist: async ({ ShopCustomer, StorefrontWishlist }, use) => {
const task = (ProductData: Product) => {
return async function AddProductToCart() {
const listedItem = await StorefrontWishlist.getListingItemByProductId(ProductData.id);
await listedItem.productAddToShoppingCart.click();
await StorefrontWishlist.page.waitForResponse((response) => response.url().includes(`checkout/offcanvas`) && response.ok());
await ShopCustomer.expects(StorefrontWishlist.offCanvasCartTitle).toBeVisible();
await ShopCustomer.expects(StorefrontWishlist.offCanvasCart.getByText(ProductData.name)).toBeVisible();
}
};

await use(task);
},
});
18 changes: 18 additions & 0 deletions src/tasks/shop-customer/Wishlist/AddProductToWishlist.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { test as base } from '@playwright/test';
import type { Task } from '../../../types/Task';
import type { FixtureTypes } from '../../../types/FixtureTypes';
import { Product } from '../../../types/ShopwareTypes';

export const AddProductToWishlist = base.extend<{ AddProductToWishlist: Task }, FixtureTypes>({
AddProductToWishlist: async ({ StorefrontHome , StorefrontWishlist, ShopCustomer}, use) => {

Check warning on line 7 in src/tasks/shop-customer/Wishlist/AddProductToWishlist.ts

View workflow job for this annotation

GitHub Actions / eslint

'StorefrontWishlist' is defined but never used

Check warning on line 7 in src/tasks/shop-customer/Wishlist/AddProductToWishlist.ts

View workflow job for this annotation

GitHub Actions / eslint

'StorefrontWishlist' is defined but never used
const task = (ProductData: Product) => {
return async function AddProductToWishlist() {
const listedItem = await StorefrontHome.getListingItemByProductId(ProductData.id);
await listedItem.wishlistNotAddedIcon.click();
await ShopCustomer.expects(listedItem.wishlistAddedIcon).toBeVisible();
}
};

await use(task);
},
});
18 changes: 18 additions & 0 deletions src/tasks/shop-customer/Wishlist/RemoveProductFromWishlist.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { test as base } from '@playwright/test';
import type { Task } from '../../../types/Task';
import type { FixtureTypes } from '../../../types/FixtureTypes';
import { Product } from '../../../types/ShopwareTypes';

export const RemoveProductFromWishlist = base.extend<{ RemoveProductFromWishlist: Task }, FixtureTypes>({
RemoveProductFromWishlist: async ({ StorefrontHome , StorefrontWishlist}, use) => {
const task = (ProductData: Product) => {
return async function AddProductToWishlist() {
const listedItem = await StorefrontHome.getListingItemByProductId(ProductData.id);
await listedItem.wishlistAddedIcon.click();
await StorefrontWishlist.page.waitForResponse((response) => response.url().includes(`remove/${ProductData.id}`) && response.ok());
}
};

await use(task);
},
});

0 comments on commit 9291d9e

Please sign in to comment.