diff --git a/cypress/apiRequests/Channels.js b/cypress/apiRequests/Channels.js
index b66c39804..6d8872798 100644
--- a/cypress/apiRequests/Channels.js
+++ b/cypress/apiRequests/Channels.js
@@ -20,41 +20,24 @@ class Channels {
}`;
return cy.sendRequestWithQuery(createChannelMutation);
}
-
- deleteTestChannels(nameStartsWith) {
+ getChannels() {
const getChannelsInfoQuery = `query{
- channels{
- name
- id
- isActive
- slug
- currencyCode
- }
- }
- `;
- cy.sendRequestWithQuery(getChannelsInfoQuery).then(resp => {
- const channels = new Set(resp.body.data.channels);
- channels.forEach(element => {
- if (element.name.startsWith(nameStartsWith)) {
- const targetChannels = Array.from(channels).filter(function(channel) {
- return (
- element.currencyCode === channel.currencyCode &&
- element.id !== channel.id
- );
- });
- if (targetChannels[0]) {
- this.deleteChannel(element.id, targetChannels[0].id);
- channels.delete(element);
- }
- }
- });
- });
+ channels{
+ name
+ id
+ isActive
+ slug
+ currencyCode
+ }
+ }
+ `;
+ return cy.sendRequestWithQuery(getChannelsInfoQuery);
}
- deleteChannel(channelId, targetChennelId) {
+ deleteChannel(channelId, targetChannelId) {
const deleteChannelMutation = `mutation{
channelDelete(id: "${channelId}", input:{
- targetChannel: "${targetChennelId}"
+ targetChannel: "${targetChannelId}"
}){
channel{
name
diff --git a/cypress/apiRequests/HomePage.js b/cypress/apiRequests/HomePage.js
new file mode 100644
index 000000000..09026cc03
--- /dev/null
+++ b/cypress/apiRequests/HomePage.js
@@ -0,0 +1,37 @@
+class HomePage {
+ getSalesForChannel(channelSlug, period) {
+ const query = `query{
+ ordersTotal(period: ${period}, channel:"${channelSlug}"){
+ gross{
+ amount
+ }
+ }
+ }`;
+ return cy.sendRequestWithQuery(query);
+ }
+ getOrdersForChannel(channelSlug, created) {
+ const query = `query{
+ orders(created: ${created}, channel:"${channelSlug}"){
+ totalCount
+ }
+ }`;
+ return cy.sendRequestWithQuery(query);
+ }
+ getOrdersWithStatus(status, channelSlug) {
+ const query = `query{
+ orders(status: ${status}, channel:"${channelSlug}"){
+ totalCount
+ }
+ }`;
+ return cy.sendRequestWithQuery(query);
+ }
+ getProductsOutOfStock(channelSlug) {
+ const query = `query{
+ products(stockAvailability: OUT_OF_STOCK, channel:"${channelSlug}"){
+ totalCount
+ }
+ }`;
+ return cy.sendRequestWithQuery(query);
+ }
+}
+export default HomePage;
diff --git a/cypress/elements/dashboard/dashboard-selectors.js b/cypress/elements/homePage/homePage-selectors.js
similarity index 91%
rename from cypress/elements/dashboard/dashboard-selectors.js
rename to cypress/elements/homePage/homePage-selectors.js
index 40cc039fe..221cb68e8 100644
--- a/cypress/elements/dashboard/dashboard-selectors.js
+++ b/cypress/elements/homePage/homePage-selectors.js
@@ -1,4 +1,4 @@
-export const DASHBOARD_SELECTORS = {
+export const HOMEPAGE_SELECTORS = {
sales: "[data-test-id='sales-analytics']",
orders: "[data-test-id='orders-analytics']",
activity: "[data-test-id='activity-card']",
diff --git a/cypress/integration/channels.js b/cypress/integration/channels.js
index 31db58232..bfee7abae 100644
--- a/cypress/integration/channels.js
+++ b/cypress/integration/channels.js
@@ -14,16 +14,18 @@ import { ORDERS_SELECTORS } from "../elements/orders/orders-selectors";
import { BUTTON_SELECTORS } from "../elements/shared/button-selectors";
import ChannelsSteps from "../steps/channelsSteps";
import { urlList } from "../url/urlList";
+import ChannelsUtils from "../utils/channelsUtils";
describe("Channels", () => {
const channelStartsWith = "Cypress:";
const currency = "PLN";
const channels = new Channels();
+ const channelsUtils = new ChannelsUtils();
const channelsSteps = new ChannelsSteps();
before(() => {
cy.clearSessionData().loginUserViaRequest();
- channels.deleteTestChannels(channelStartsWith);
+ channelsUtils.deleteChannels(channelStartsWith);
});
beforeEach(() => {
diff --git a/cypress/integration/dashboard.js b/cypress/integration/dashboard.js
deleted file mode 100644
index c9983d820..000000000
--- a/cypress/integration/dashboard.js
+++ /dev/null
@@ -1,143 +0,0 @@
-import faker from "faker";
-
-import Channels from "../apiRequests/Channels";
-import Customer from "../apiRequests/Customer";
-import { DASHBOARD_SELECTORS } from "../elements/dashboard/dashboard-selectors";
-import { HEADER_SELECTORS } from "../elements/header/header-selectors";
-import OrdersUtils from "../utils/ordersUtils";
-import ProductsUtils from "../utils/productsUtils";
-import ShippingUtils from "../utils/shippingUtils";
-
-//
-describe("User authorization", () => {
- const startsWith = "Cy-";
-
- const customer = new Customer();
- const channels = new Channels();
- const productsUtils = new ProductsUtils();
- const shippingUtils = new ShippingUtils();
- const ordersUtils = new OrdersUtils();
-
- before(() => {
- cy.clearSessionData().loginUserViaRequest();
- customer.deleteCustomers(startsWith);
- shippingUtils.deleteShipping(startsWith);
- productsUtils.deleteProducts(startsWith);
- channels.deleteTestChannels(startsWith);
- });
-
- beforeEach(() => {
- cy.clearSessionData().loginUserViaRequest();
- });
-
- it("should all elements be visible on the dashboard", () => {
- cy.visit("/")
- .softAssertVisibility(DASHBOARD_SELECTORS.sales)
- .softAssertVisibility(DASHBOARD_SELECTORS.orders)
- .softAssertVisibility(DASHBOARD_SELECTORS.activity)
- .softAssertVisibility(DASHBOARD_SELECTORS.topProducts)
- .softAssertVisibility(DASHBOARD_SELECTORS.ordersReadyToFulfill)
- .softAssertVisibility(DASHBOARD_SELECTORS.paymentsWaitingForCapture)
- .softAssertVisibility(DASHBOARD_SELECTORS.productsOutOfStock);
- });
-
- it("should correct amount of orders be displayed", () => {
- const randomName = startsWith + faker.random.number();
- const randomEmail = randomName + "@example.com";
- const randomNameProductOutOfStock = `${startsWith}${faker.random.number()}`;
- const shippingPrice = 12;
- const productPrice = 22;
- const sales = productPrice * 2 + shippingPrice;
-
- // Create channel, customer, product - everything needed to create order
- cy.fixture("addresses").then(json => {
- channels
- .createChannel(true, randomName, randomName, json.plAddress.currency)
- .then(channelsResp => {
- const channelId = channelsResp.body.data.channelCreate.channel.id;
- const channelSlug = channelsResp.body.data.channelCreate.channel.slug;
- customer
- .createCustomer(randomEmail, randomName, json.plAddress)
- .then(resp => {
- const customerId = resp.body.data.customerCreate.user.id;
- const customerEmail = resp.body.data.customerCreate.user.email;
- shippingUtils
- .createShipping(
- channelId,
- randomName,
- json.plAddress,
- shippingPrice
- )
- .then(() => {
- const shippingId = shippingUtils.getShippingMethodId();
- const warehouseId = shippingUtils.getWarehouseId();
- productsUtils
- .createTypeAttributeAndCategoryForProduct(randomName)
- .then(() => {
- const productTypeId = productsUtils.getProductTypeId();
- const attributeId = productsUtils.getAttributeId();
- const categoryId = productsUtils.getCategoryId();
- productsUtils
- .createProductInChannel(
- randomName,
- channelId,
- warehouseId,
- 10,
- productTypeId,
- attributeId,
- categoryId,
- productPrice
- )
- .then(() => {
- const variantsList = productsUtils.getCreatedVariants();
-
- // Create order ready to fulfill
- ordersUtils.createReadyToFulfillOrder(
- customerId,
- shippingId,
- channelId,
- variantsList
- );
-
- // Create order waiting for capture
- ordersUtils.createWaitingForCaptureOrder(
- channelSlug,
- customerEmail,
- variantsList,
- shippingId
- );
- });
-
- // Create product out of stock
- productsUtils.createProductInChannel(
- randomNameProductOutOfStock,
- channelId,
- warehouseId,
- 0,
- productTypeId,
- attributeId,
- categoryId,
- productPrice
- );
- });
- });
- });
- });
- });
- cy.visit("/");
- cy.get(HEADER_SELECTORS.channelSelect)
- .click()
- .get(HEADER_SELECTORS.channelSelectList)
- .contains(randomName)
- .click()
- .waitForGraph("Home");
- const salesRegexp = new RegExp(`\\D+${sales}[\,.]00\\D*`);
- cy.contains(salesRegexp).should("be.visible");
- const regex = /^1\D+/;
- cy.softAssertMatch(DASHBOARD_SELECTORS.ordersReadyToFulfill, regex)
- .softAssertMatch(DASHBOARD_SELECTORS.paymentsWaitingForCapture, regex)
- .softAssertMatch(DASHBOARD_SELECTORS.productsOutOfStock, regex)
- .softAssertMatch(DASHBOARD_SELECTORS.sales, salesRegexp)
- .softAssertMatch(DASHBOARD_SELECTORS.orders, /\D+2\D*/);
- });
-});
diff --git a/cypress/integration/homePage.js b/cypress/integration/homePage.js
new file mode 100644
index 000000000..c1f7e5cfc
--- /dev/null
+++ b/cypress/integration/homePage.js
@@ -0,0 +1,205 @@
+import faker from "faker";
+
+import Customer from "../apiRequests/Customer";
+import { HOMEPAGE_SELECTORS } from "../elements/homePage/homePage-selectors";
+import HomePageSteps from "../steps/homePageSteps";
+import { urlList } from "../url/urlList";
+import ChannelsUtils from "../utils/channelsUtils";
+import HomePageUtils from "../utils/homePageUtils";
+import OrdersUtils from "../utils/ordersUtils";
+import ProductsUtils from "../utils/productsUtils";
+import ShippingUtils from "../utils/shippingUtils";
+
+//
+describe("User authorization", () => {
+ const startsWith = "Cy-";
+
+ const customer = new Customer();
+ const productsUtils = new ProductsUtils();
+ const shippingUtils = new ShippingUtils();
+ const ordersUtils = new OrdersUtils();
+ const channelsUtils = new ChannelsUtils();
+ const homePageUtils = new HomePageUtils();
+ const homePageSteps = new HomePageSteps();
+
+ let customerId;
+ let defaultChannel;
+ const productPrice = 22;
+ const shippingPrice = 12;
+ const randomName = startsWith + faker.random.number();
+ const randomEmail = randomName + "@example.com";
+
+ before(() => {
+ cy.clearSessionData().loginUserViaRequest();
+ customer.deleteCustomers(startsWith);
+ shippingUtils.deleteShipping(startsWith);
+ productsUtils.deleteProducts(startsWith);
+
+ channelsUtils.getDefaultChannel().then(channel => {
+ defaultChannel = channel;
+ cy.fixture("addresses").then(addressesFixture => {
+ customer
+ .createCustomer(randomEmail, randomName, addressesFixture.plAddress)
+ .then(resp => {
+ customerId = resp.body.data.customerCreate.user.id;
+ shippingUtils
+ .createShipping(
+ defaultChannel.id,
+ randomName,
+ addressesFixture.plAddress,
+ shippingPrice
+ )
+ .then(() => {
+ const warehouseId = shippingUtils.getWarehouseId();
+ productsUtils
+ .createTypeAttributeAndCategoryForProduct(randomName)
+ .then(() => {
+ const productTypeId = productsUtils.getProductTypeId();
+ const attributeId = productsUtils.getAttributeId();
+ const categoryId = productsUtils.getCategoryId();
+ productsUtils.createProductInChannel(
+ randomName,
+ defaultChannel.id,
+ warehouseId,
+ 20,
+ productTypeId,
+ attributeId,
+ categoryId,
+ productPrice
+ );
+ });
+ });
+ });
+ });
+ });
+ });
+
+ beforeEach(() => {
+ cy.clearSessionData().loginUserViaRequest();
+ });
+
+ it("should all elements be visible on the dashboard", () => {
+ cy.visit(urlList.homePage)
+ .softAssertVisibility(HOMEPAGE_SELECTORS.sales)
+ .softAssertVisibility(HOMEPAGE_SELECTORS.orders)
+ .softAssertVisibility(HOMEPAGE_SELECTORS.activity)
+ .softAssertVisibility(HOMEPAGE_SELECTORS.topProducts)
+ .softAssertVisibility(HOMEPAGE_SELECTORS.ordersReadyToFulfill)
+ .softAssertVisibility(HOMEPAGE_SELECTORS.paymentsWaitingForCapture)
+ .softAssertVisibility(HOMEPAGE_SELECTORS.productsOutOfStock);
+ });
+
+ it("should correct amount of ready to fullfil orders be displayed", () => {
+ homePageUtils
+ .getOrdersReadyToFulfill(defaultChannel.slug)
+ .as("ordersReadyToFulfill");
+
+ ordersUtils.createReadyToFulfillOrder(
+ customerId,
+ shippingUtils.getShippingMethodId(),
+ defaultChannel.id,
+ productsUtils.getCreatedVariants()
+ );
+ cy.get("@ordersReadyToFulfill").then(ordersReadyToFulfill => {
+ const regexp = new RegExp(`^${ordersReadyToFulfill + 1}\D*`);
+ cy.visit(urlList.homePage);
+ homePageSteps.changeChannel(defaultChannel.name);
+ cy.contains(HOMEPAGE_SELECTORS.ordersReadyToFulfill, regexp).should(
+ "be.visible"
+ );
+ });
+ });
+ it("should correct amount of payments waiting for capture be displayed", () => {
+ homePageUtils
+ .getOrdersReadyForCapture(defaultChannel.slug)
+ .as("ordersReadyForCapture");
+ const shippingId = shippingUtils.getShippingMethodId();
+ const variantsList = productsUtils.getCreatedVariants();
+
+ ordersUtils.createWaitingForCaptureOrder(
+ defaultChannel.slug,
+ randomEmail,
+ variantsList,
+ shippingId
+ );
+
+ cy.get("@ordersReadyForCapture").then(ordersReadyForCapture => {
+ const regexp = new RegExp(`^${ordersReadyForCapture + 1}\D*`);
+ cy.visit(urlList.homePage);
+ homePageSteps.changeChannel(defaultChannel.name);
+ cy.contains(HOMEPAGE_SELECTORS.ordersReadyForCapture, regexp).should(
+ "be.visible"
+ );
+ });
+ });
+ it("should correct amount of products out of stock be displayed", () => {
+ homePageUtils
+ .getProductsOutOfStock(defaultChannel.slug)
+ .as("productsOutOfStock");
+ const productOutOfStockRandomName = startsWith + faker.random.number();
+ const productsOutOfStockUtils = new ProductsUtils();
+ const warehouseId = shippingUtils.getWarehouseId();
+ const productTypeId = productsUtils.getProductTypeId();
+ const attributeId = productsUtils.getAttributeId();
+ const categoryId = productsUtils.getCategoryId();
+
+ productsOutOfStockUtils.createProductInChannel(
+ productOutOfStockRandomName,
+ defaultChannel.id,
+ warehouseId,
+ 0,
+ productTypeId,
+ attributeId,
+ categoryId,
+ productPrice
+ );
+
+ cy.get("@productsOutOfStock").then(productsOutOfStock => {
+ const regexp = new RegExp(`^${productsOutOfStock + 1}\\D*`);
+ cy.visit(urlList.homePage);
+ homePageSteps.changeChannel(defaultChannel.name);
+ cy.contains(HOMEPAGE_SELECTORS.productsOutOfStock, regexp).should(
+ "be.visible"
+ );
+ });
+ });
+ it("should correct amount of sales be displayed", () => {
+ homePageUtils.getSalesAmount(defaultChannel.slug).as("salesAmount");
+
+ ordersUtils.createReadyToFulfillOrder(
+ customerId,
+ shippingUtils.getShippingMethodId(),
+ defaultChannel.id,
+ productsUtils.getCreatedVariants()
+ );
+
+ cy.get("@salesAmount").then(salesAmount => {
+ let totalAmount = salesAmount + productPrice;
+ totalAmount = totalAmount
+ .toFixed(2)
+ .toString()
+ .replace(".", "[,.]");
+ const regexp = new RegExp(`\\D*${totalAmount}\\D*`);
+ cy.visit(urlList.homePage);
+ homePageSteps.changeChannel(defaultChannel.name);
+ cy.contains(HOMEPAGE_SELECTORS.sales, regexp).should("be.visible");
+ });
+ });
+ it("should correct amount of orders be displayed", () => {
+ homePageUtils.getTodaysOrders(defaultChannel.slug).as("todaysOrders");
+
+ ordersUtils.createReadyToFulfillOrder(
+ customerId,
+ shippingUtils.getShippingMethodId(),
+ defaultChannel.id,
+ productsUtils.getCreatedVariants()
+ );
+
+ cy.get("@todaysOrders").then(todaysOrders => {
+ const regexp = new RegExp(`\\D*${todaysOrders + 1}\\D*`);
+ cy.visit(urlList.homePage);
+ homePageSteps.changeChannel(defaultChannel.name);
+ cy.contains(HOMEPAGE_SELECTORS.orders, regexp).should("be.visible");
+ });
+ });
+});
diff --git a/cypress/steps/homePageSteps.js b/cypress/steps/homePageSteps.js
new file mode 100644
index 000000000..bd53c0972
--- /dev/null
+++ b/cypress/steps/homePageSteps.js
@@ -0,0 +1,12 @@
+import { HEADER_SELECTORS } from "../elements/header/header-selectors";
+class HomePageSteps {
+ changeChannel(channelName) {
+ cy.get(HEADER_SELECTORS.channelSelect)
+ .click()
+ .get(HEADER_SELECTORS.channelSelectList)
+ .contains(channelName)
+ .click()
+ .waitForGraph("Home");
+ }
+}
+export default HomePageSteps;
diff --git a/cypress/utils/channelsUtils.js b/cypress/utils/channelsUtils.js
new file mode 100644
index 000000000..dbb053c6e
--- /dev/null
+++ b/cypress/utils/channelsUtils.js
@@ -0,0 +1,40 @@
+import Channels from "../apiRequests/Channels";
+
+class ChannelsUtils {
+ channels = new Channels();
+
+ deleteChannels(nameStartsWith) {
+ this.channels.getChannels().then(resp => {
+ const channelsArray = new Set(resp.body.data.channels);
+ if (channelsArray) {
+ channelsArray.forEach(element => {
+ if (element.name.startsWith(nameStartsWith)) {
+ const targetChannels = Array.from(channelsArray).filter(function(
+ channelElement
+ ) {
+ return (
+ element.currencyCode === channelElement.currencyCode &&
+ element.id !== channelElement.id
+ );
+ });
+ if (targetChannels[0]) {
+ this.channels.deleteChannel(element.id, targetChannels[0].id);
+ channelsArray.delete(element);
+ }
+ }
+ });
+ }
+ });
+ }
+ getDefaultChannel() {
+ return this.channels.getChannels().then(resp => {
+ const channelsArray = resp.body.data.channels;
+ return (this.defaultChannel = channelsArray.find(function(
+ channelElement
+ ) {
+ return channelElement.slug === "default-channel";
+ }));
+ });
+ }
+}
+export default ChannelsUtils;
diff --git a/cypress/utils/homePageUtils.js b/cypress/utils/homePageUtils.js
new file mode 100644
index 000000000..27d298105
--- /dev/null
+++ b/cypress/utils/homePageUtils.js
@@ -0,0 +1,30 @@
+import HomePage from "../apiRequests/HomePage";
+class HomePageUtils {
+ homePage = new HomePage();
+ getOrdersReadyToFulfill(channelSlug) {
+ return this.homePage
+ .getOrdersWithStatus("READY_TO_FULFILL", channelSlug)
+ .then(resp => resp.body.data.orders.totalCount);
+ }
+ getOrdersReadyForCapture(channelSlug) {
+ return this.homePage
+ .getOrdersWithStatus("READY_TO_CAPTURE", channelSlug)
+ .then(resp => resp.body.data.orders.totalCount);
+ }
+ getProductsOutOfStock(channelSlug) {
+ return this.homePage
+ .getProductsOutOfStock(channelSlug)
+ .then(resp => resp.body.data.products.totalCount);
+ }
+ getSalesAmount(channelSlug) {
+ return this.homePage
+ .getSalesForChannel(channelSlug, "TODAY")
+ .then(resp => resp.body.data.ordersTotal.gross.amount);
+ }
+ getTodaysOrders(channelSlug) {
+ return this.homePage
+ .getOrdersForChannel(channelSlug, "TODAY")
+ .then(resp => resp.body.data.orders.totalCount);
+ }
+}
+export default HomePageUtils;