diff --git a/cypress/apiRequests/Warehouse.js b/cypress/apiRequests/Warehouse.js index 1b97f7499..ec2f9c320 100644 --- a/cypress/apiRequests/Warehouse.js +++ b/cypress/apiRequests/Warehouse.js @@ -26,6 +26,7 @@ export function createWarehouse({ name, shippingZone, address, slug = name }) { .sendRequestWithQuery(mutation) .its("body.data.createWarehouse.warehouse"); } + export function getWarehouses(first, search) { const query = `query{ warehouses(first:${first}, filter:{ @@ -43,6 +44,7 @@ export function getWarehouses(first, search) { .sendRequestWithQuery(query) .then(resp => resp.body.data.warehouses.edges); } + export function deleteWarehouse(warehouseId) { const mutation = `mutation{ deleteWarehouse(id:"${warehouseId}"){ @@ -54,3 +56,29 @@ export function deleteWarehouse(warehouseId) { }`; return cy.sendRequestWithQuery(mutation); } + +export function getWarehouse(warehouseId) { + const query = `query{ + warehouse(id:"${warehouseId}"){ + id + name + address{ + companyName + streetAddress1 + streetAddress2 + city + postalCode + countryArea + phone + } + shippingZones(first:100){ + edges{ + node{ + id + } + } + } + } + }`; + return cy.sendRequestWithQuery(query).its("body.data.warehouse"); +} diff --git a/cypress/elements/warehouses/warehouse-details.js b/cypress/elements/warehouses/warehouse-details.js new file mode 100644 index 000000000..1a634cabb --- /dev/null +++ b/cypress/elements/warehouses/warehouse-details.js @@ -0,0 +1,3 @@ +export const WAREHOUSES_DETAILS = { + nameInput: '[name="name"]' +}; diff --git a/cypress/elements/warehouses/warehouses-list.js b/cypress/elements/warehouses/warehouses-list.js new file mode 100644 index 000000000..6fa7ba3cc --- /dev/null +++ b/cypress/elements/warehouses/warehouses-list.js @@ -0,0 +1,3 @@ +export const WAREHOUSES_LIST = { + createNewButton: '[data-test-id="createWarehouse"]' +}; diff --git a/cypress/fixtures/addresses.json b/cypress/fixtures/addresses.json index a4ab78ac7..023ec7cb5 100644 --- a/cypress/fixtures/addresses.json +++ b/cypress/fixtures/addresses.json @@ -23,7 +23,7 @@ "postalCode": "70957", "country": "US", "countryArea": "LA", - "phone": "2025550189", + "phone": "+12025550189", "currency": "USD", "countryFullName": "United States of America" } diff --git a/cypress/integration/allEnv/configuration/warehouse.js b/cypress/integration/allEnv/configuration/warehouse.js index 8c3820023..851992860 100644 --- a/cypress/integration/allEnv/configuration/warehouse.js +++ b/cypress/integration/allEnv/configuration/warehouse.js @@ -1,25 +1,132 @@ // -import { urlList } from "../../../url/urlList"; +import faker from "faker"; + +import { createShippingZone } from "../../../apiRequests/ShippingMethod"; +import { createWarehouse, getWarehouse } from "../../../apiRequests/Warehouse"; +import { BUTTON_SELECTORS } from "../../../elements/shared/button-selectors"; +import { SHIPPING_ZONE_DETAILS } from "../../../elements/shipping/shipping-zone-details"; +import { WAREHOUSES_DETAILS } from "../../../elements/warehouses/warehouse-details"; +import { WAREHOUSES_LIST } from "../../../elements/warehouses/warehouses-list"; +import { fillUpBasicAddress } from "../../../steps/shared/addressForm"; +import { fillAutocompleteSelect } from "../../../steps/shared/autocompleteSelect"; +import { + shippingZoneDetailsUrl, + urlList, + warehouseDetailsUrl +} from "../../../url/urlList"; +import { getDefaultChannel } from "../../../utils/channelsUtils"; +import { deleteShippingStartsWith } from "../../../utils/shippingUtils"; describe("Warehouse settings", () => { + const startsWith = "CyWarehouse"; + let usAddress; + + before(() => { + cy.clearSessionData().loginUserViaRequest(); + deleteShippingStartsWith(startsWith); + cy.fixture("addresses").then(addresses => { + usAddress = addresses.usAddress; + }); + }); + beforeEach(() => { - cy.clearSessionData(); + cy.clearSessionData().loginUserViaRequest(); }); - xit("Warehouse section visible in the configuration", () => { - cy.visit(urlList.configuration) - .loginUser() - .get("[data-test-id=warehouses][data-test=settingsSubsection]") - .click(); - cy.location("pathname").should("eq", "/warehouses/"); - }); - - xit("Editing warehouse is available", () => { + it("should create warehouse", () => { + const name = `${startsWith}${faker.datatype.number()}`; cy.visit(urlList.warehouses) - .loginUser() - .get("[data-test=editButton]") - .first() + .get(WAREHOUSES_LIST.createNewButton) + .click(); + cy.get(WAREHOUSES_DETAILS.nameInput).type(name); + fillUpBasicAddress(usAddress); + cy.addAliasToGraphRequest("WarehouseCreate") + .get(BUTTON_SELECTORS.confirm) .click() - .get("[data-test=generalInformationSection]"); + .wait("@WarehouseCreate") + .its("response.body.data.createWarehouse.warehouse") + .then(warehouse => { + getWarehouse(warehouse.id); + }) + .then(warehouse => { + const addressResp = warehouse.address; + expect(warehouse.name).to.be.eq(name); + expect(addressResp).to.have.property( + "city", + usAddress.city.toUpperCase() + ); + expect(addressResp).to.have.property( + "countryArea", + usAddress.countryArea + ); + expect(addressResp).to.have.property("phone", usAddress.phone); + expect(addressResp).to.have.property( + "postalCode", + usAddress.postalCode + ); + expect(addressResp).to.have.property( + "streetAddress1", + usAddress.streetAddress1 + ); + expect(addressResp).to.have.property( + "streetAddress2", + usAddress.streetAddress2 + ); + }); + }); + + it("should add warehouse to shipping zone", () => { + const name = `${startsWith}${faker.datatype.number()}`; + let defaultChannel; + let warehouse; + let shippingZone; + + getDefaultChannel() + .then(channelResp => { + defaultChannel = channelResp; + createWarehouse({ + name, + address: usAddress + }); + }) + .then(warehouseResp => { + warehouse = warehouseResp; + createShippingZone(name, "US", defaultChannel.id); + }) + .then(shippingZoneResp => { + shippingZone = shippingZoneResp; + cy.visit(shippingZoneDetailsUrl(shippingZone.id)); + fillAutocompleteSelect( + SHIPPING_ZONE_DETAILS.warehouseSelector, + warehouse.name + ); + cy.addAliasToGraphRequest("UpdateShippingZone") + .get(BUTTON_SELECTORS.confirm) + .click() + .wait("@UpdateShippingZone"); + getWarehouse(warehouse.id); + }) + .then(warehouseResp => { + expect(warehouseResp.shippingZones.edges[0].node.id).to.be.eq( + shippingZone.id + ); + }); + }); + + it("should delete warehouse", () => { + const name = `${startsWith}${faker.datatype.number()}`; + createWarehouse({ + name, + address: usAddress + }).then(warehouse => { + cy.visit(warehouseDetailsUrl(warehouse.id)) + .get(BUTTON_SELECTORS.deleteButton) + .click() + .addAliasToGraphRequest("WarehouseDelete") + .get(BUTTON_SELECTORS.submit) + .click() + .wait("@WarehouseDelete"); + getWarehouse(warehouse.id).should("be.null"); + }); }); }); diff --git a/cypress/steps/shared/addressForm.js b/cypress/steps/shared/addressForm.js index 3836b41ff..633fb12b4 100644 --- a/cypress/steps/shared/addressForm.js +++ b/cypress/steps/shared/addressForm.js @@ -6,8 +6,13 @@ export function fillUpAddressForm(address) { cy.get(ADDRESS_SELECTORS.firstName) .type(address.firstName) .get(ADDRESS_SELECTORS.lastName) - .type(address.lastName) - .get(ADDRESS_SELECTORS.companyName) + .type(address.lastName); + fillUpBasicAddress(address); + cy.get(BUTTON_SELECTORS.submit).click(); +} + +export function fillUpBasicAddress(address) { + cy.get(ADDRESS_SELECTORS.companyName) .type(address.companyName) .get(ADDRESS_SELECTORS.phone) .type(address.phone) @@ -20,8 +25,5 @@ export function fillUpAddressForm(address) { .get(ADDRESS_SELECTORS.postalCode) .type(address.postalCode); fillAutocompleteSelect(ADDRESS_SELECTORS.country, address.countryFullName); - cy.get(ADDRESS_SELECTORS.countryArea) - .type(address.countryArea) - .get(BUTTON_SELECTORS.submit) - .click(); + cy.get(ADDRESS_SELECTORS.countryArea).type(address.countryArea); } diff --git a/cypress/url/urlList.js b/cypress/url/urlList.js index 43cc0af82..084f4e312 100644 --- a/cypress/url/urlList.js +++ b/cypress/url/urlList.js @@ -26,5 +26,11 @@ export const staffMemberDetailsUrl = staffMemberId => export const permissionGroupDetails = permissionGroupId => `${urlList.permissionsGroups}${permissionGroupId}`; +export const shippingZoneDetailsUrl = shippingZoneId => + `${urlList.shippingMethods}${shippingZoneId}`; + +export const warehouseDetailsUrl = warehouseId => + `${urlList.warehouses}${warehouseId}`; + export const productTypeDetailsUrl = productTypeId => - `${urlList.productTypes}${productTypeId}`; + `${urlList.productTypes}${productTypeId}`; \ No newline at end of file diff --git a/src/components/ActionDialog/DialogButtons.tsx b/src/components/ActionDialog/DialogButtons.tsx index ddf73354f..b58f61663 100644 --- a/src/components/ActionDialog/DialogButtons.tsx +++ b/src/components/ActionDialog/DialogButtons.tsx @@ -67,6 +67,7 @@ const DialogButtons: React.FC = props => { className={classNames({ [classes.deleteButton]: variant === "delete" })} + data-test-id="submit" data-test="submit" > {confirmButtonLabel || diff --git a/src/components/CompanyAddressInput/CompanyAddressForm.tsx b/src/components/CompanyAddressInput/CompanyAddressForm.tsx index 486c0e1d4..727e640a8 100644 --- a/src/components/CompanyAddressInput/CompanyAddressForm.tsx +++ b/src/components/CompanyAddressInput/CompanyAddressForm.tsx @@ -147,6 +147,7 @@ const CompanyAddressForm: React.FC = props => { = ({ label: intl.formatMessage(messages.selectFieldAddText), onClick: onAdd }} + testId="warehouses" choices={choices} displayValues={displayValues} fetchChoices={onSearchChange} diff --git a/src/storybook/__snapshots__/Stories.test.ts.snap b/src/storybook/__snapshots__/Stories.test.ts.snap index 3b2b43abf..eb937606c 100644 --- a/src/storybook/__snapshots__/Stories.test.ts.snap +++ b/src/storybook/__snapshots__/Stories.test.ts.snap @@ -22874,7 +22874,7 @@ exports[`Storyshots Shipping zones details / Settings Card default 1`] = `