Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CC-16986 Yves Cart: Dynamic Page Update without Full Page Reload. #14

Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { container } from '@utils';
import {
CustomOrderReferenceManagementStaticFixtures,
CustomOrderReferenceManagementDynamicFixtures,
} from '@interfaces/backoffice';
import { SalesIndexPage } from '@pages/backoffice';
import { CartPage } from '@pages/yves';
import { UserLoginScenario } from '@scenarios/backoffice';
import { CheckoutScenario, CustomerLoginScenario } from '@scenarios/yves';

describe('custom order reference management', { tags: ['@order-management'] }, (): void => {
const cartPage = container.get(CartPage);
const salesIndexPage = container.get(SalesIndexPage);
const loginCustomerScenario = container.get(CustomerLoginScenario);
const checkoutScenario = container.get(CheckoutScenario);
const userLoginScenario = container.get(UserLoginScenario);

let staticFixtures: CustomOrderReferenceManagementStaticFixtures;
let dynamicFixtures: CustomOrderReferenceManagementDynamicFixtures;

before((): void => {
({ staticFixtures, dynamicFixtures } = Cypress.env());
});

it('should be able to create an order with custom order reference', (): void => {
loginCustomerScenario.execute({ email: dynamicFixtures.customer.email, password: staticFixtures.defaultPassword });
cartPage.visit();
cartPage.addCustomOrderReferenceInput(staticFixtures.orderReference);

checkoutScenario.execute();
cy.contains('Your order has been placed successfully!');

userLoginScenario.execute({
username: dynamicFixtures.rootUser.username,
password: staticFixtures.defaultPassword,
});

salesIndexPage.visit();
salesIndexPage.view();

cy.get('body').contains(staticFixtures.orderReference);
});
});
60 changes: 60 additions & 0 deletions cypress/e2e/yves/cart/cart-item-note-management.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import { container } from '@utils';
import { CartItemNoteManagementDynamicFixtures, CartItemNoteManagementStaticFixtures } from '@interfaces/yves';
import { CartPage } from '@pages/yves';
import { CustomerLoginScenario } from '@scenarios/yves';

describe('cart item note management', { tags: ['@cart'] }, (): void => {
const cartPage = container.get(CartPage);
const customerLoginScenario = container.get(CustomerLoginScenario);

let staticFixtures: CartItemNoteManagementStaticFixtures;
let dynamicFixtures: CartItemNoteManagementDynamicFixtures;

before((): void => {
({ staticFixtures, dynamicFixtures } = Cypress.env());
});

it('guest customer should be able to add a cart item note', (): void => {
cartPage.visit();
cartPage.quickAddToCart({ sku: dynamicFixtures.product.sku, quantity: 2 });
cartPage.addFirstCartItemNote({ message: staticFixtures.cartItemNote });
cartPage.submitFirstCartItemNote();

cartPage.getFirstCartItemNoteField().should('have.value', staticFixtures.cartItemNote);
});

it('guest customer should be able to remove a cart item note', (): void => {
cartPage.visit();
cartPage.quickAddToCart({ sku: dynamicFixtures.product.sku, quantity: 2 });
cartPage.addFirstCartItemNote({ message: staticFixtures.cartItemNote });
cartPage.submitFirstCartItemNote();
cartPage.clearFirstCartItemNote();

cartPage.getFirstCartItemNoteField().should('have.value', '');
});

it('customer should be able to add a cart item note', (): void => {
customerLoginScenario.execute({
email: dynamicFixtures.customer.email,
password: staticFixtures.defaultPassword,
});
cartPage.visit();
cartPage.addFirstCartItemNote({ message: staticFixtures.cartItemNote });
cartPage.submitFirstCartItemNote();

cartPage.getFirstCartItemNoteField().should('have.value', staticFixtures.cartItemNote);
});

it('customer should be able to remove a cart item note', (): void => {
customerLoginScenario.execute({
email: dynamicFixtures.customer.email,
password: staticFixtures.defaultPassword,
});
cartPage.visit();
cartPage.addFirstCartItemNote({ message: staticFixtures.cartItemNote });
cartPage.submitFirstCartItemNote();
cartPage.clearFirstCartItemNote();

cartPage.getFirstCartItemNoteField().should('have.value', '');
});
});
72 changes: 72 additions & 0 deletions cypress/e2e/yves/cart/change-cart-item-quantity.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import { container } from '@utils';
import { ChangeCartItemQuantityStaticFixtures, ChangeCartItemQuantityDynamicFixtures } from '@interfaces/yves';
import { CartPage, MultiCartPage } from '@pages/yves';
import { CustomerLoginScenario } from '@scenarios/yves';

describe('change cart item quantity', { tags: ['@cart'] }, (): void => {
const cartPage = container.get(CartPage);
const multiCartPage = container.get(MultiCartPage);
const customerLoginScenario = container.get(CustomerLoginScenario);

let staticFixtures: ChangeCartItemQuantityStaticFixtures;
let dynamicFixtures: ChangeCartItemQuantityDynamicFixtures;

before((): void => {
({ staticFixtures, dynamicFixtures } = Cypress.env());
});

it('guest customer should be able to increase a cart item quantity', (): void => {
cartPage.visit();
cartPage.quickAddToCart({ sku: dynamicFixtures.product.sku, quantity: 2 });
cartPage.changeQuantity({ sku: dynamicFixtures.product.sku, quantity: 3 });

cartPage.getCartSummary().contains('€900.00');
cartPage.getCartItemChangeQuantityField(dynamicFixtures.product.sku).should('have.value', '3');
});

it('guest customer should be able to decrease a cart item quantity', (): void => {
cartPage.visit();
cartPage.quickAddToCart({ sku: dynamicFixtures.product.sku, quantity: 2 });
cartPage.changeQuantity({ sku: dynamicFixtures.product.sku, quantity: 1 });

cartPage.getCartSummary().contains('€300.00');
cartPage.getCartItemChangeQuantityField(dynamicFixtures.product.sku).should('have.value', '1');
});

it('customer should be able to increase a cart item quantity', (): void => {
customerLoginScenario.execute({
email: dynamicFixtures.customer.email,
password: staticFixtures.defaultPassword,
});
multiCartPage.visit();
multiCartPage.selectCart({ name: dynamicFixtures.quote.name });
cartPage.changeQuantity({ sku: dynamicFixtures.product.sku, quantity: 3 });

cartPage.getCartSummary().contains('€900.00');
cartPage.getCartItemChangeQuantityField(dynamicFixtures.product.sku).should('have.value', '3');
});

it('customer should be able to apply a discount increasing a cart item quantity', (): void => {
customerLoginScenario.execute({
email: dynamicFixtures.customer.email,
password: staticFixtures.defaultPassword,
});
multiCartPage.visit();
multiCartPage.selectCart({ name: dynamicFixtures.quote.name });
cartPage.changeQuantity({ sku: dynamicFixtures.product.sku, quantity: 4 });

cartPage.getCartDiscountSummary().contains(dynamicFixtures.discount.display_name);
});

it('customer should be able to decrease a cart item quantity', (): void => {
customerLoginScenario.execute({
email: dynamicFixtures.customer.email,
password: staticFixtures.defaultPassword,
});
cartPage.visit();
cartPage.changeQuantity({ sku: dynamicFixtures.product.sku, quantity: 1 });

cartPage.getCartSummary().contains('€300.00');
cartPage.getCartItemChangeQuantityField(dynamicFixtures.product.sku).should('have.value', '1');
});
});
36 changes: 36 additions & 0 deletions cypress/e2e/yves/cart/remove-cart-item.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { container } from '@utils';
import { RemoveCartItemStaticFixtures, RemoveCartItemDynamicFixtures } from '@interfaces/yves';
import { CartPage } from '@pages/yves';
import { CustomerLoginScenario } from '@scenarios/yves';

describe('remove cart item', { tags: ['@cart'] }, (): void => {
const cartPage = container.get(CartPage);
const customerLoginScenario = container.get(CustomerLoginScenario);

let staticFixtures: RemoveCartItemStaticFixtures;
let dynamicFixtures: RemoveCartItemDynamicFixtures;

before((): void => {
({ staticFixtures, dynamicFixtures } = Cypress.env());
});

it('guest customer should be able to remove a cart item', (): void => {
cartPage.visit();
cartPage.quickAddToCart({ sku: dynamicFixtures.product1.sku, quantity: 1 });
cartPage.quickAddToCart({ sku: dynamicFixtures.product2.sku, quantity: 2 });
cartPage.removeProduct({ sku: dynamicFixtures.product2.sku });

cartPage.getCartSummary().contains('€300.00');
});

it('customer should be able to remove a cart item', (): void => {
customerLoginScenario.execute({
email: dynamicFixtures.customer.email,
password: staticFixtures.defaultPassword,
});
cartPage.visit();
cartPage.removeProduct({ sku: dynamicFixtures.product1.sku });

cartPage.getCartSummary().contains('€300.00');
});
});
2 changes: 0 additions & 2 deletions cypress/e2e/yves/comments/cart-comments.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ describe('cart comments', { tags: ['@comments'] }, (): void => {
multiCartPage.visit();
multiCartPage.selectCart({ name: dynamicFixtures.quote.name });

commentCartPage.visit();
staticFixtures.commentsToAdd.forEach((commentMessage) => {
commentCartPage.add({ message: commentMessage });
commentCartPage.getCommentThreadListSection().contains(commentMessage).should('exist');
Expand All @@ -53,7 +52,6 @@ describe('cart comments', { tags: ['@comments'] }, (): void => {
multiCartPage.visit();
multiCartPage.selectCart({ name: dynamicFixtures.emptyQuote.name });

commentCartPage.visit();
staticFixtures.commentsToAdd.forEach((commentMessage) => {
commentCartPage.add({ message: commentMessage });
commentCartPage.getCommentThreadListSection().contains(commentMessage).should('exist');
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
{
"data": {
"type": "dynamic-fixtures",
"attributes": {
"synchronize": true,
"operations": [
{
"type": "transfer",
"name": "StoreTransfer",
"key": "store",
"arguments": { "id_store": 1 }
},
{
"type": "transfer",
"name": "LocaleTransfer",
"key": "locale",
"arguments": { "id_locale": 66, "locale_name": "en_US" }
},
{
"type": "helper",
"name": "haveCountry",
"key": "country"
},
{
"type": "helper",
"name": "haveCustomer",
"key": "customer",
"arguments": [{ "locale": "#locale", "password": "change123" }]
},
{
"type": "helper",
"name": "haveCustomerAddress",
"key": "address",
"arguments": [{ "fkCustomer": "#customer.id_customer", "fkCountry": "#country.id_country" }]
},
{
"type": "helper",
"name": "confirmCustomer",
"key": "confirmedCustomer",
"arguments": ["#customer"]
},
{
"type": "helper",
"name": "haveFullProduct",
"key": "product"
},
{
"type": "transfer",
"name": "ProductImageTransfer",
"key": "productImage",
"arguments": {
"externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/30691822_1486.jpg",
"externalUrlLarge": "https://images.icecat.biz/img/gallery/30691822_1486.jpg"
}
},
{
"type": "helper",
"name": "haveProductImageSet",
"arguments": [
{
"name": "default",
"idProduct": "#product.id_product_concrete",
"idProductAbstract": "#product.fk_product_abstract",
"productImages": ["#productImage"]
}
]
},
{
"type": "helper",
"name": "havePriceProduct",
"key": "productWithPrice",
"arguments": [
{
"skuProductAbstract": "#product.abstract_sku",
"skuProduct": "#product.sku",
"moneyValue": {
"netAmount": 50000,
"grossAmount": 50000
}
}
]
},
{
"type": "helper",
"name": "haveProductInStockForStore",
"key": "productWithPriceAndStore",
"arguments": ["#store", { "sku": "#product.sku", "isNeverOutOfStock": "1" }]
},
{
"type": "helper",
"name": "havePersistentQuote",
"key": "quote",
"arguments": [
{
"customer": "#customer",
"items": [
{
"sku": "#product.sku",
"abstractSku": "#product.abstract_sku",
"name": "#product.name",
"quantity": 1,
"unitPrice": 30000
}
]
}
]
},
{
"type": "helper",
"name": "haveUser",
"key": "rootUser",
"arguments": [{ "password": "change123" }]
},
{
"type": "helper",
"name": "addUserToGroup",
"arguments": ["#rootUser.id_user", 1]
}
]
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"defaultPassword": "change123",
"orderReference": "test-order-reference"
}
Loading
Loading