mirror of
https://github.com/vercel/commerce.git
synced 2025-03-14 14:42:31 +00:00
We're making some updates to Next.js Commerce. Everything prior to this commit marks what we're calling [`v1`](https://github.com/vercel/commerce/releases/tag/v1) as a point in time to be able to reference and still use going into the future. The current architecture of Commerce is a multi-vendor, interoperable solution, including:
- [Shopify](https://shopify.vercel.store/)
- [Swell](https://swell.vercel.store/)
- [BigCommerce](https://bigcommerce.vercel.store/)
- [Vendure](https://vendure.vercel.store/)
- [Saleor](https://saleor.vercel.store/)
- [Ordercloud](https://ordercloud.vercel.store/)
- [Spree](https://spree.vercel.store/)
- [Kibo Commerce](https://kibocommerce.vercel.store/)
- [Commerce.js](https://commercejs.vercel.store/)
- [SalesForce Cloud Commerce](https://salesforce-cloud-commerce.vercel.store/)
All features can be toggled on or off, and it's easy to change between commerce providers. To support this, we needed to create a ["commerce metaframework"](d1d9e8c434/packages/commerce/new-provider.md
) where providers could confirm to an API spec to add support for Next.js Commerce. While this worked and was successful for `v1`, we have different design goals and ambitions for `v2`.
**What You Need To Know**
- `v1` will not be updated moving forward. If you need to reference `v1`, you will still be able to clone and deploy the version tagged at this release.
- `v2` will be shifting to be a single provider vs. provider agnostic. Other providers are welcome to fork this repository and swap out the underlying `lib/` implementation that connects to the selected commerce provider (Shopify). This architecture was chosen to reduce the surface area of the codebase, remove the intermediate metaframework layer for provider-interoperability, and enable usage with the latest Next.js and React features.
- We will be sharing more about `v2` in the future as we continue to iterate before the marked release.
74 lines
2.5 KiB
TypeScript
74 lines
2.5 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
const regex = (text: string) => new RegExp(text, 'gim');
|
|
|
|
test('should be able to open and close cart', async ({ page }) => {
|
|
let cart;
|
|
|
|
await page.goto('/');
|
|
|
|
await page.getByTestId('open-cart').click();
|
|
cart = await page.getByTestId('cart');
|
|
await expect(cart).toBeVisible();
|
|
await expect(cart).toHaveText(regex('your cart is empty'));
|
|
|
|
await page.getByTestId('close-cart').click();
|
|
cart = await page.getByTestId('cart');
|
|
await expect(cart).toBeHidden();
|
|
});
|
|
|
|
test('should be able to add item to cart, without selecting a variant, assuming first variant', async ({
|
|
page
|
|
}) => {
|
|
await page.goto('/');
|
|
await page.getByTestId('homepage-products').locator('a').first().click();
|
|
|
|
const productName = await page.getByTestId('product-name').first().innerText();
|
|
const firstVariant = await page.getByTestId('variant').first().innerText();
|
|
|
|
await page.getByRole('button', { name: regex('add to cart') }).click();
|
|
|
|
const cart = await page.getByTestId('cart');
|
|
|
|
await expect(cart).toBeVisible();
|
|
|
|
const cartItems = await page.getByTestId('cart-item').all();
|
|
let isItemInCart = false;
|
|
|
|
for (const item of cartItems) {
|
|
const cartProductName = await item.getByTestId('cart-product-name').innerText();
|
|
const cartProductVariant = await item.getByTestId('cart-product-variant').innerText();
|
|
|
|
if (cartProductName === productName && cartProductVariant === firstVariant) {
|
|
isItemInCart = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
await expect(isItemInCart).toBe(true);
|
|
});
|
|
|
|
test('should be able to add item to cart by selecting a variant', async ({ page }) => {
|
|
await page.goto('/');
|
|
await page.getByTestId('homepage-products').locator('a').first().click();
|
|
|
|
const selectedProductName = await page.getByTestId('product-name').first().innerText();
|
|
const secondVariant = await page.getByTestId('variant').nth(1);
|
|
|
|
await secondVariant.click();
|
|
const selectedProductVariant = await page.getByTestId('selected-variant').innerText();
|
|
|
|
await page.getByRole('button', { name: regex('add to cart') }).click();
|
|
|
|
const cart = await page.getByTestId('cart');
|
|
|
|
await expect(cart).toBeVisible();
|
|
|
|
const cartItem = await page.getByTestId('cart-item').first();
|
|
const cartItemProductName = await cartItem.getByTestId('cart-product-name').innerText();
|
|
const cartItemProductVariant = await cartItem.getByTestId('cart-product-variant').innerText();
|
|
|
|
await expect(cartItemProductName).toBe(selectedProductName);
|
|
await expect(cartItemProductVariant).toBe(selectedProductVariant);
|
|
});
|