diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f89d4a5..9b55124a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,14 @@ ## [Unreleased] +### Changed +- Improved/Fixed B2B new login user testcase + ### Changed - E2E Tests improvements +- [ENGINEERS-1228] - Use multiple email addresses in B2B tests + ## [2.4.2] - 2023-03-12 ### Changed diff --git a/cypress-shared/integration/b2b/2.1.1-create_&_approve_organizationA.spec.js b/cypress-shared/integration/b2b/2.1.1-create_&_approve_organizationA.spec.js index a8c311e7..0880c94f 100644 --- a/cypress-shared/integration/b2b/2.1.1-create_&_approve_organizationA.spec.js +++ b/cypress-shared/integration/b2b/2.1.1-create_&_approve_organizationA.spec.js @@ -15,7 +15,7 @@ describe('Create & Approve OrganizationA', () => { createOrganizationTestCase( { name: organizationName, - email: users.OrganizationAdmin1, + email: users.OrganizationAdmin1.email, }, { costCenterName: costCenter1.name, diff --git a/cypress-shared/integration/b2b/2.1.2-multi_organizations_requests_from_organizationB.spec.js b/cypress-shared/integration/b2b/2.1.2-multi_organizations_requests_from_organizationB.spec.js index d395aeaf..ac6123bd 100644 --- a/cypress-shared/integration/b2b/2.1.2-multi_organizations_requests_from_organizationB.spec.js +++ b/cypress-shared/integration/b2b/2.1.2-multi_organizations_requests_from_organizationB.spec.js @@ -11,7 +11,7 @@ describe('Create, Decline OrganizationB', () => { cy.clearLocalStorage() }) loginViaCookies({ storeFrontCookie: false }) - const email = b2b.OrganizationB.users.OrganizationAdmin1 + const { email } = b2b.OrganizationB.users.OrganizationAdmin1 const name = b2b.OrganizationB.organizationName const costCenterName = b2b.OrganizationB.costCenter1.name const [costCenterAddress] = b2b.OrganizationB.costCenter1.addresses @@ -31,7 +31,7 @@ describe('Create, Decline OrganizationB', () => { createOrganizationTestCase( { name: organizationName, - email: users.OrganizationAdmin1, + email: users.OrganizationAdmin1.email, }, { costCenterName: costCenter1.name, diff --git a/cypress-shared/integration/b2b/2.1.3-organization_negative_testcases.spec.js b/cypress-shared/integration/b2b/2.1.3-organization_negative_testcases.spec.js index c29edbb8..408947d3 100644 --- a/cypress-shared/integration/b2b/2.1.3-organization_negative_testcases.spec.js +++ b/cypress-shared/integration/b2b/2.1.3-organization_negative_testcases.spec.js @@ -8,7 +8,7 @@ import b2b from '../../support/b2b/constants.js' describe('Organization Negative TestCases', () => { loginViaCookies({ storeFrontCookie: false }) - const email = b2b.OrganizationA.users.OrganizationAdmin1 + const { email } = b2b.OrganizationA.users.OrganizationAdmin1 createOrganizationWithoutCostCenterNameAndAddress( b2b.OrganizationA.organizationName, diff --git a/cypress-shared/integration/b2b/2.10-approver_scenarios_orgA_costcenter2.spec.js b/cypress-shared/integration/b2b/2.10-approver_scenarios_orgA_costcenter2.spec.js index fd336313..e4fbdf59 100644 --- a/cypress-shared/integration/b2b/2.10-approver_scenarios_orgA_costcenter2.spec.js +++ b/cypress-shared/integration/b2b/2.10-approver_scenarios_orgA_costcenter2.spec.js @@ -28,19 +28,13 @@ import { describe('Organization A - Cost Center A2 - Approver Scenario', () => { loginViaCookies({ storeFrontCookie: false }) - const { - organizationName, - quotes, - nonAvailableProduct, - costCenter2, - users, - gmailCreds, - } = b2b.OrganizationA + const { organizationName, quotes, nonAvailableProduct, costCenter2, users } = + b2b.OrganizationA const { organizationName: organizationB, quotes: organizationBquotes } = b2b.OrganizationB - loginToStoreFront(users.Approver2, ROLE_DROP_DOWN.Approver, gmailCreds) + loginToStoreFront(users.Approver2, ROLE_DROP_DOWN.Approver) verifySession(b2b.OrganizationA, costCenter2.name, ROLE_DROP_DOWN.Approver) productShouldNotbeAvailableTestCase(nonAvailableProduct) quoteShouldbeVisibleTestCase( diff --git a/cypress-shared/integration/b2b/2.11-approver_scenarios_orgB.spec.js b/cypress-shared/integration/b2b/2.11-approver_scenarios_orgB.spec.js index e9419670..c26f55c6 100644 --- a/cypress-shared/integration/b2b/2.11-approver_scenarios_orgB.spec.js +++ b/cypress-shared/integration/b2b/2.11-approver_scenarios_orgB.spec.js @@ -31,13 +31,12 @@ describe('Organization B - Cost Center B1 - Approver Scenario', () => { users, quotes, organizationName, - gmailCreds, } = b2b.OrganizationB const { organizationName: organizationA, quotes: organizationAQuotes } = b2b.OrganizationA - loginToStoreFront(users.Approver1, ROLE_DROP_DOWN.Approver, gmailCreds) + loginToStoreFront(users.Approver1, ROLE_DROP_DOWN.Approver) verifySession(b2b.OrganizationB, costCenter1.name, ROLE_DROP_DOWN.Approver) productShouldNotbeAvailableTestCase(nonAvailableProduct) quoteShouldbeVisibleTestCase( diff --git a/cypress-shared/integration/b2b/2.12.1-sales_admin_scenarios.spec.js b/cypress-shared/integration/b2b/2.12.1-sales_admin_scenarios.spec.js index cd7d2697..12e3cc67 100644 --- a/cypress-shared/integration/b2b/2.12.1-sales_admin_scenarios.spec.js +++ b/cypress-shared/integration/b2b/2.12.1-sales_admin_scenarios.spec.js @@ -25,13 +25,12 @@ import { salesAdminQuotesAccess } from '../../support/b2b/impersonation_quote_ac describe('Organization A - Cost Center A1 - Sales Admin Basic Scenario', () => { loginViaCookies({ storeFrontCookie: false }) - const { nonAvailableProduct, costCenter1, users, quotes, gmailCreds } = - b2b.OrganizationA + const { nonAvailableProduct, costCenter1, users, quotes } = b2b.OrganizationA const { organizationName: organizationB, quotes: organizationBQuote } = b2b.OrganizationB - loginToStoreFront(users.SalesAdmin, roleObject.SalesAdmin.role, gmailCreds) + loginToStoreFront(users.SalesAdmin, roleObject.SalesAdmin.role) verifySession(b2b.OrganizationA, costCenter1.name, roleObject.SalesAdmin.role) productShouldNotbeAvailableTestCase(nonAvailableProduct) @@ -39,7 +38,7 @@ describe('Organization A - Cost Center A1 - Sales Admin Basic Scenario', () => { userShouldNotImpersonateThisUser( roleObject.SalesAdmin.role, roleObject.SalesManager.role, - users.SalesManager + users.SalesManager.email ) salesAdminQuotesAccess(b2b.OrganizationA, organizationB, organizationBQuote) diff --git a/cypress-shared/integration/b2b/2.12.2-sales_admin_scenarios.spec.js b/cypress-shared/integration/b2b/2.12.2-sales_admin_scenarios.spec.js index c7f56420..bf97abf9 100644 --- a/cypress-shared/integration/b2b/2.12.2-sales_admin_scenarios.spec.js +++ b/cypress-shared/integration/b2b/2.12.2-sales_admin_scenarios.spec.js @@ -29,20 +29,20 @@ import { salesAdminQuotesAccess } from '../../support/b2b/impersonation_quote_ac describe('Organization A - Cost Center A1 - Sales Admin Impersonation Scenario', () => { loginViaCookies({ storeFrontCookie: false }) - const { product, costCenter1, users, quotes, gmailCreds } = b2b.OrganizationA + const { product, costCenter1, users, quotes } = b2b.OrganizationA const { organizationName: organizationB, quotes: organizationBQuote } = b2b.OrganizationB const impersonatedRole = ROLE_DROP_DOWN.Approver - loginToStoreFront(users.SalesAdmin, roleObject.SalesAdmin.role, gmailCreds) + loginToStoreFront(users.SalesAdmin, roleObject.SalesAdmin.role) verifySession(b2b.OrganizationA, costCenter1.name, roleObject.SalesAdmin.role) salesUserShouldImpersonateNonSalesUser( roleObject.SalesAdmin.role, impersonatedRole, - users.Approver1 + users.Approver1.email ) updateQuote(quotes.Buyer.quotes1, { discount: '20' }) @@ -63,7 +63,7 @@ describe('Organization A - Cost Center A1 - Sales Admin Impersonation Scenario', role: roleObject.SalesManager.role, impersonatedRole, }) - searchQuote(quote, users.Approver1) + searchQuote(quote, users.Approver1.email) stopImpersonation( b2b.OrganizationA, costCenter1.name, diff --git a/cypress-shared/integration/b2b/2.13.1-sales_manager_scenarios.spec.js b/cypress-shared/integration/b2b/2.13.1-sales_manager_scenarios.spec.js index 0700bbe8..36ad3b63 100644 --- a/cypress-shared/integration/b2b/2.13.1-sales_manager_scenarios.spec.js +++ b/cypress-shared/integration/b2b/2.13.1-sales_manager_scenarios.spec.js @@ -19,17 +19,12 @@ import { salesManagerQuotesAccess } from '../../support/b2b/impersonation_quote_ describe('Organization A - Cost Center A1 - Sales Manager Basic Scenario', () => { loginViaCookies({ storeFrontCookie: false }) - const { nonAvailableProduct, users, costCenter1, quotes, gmailCreds } = - b2b.OrganizationA + const { nonAvailableProduct, users, costCenter1, quotes } = b2b.OrganizationA const { organizationName: organizationB, quotes: organizationBQuote } = b2b.OrganizationB - loginToStoreFront( - users.SalesManager, - roleObject.SalesManager.role, - gmailCreds - ) + loginToStoreFront(users.SalesManager, roleObject.SalesManager.role) verifySession( b2b.OrganizationA, costCenter1.name, @@ -38,7 +33,7 @@ describe('Organization A - Cost Center A1 - Sales Manager Basic Scenario', () => userShouldNotImpersonateThisUser( roleObject.SalesManager.role, roleObject.SalesRepresentative.role, - users.SalesRep + users.SalesRepresentative.email ) productShouldNotbeAvailableTestCase(nonAvailableProduct) salesManagerQuotesAccess(b2b.OrganizationA, organizationB, organizationBQuote) diff --git a/cypress-shared/integration/b2b/2.13.2-sales_manager_scenarios.spec.js b/cypress-shared/integration/b2b/2.13.2-sales_manager_scenarios.spec.js index 053928aa..54b2c539 100644 --- a/cypress-shared/integration/b2b/2.13.2-sales_manager_scenarios.spec.js +++ b/cypress-shared/integration/b2b/2.13.2-sales_manager_scenarios.spec.js @@ -19,16 +19,12 @@ import { salesManagerQuotesAccess } from '../../support/b2b/impersonation_quote_ describe('Organization A - Cost Center A1 - Sales Manager Impersonation Scenario', () => { loginViaCookies({ storeFrontCookie: false }) - const { users, product, costCenter1, gmailCreds } = b2b.OrganizationA + const { users, product, costCenter1 } = b2b.OrganizationA const { organizationName: organizationB, quotes: organizationBQuote } = b2b.OrganizationB - loginToStoreFront( - users.SalesManager, - roleObject.SalesManager.role, - gmailCreds - ) + loginToStoreFront(users.SalesManager, roleObject.SalesManager.role) verifySession( b2b.OrganizationA, costCenter1.name, @@ -40,7 +36,7 @@ describe('Organization A - Cost Center A1 - Sales Manager Impersonation Scenario salesUserShouldImpersonateNonSalesUser( roleObject.SalesManager.role, impersonatedRole, - users.OrganizationAdmin1 + users.OrganizationAdmin1.email ) const quote = 'IMPERSONATE_QUOTE_2' @@ -52,7 +48,7 @@ describe('Organization A - Cost Center A1 - Sales Manager Impersonation Scenario role: roleObject.SalesManager.role, impersonatedRole, }) - searchQuote(quote, users.OrganizationAdmin1) + searchQuote(quote, users.OrganizationAdmin1.email) stopImpersonation( b2b.OrganizationA, costCenter1.name, diff --git a/cypress-shared/integration/b2b/2.14.1-sales_rep_scenarios.spec.js b/cypress-shared/integration/b2b/2.14.1-sales_rep_scenarios.spec.js index 69cb2fb2..146b83c5 100644 --- a/cypress-shared/integration/b2b/2.14.1-sales_rep_scenarios.spec.js +++ b/cypress-shared/integration/b2b/2.14.1-sales_rep_scenarios.spec.js @@ -23,16 +23,14 @@ import { salesRepQuotesAccess } from '../../support/b2b/impersonation_quote_acce describe('Organization A - Cost Center A1 - Sales Rep Basic Scenario', () => { loginViaCookies({ storeFrontCookie: false }) - const { nonAvailableProduct, users, costCenter1, quotes, gmailCreds } = - b2b.OrganizationA + const { nonAvailableProduct, users, costCenter1, quotes } = b2b.OrganizationA const { organizationName: organizationB, quotes: organizationBQuote } = b2b.OrganizationB loginToStoreFront( - users.SalesRep, - roleObject.SalesRepresentative.role, - gmailCreds + users.SalesRepresentative, + roleObject.SalesRepresentative.role ) verifySession( b2b.OrganizationA, @@ -46,7 +44,7 @@ describe('Organization A - Cost Center A1 - Sales Rep Basic Scenario', () => { userShouldNotImpersonateThisUser( roleObject.SalesRepresentative.role, roleObject.SalesManager.role, - users.SalesManager + users.SalesManager.email ) searchQuote(quotes.SalesRep.updateQuote) const price = '30.00' diff --git a/cypress-shared/integration/b2b/2.14.2-sales_rep_scenarios.spec.js b/cypress-shared/integration/b2b/2.14.2-sales_rep_scenarios.spec.js index 10a15c2d..ede54b34 100644 --- a/cypress-shared/integration/b2b/2.14.2-sales_rep_scenarios.spec.js +++ b/cypress-shared/integration/b2b/2.14.2-sales_rep_scenarios.spec.js @@ -25,7 +25,7 @@ import { salesRepQuotesAccess } from '../../support/b2b/impersonation_quote_acce describe('Organization A - Cost Center A1 - Sales Rep Impersonation Scenario', () => { loginViaCookies({ storeFrontCookie: false }) - const { users, product, costCenter1, quotes, gmailCreds } = b2b.OrganizationA + const { users, product, costCenter1, quotes } = b2b.OrganizationA const { organizationName: organizationB, quotes: organizationBQuote } = b2b.OrganizationB @@ -33,9 +33,8 @@ describe('Organization A - Cost Center A1 - Sales Rep Impersonation Scenario', ( const impersonatedRole = ROLE_DROP_DOWN.Buyer loginToStoreFront( - users.SalesRep, - roleObject.SalesRepresentative.role, - gmailCreds + users.SalesRepresentative, + roleObject.SalesRepresentative.role ) verifySession( b2b.OrganizationA, @@ -46,7 +45,7 @@ describe('Organization A - Cost Center A1 - Sales Rep Impersonation Scenario', ( salesUserShouldImpersonateNonSalesUser( roleObject.SalesRepresentative.role, impersonatedRole, - users.Buyer1 + users.Buyer1.email ) searchQuote(quotes.SalesRep.updateQuote) @@ -64,7 +63,7 @@ describe('Organization A - Cost Center A1 - Sales Rep Impersonation Scenario', ( role: roleObject.SalesRepresentative.role, impersonatedRole, }) - searchQuote(quote, users.Buyer1) + searchQuote(quote, users.Buyer1.email) stopImpersonation( b2b.OrganizationA, costCenter1.name, diff --git a/cypress-shared/integration/b2b/2.2.1-add_buyer_approver_organizationA.spec.js b/cypress-shared/integration/b2b/2.2.1-add_buyer_approver_organizationA.spec.js index d12bce36..65807c81 100644 --- a/cypress-shared/integration/b2b/2.2.1-add_buyer_approver_organizationA.spec.js +++ b/cypress-shared/integration/b2b/2.2.1-add_buyer_approver_organizationA.spec.js @@ -21,22 +21,12 @@ import { verifyBindings } from '../../support/b2b/graphql.js' describe('OrganizationA - Create a Buyer and Approver, associate Cost Center and assign payment terms', () => { loginViaCookies({ storeFrontCookie: false }) - const { - organizationName, - costCenter1, - costCenter2, - costCenter3, - users, - gmailCreds, - } = b2b.OrganizationA - - verifyBindings(users.OrganizationAdmin1, true) - - loginToStoreFront( - users.OrganizationAdmin1, - ROLE_DROP_DOWN.OrganizationAdmin, - gmailCreds - ) + const { organizationName, costCenter1, costCenter2, costCenter3, users } = + b2b.OrganizationA + + verifyBindings(users.OrganizationAdmin1.email, true) + + loginToStoreFront(users.OrganizationAdmin1, ROLE_DROP_DOWN.OrganizationAdmin) setOrganizationIdInJSON(organizationName, costCenter1.name) addPaymentTermsCollectionPriceTablesTestCase(b2b.OrganizationA) diff --git a/cypress-shared/integration/b2b/2.2.2-add_buyer_approver_organizationA.spec.js b/cypress-shared/integration/b2b/2.2.2-add_buyer_approver_organizationA.spec.js index 57cf03fd..5b3ffce3 100644 --- a/cypress-shared/integration/b2b/2.2.2-add_buyer_approver_organizationA.spec.js +++ b/cypress-shared/integration/b2b/2.2.2-add_buyer_approver_organizationA.spec.js @@ -19,42 +19,31 @@ import { verifyBindings } from '../../support/b2b/graphql.js' describe('OrganizationA - Create a Buyer and Approver, associate Cost Center and assign payment terms', () => { loginViaCookies({ storeFrontCookie: false }) - const { - organizationName, - costCenter1, - costCenter2, - users, - product, - quotes, - gmailCreds, - } = b2b.OrganizationA + const { organizationName, costCenter1, costCenter2, users, product, quotes } = + b2b.OrganizationA - verifyBindings(users.OrganizationAdmin1, true) + verifyBindings(users.OrganizationAdmin1.email, true) - loginToStoreFront( - users.OrganizationAdmin1, - ROLE_DROP_DOWN.OrganizationAdmin, - gmailCreds - ) + loginToStoreFront(users.OrganizationAdmin1, ROLE_DROP_DOWN.OrganizationAdmin) addUser({ organizationName, costCenter: costCenter1.name, role: role.Buyer1, - gmailCreds, + email: users.Buyer1.email, }) addUser({ organizationName, costCenter: costCenter1.name, role: role.Approver1, - gmailCreds, + email: users.Approver1.email, }) addUser({ organizationName, costCenter: costCenter2.name, role: role.Buyer2, - gmailCreds, + email: users.Buyer2.email, }) // Add/Delete users in costcenter1 - Hold @@ -64,13 +53,13 @@ describe('OrganizationA - Create a Buyer and Approver, associate Cost Center and organizationName, costCenter: costCenter2.name, role: role.OrganizationAdmin2, - gmailCreds, + email: users.OrganizationAdmin2.email, }) addUser({ organizationName, costCenter: costCenter2.name, role: role.Approver2, - gmailCreds, + email: users.Approver2.email, }) createQuote({ diff --git a/cypress-shared/integration/b2b/2.3-add_buyer_approver_organizationB.spec.js b/cypress-shared/integration/b2b/2.3-add_buyer_approver_organizationB.spec.js index fb601a76..501f2772 100644 --- a/cypress-shared/integration/b2b/2.3-add_buyer_approver_organizationB.spec.js +++ b/cypress-shared/integration/b2b/2.3-add_buyer_approver_organizationB.spec.js @@ -18,33 +18,29 @@ import { createQuote } from '../../support/b2b/quotes.js' describe('OrganizationB - Create a Buyer and Approver associate Cost Center and assign payment terms', () => { loginViaCookies({ storeFrontCookie: false }) - const { organizationName, costCenter1, users, product, quotes, gmailCreds } = + const { organizationName, costCenter1, users, product, quotes } = b2b.OrganizationB - loginToStoreFront( - users.OrganizationAdmin1, - ROLE_DROP_DOWN.OrganizationAdmin, - gmailCreds - ) + loginToStoreFront(users.OrganizationAdmin1, ROLE_DROP_DOWN.OrganizationAdmin) setOrganizationIdInJSON(organizationName, costCenter1.name) addPaymentTermsCollectionPriceTablesTestCase(b2b.OrganizationB) addUser({ organizationName, costCenter: costCenter1.name, role: role.Buyer1, - gmailCreds, + email: users.Buyer1.email, }) addUser({ organizationName, costCenter: costCenter1.name, role: role.Approver1, - gmailCreds, + email: users.Approver1.email, }) duplicateUserTestCase({ organizationName, costCenter: costCenter1.name, role: role.Approver1, - gmailCreds, + email: users.Approver1.email, }) createQuote({ product, diff --git a/cypress-shared/integration/b2b/2.4.1-add-remaining-users.spec.js b/cypress-shared/integration/b2b/2.4.1-add-remaining-users.spec.js index 0c894c33..72f0900d 100644 --- a/cypress-shared/integration/b2b/2.4.1-add-remaining-users.spec.js +++ b/cypress-shared/integration/b2b/2.4.1-add-remaining-users.spec.js @@ -14,16 +14,12 @@ import { syncCheckoutUICustom } from '../../support/common/testcase.js' import b2b from '../../support/b2b/constants.js' import { loginToStoreFront } from '../../support/b2b/login.js' -const { users, gmailCreds } = b2b.OrganizationA +const { users } = b2b.OrganizationA describe('Sync Checkout UI Custom & Add Sales Users via Graphql', () => { loginViaCookies({ storeFrontCookie: false }) - loginToStoreFront( - users.OrganizationAdmin1, - ROLE_DROP_DOWN.OrganizationAdmin, - gmailCreds - ) + loginToStoreFront(users.OrganizationAdmin1, ROLE_DROP_DOWN.OrganizationAdmin) it('Set roles in organization JSON', updateRetry(3), () => { cy.getVtexItems().then((vtex) => { @@ -53,7 +49,7 @@ describe('Sync Checkout UI Custom & Add Sales Users via Graphql', () => { const roles = Object.keys(ROLE_ID_EMAIL_MAPPING) roles.forEach((r) => { - addUserViaGraphql(gmailCreds, r) + addUserViaGraphql(users, r) }) preserveCookie() diff --git a/cypress-shared/integration/b2b/2.4.2-hide_organization_by_adding_dolar_sales_channel.spec.js b/cypress-shared/integration/b2b/2.4.2-hide_organization_by_adding_dolar_sales_channel.spec.js index 8fc985d5..ff2ddc5c 100644 --- a/cypress-shared/integration/b2b/2.4.2-hide_organization_by_adding_dolar_sales_channel.spec.js +++ b/cypress-shared/integration/b2b/2.4.2-hide_organization_by_adding_dolar_sales_channel.spec.js @@ -14,7 +14,7 @@ import { } from '../../support/b2b/graphql.js' import { loginToStoreFront } from '../../support/b2b/login.js' -const { users, gmailCreds } = b2b.OrganizationB +const { users } = b2b.OrganizationB describe('Add Binding which hides Organization in profile page', () => { loginViaCookies({ storeFrontCookie: false }) @@ -23,13 +23,9 @@ describe('Add Binding which hides Organization in profile page', () => { verifySalesChannel(0) - verifyBindings(users.OrganizationAdmin1, false) + verifyBindings(users.OrganizationAdmin1.email, false) - loginToStoreFront( - users.OrganizationAdmin1, - ROLE_DROP_DOWN.OrganizationAdmin, - gmailCreds - ) + loginToStoreFront(users.OrganizationAdmin1, ROLE_DROP_DOWN.OrganizationAdmin) it('Verify Organization is not showing up', updateRetry(2), () => { cy.reloadOnLastNAttempts(1) diff --git a/cypress-shared/integration/b2b/2.4.3-show_organization_by_adding_principal_sales_channel.spec.js b/cypress-shared/integration/b2b/2.4.3-show_organization_by_adding_principal_sales_channel.spec.js index c3e591b1..eecb488e 100644 --- a/cypress-shared/integration/b2b/2.4.3-show_organization_by_adding_principal_sales_channel.spec.js +++ b/cypress-shared/integration/b2b/2.4.3-show_organization_by_adding_principal_sales_channel.spec.js @@ -22,7 +22,7 @@ describe('Add binding which shows Organization in profile page', () => { verifySalesChannel(1) - verifyBindings(users.OrganizationAdmin1, true) + verifyBindings(users.OrganizationAdmin1.email, true) loginToStoreFront( users.OrganizationAdmin1, diff --git a/cypress-shared/integration/b2b/2.5.1-buyer_scenarios_orgA_costA1.spec.js b/cypress-shared/integration/b2b/2.5.1-buyer_scenarios_orgA_costA1.spec.js index b2ac6b8a..29135f4c 100644 --- a/cypress-shared/integration/b2b/2.5.1-buyer_scenarios_orgA_costA1.spec.js +++ b/cypress-shared/integration/b2b/2.5.1-buyer_scenarios_orgA_costA1.spec.js @@ -32,25 +32,24 @@ describe('Organization A - Cost Center A1 - Buyer Scenarios', () => { users, product, quotes, - gmailCreds, } = b2b.OrganizationA const { organizationName: organizationB, quotes: organizationBQuote } = b2b.OrganizationB - loginToStoreFront(users.Buyer1, ROLE_DROP_DOWN.Buyer, gmailCreds) + loginToStoreFront(users.Buyer1, ROLE_DROP_DOWN.Buyer) verifySession(b2b.OrganizationA, costCenter1.name, ROLE_DROP_DOWN.Buyer) productShouldNotbeAvailableTestCase(nonAvailableProduct) userAndCostCenterShouldNotBeEditable({ organizationName, costCenter: costCenter1.name, - gmailCreds, + email: users.Buyer1.email, role: role.Buyer1, }) userShouldNotImpersonateThisUser( ROLE_DROP_DOWN.Buyer, roleObject.SalesManager.role, - users.SalesManager + users.SalesManager.email ) quoteShouldbeVisibleTestCase( organizationName, diff --git a/cypress-shared/integration/b2b/2.5.2-buyer_scenarios_orgA_costA1.spec.js b/cypress-shared/integration/b2b/2.5.2-buyer_scenarios_orgA_costA1.spec.js index cc2579bc..4b05ea47 100644 --- a/cypress-shared/integration/b2b/2.5.2-buyer_scenarios_orgA_costA1.spec.js +++ b/cypress-shared/integration/b2b/2.5.2-buyer_scenarios_orgA_costA1.spec.js @@ -15,10 +15,9 @@ import { describe('Organization A - Cost Center A1 - Buyer Create Quote Scenarios', () => { loginViaCookies({ storeFrontCookie: false }) - const { costCenter1, users, product, product2, quotes, gmailCreds } = - b2b.OrganizationA + const { costCenter1, users, product, product2, quotes } = b2b.OrganizationA - loginToStoreFront(users.Buyer1, ROLE_DROP_DOWN.Buyer, gmailCreds) + loginToStoreFront(users.Buyer1, ROLE_DROP_DOWN.Buyer) verifySession(b2b.OrganizationA, costCenter1.name, ROLE_DROP_DOWN.Buyer) createQuote({ product, diff --git a/cypress-shared/integration/b2b/2.6.1-buyer_scenarios_orgA_costA2.spec.js b/cypress-shared/integration/b2b/2.6.1-buyer_scenarios_orgA_costA2.spec.js index 7be05707..30a63994 100644 --- a/cypress-shared/integration/b2b/2.6.1-buyer_scenarios_orgA_costA2.spec.js +++ b/cypress-shared/integration/b2b/2.6.1-buyer_scenarios_orgA_costA2.spec.js @@ -13,19 +13,13 @@ import { quoteShouldNotBeVisibleTestCase } from '../../support/b2b/quotes.js' describe('Organization A - Cost Center A2 - Buyer Scenarios', () => { loginViaCookies({ storeFrontCookie: false }) - const { - organizationName, - nonAvailableProduct, - users, - costCenter2, - quotes, - gmailCreds, - } = b2b.OrganizationA + const { organizationName, nonAvailableProduct, users, costCenter2, quotes } = + b2b.OrganizationA const { organizationName: organizationB, quotes: organizationBQuote } = b2b.OrganizationB - loginToStoreFront(users.Buyer2, ROLE_DROP_DOWN.Buyer, gmailCreds) + loginToStoreFront(users.Buyer2, ROLE_DROP_DOWN.Buyer) verifySession(b2b.OrganizationA, costCenter2.name, ROLE_DROP_DOWN.Buyer) productShouldNotbeAvailableTestCase(nonAvailableProduct) quoteShouldNotBeVisibleTestCase( diff --git a/cypress-shared/integration/b2b/2.6.2-buyer_scenarios_orgA_costA2.spec.js b/cypress-shared/integration/b2b/2.6.2-buyer_scenarios_orgA_costA2.spec.js index 2d5adee3..39bf4dac 100644 --- a/cypress-shared/integration/b2b/2.6.2-buyer_scenarios_orgA_costA2.spec.js +++ b/cypress-shared/integration/b2b/2.6.2-buyer_scenarios_orgA_costA2.spec.js @@ -14,9 +14,9 @@ import { describe('Organization A - Cost Center A2 - Buyer Scenarios', () => { loginViaCookies({ storeFrontCookie: false }) - const { users, costCenter2, quotes, product3, gmailCreds } = b2b.OrganizationA + const { users, costCenter2, quotes, product3 } = b2b.OrganizationA - loginToStoreFront(users.Buyer2, ROLE_DROP_DOWN.Buyer, gmailCreds) + loginToStoreFront(users.Buyer2, ROLE_DROP_DOWN.Buyer) verifySession(b2b.OrganizationA, costCenter2.name, ROLE_DROP_DOWN.Buyer) quickOrderByCategory(ROLE_DROP_DOWN.Buyer, quotes.Buyer2.quotes1, '$84.60') quickOrderByCategoryNegativeTestCase( diff --git a/cypress-shared/integration/b2b/2.7-buyer_scenarios_orgB_costB1.spec.js b/cypress-shared/integration/b2b/2.7-buyer_scenarios_orgB_costB1.spec.js index 3311a566..189abb74 100644 --- a/cypress-shared/integration/b2b/2.7-buyer_scenarios_orgB_costB1.spec.js +++ b/cypress-shared/integration/b2b/2.7-buyer_scenarios_orgB_costB1.spec.js @@ -25,13 +25,12 @@ describe('Organization B - Cost Center B1 - Buyer Scenario', () => { product, quotes, costCenter1, - gmailCreds, } = b2b.OrganizationB const { organizationName: organizationA, quotes: organizationAQuotes } = b2b.OrganizationA - loginToStoreFront(users.Buyer1, ROLE_DROP_DOWN.Buyer, gmailCreds) + loginToStoreFront(users.Buyer1, ROLE_DROP_DOWN.Buyer) verifySession(b2b.OrganizationB, costCenter1.name, ROLE_DROP_DOWN.Buyer) productShouldNotbeAvailableTestCase(nonAvailableProduct) quoteShouldbeVisibleTestCase( diff --git a/cypress-shared/integration/b2b/2.8.1-organization_admin_scenarios-orgA.spec.js b/cypress-shared/integration/b2b/2.8.1-organization_admin_scenarios-orgA.spec.js index 715ad945..361431b7 100644 --- a/cypress-shared/integration/b2b/2.8.1-organization_admin_scenarios-orgA.spec.js +++ b/cypress-shared/integration/b2b/2.8.1-organization_admin_scenarios-orgA.spec.js @@ -24,23 +24,13 @@ import { describe('Organization A - Cost Center A1 - Organization Admin2 Scenario', () => { loginViaCookies({ storeFrontCookie: false }) - const { - organizationName, - nonAvailableProduct, - costCenter2, - users, - quotes, - gmailCreds, - } = b2b.OrganizationA + const { organizationName, nonAvailableProduct, costCenter2, users, quotes } = + b2b.OrganizationA const { organizationName: organizationB, quotes: organizationBQuote } = b2b.OrganizationB - loginToStoreFront( - users.OrganizationAdmin2, - ROLE_DROP_DOWN.OrganizationAdmin, - gmailCreds - ) + loginToStoreFront(users.OrganizationAdmin2, ROLE_DROP_DOWN.OrganizationAdmin) verifySession( b2b.OrganizationA, costCenter2.name, @@ -50,12 +40,12 @@ describe('Organization A - Cost Center A1 - Organization Admin2 Scenario', () => userShouldNotImpersonateThisUser( ROLE_DROP_DOWN.OrganizationAdmin, roleObject.SalesManager.role, - users.SalesManager + users.SalesManager.email ) userShouldNotImpersonateThisUser( ROLE_DROP_DOWN.OrganizationAdmin, ROLE_DROP_DOWN.Buyer, - users.Buyer1 + users.Buyer1.email ) productShouldNotbeAvailableTestCase(nonAvailableProduct) quoteShouldbeVisibleTestCase( diff --git a/cypress-shared/integration/b2b/2.8.2-organization_admin_scenarios-orgA.spec.js b/cypress-shared/integration/b2b/2.8.2-organization_admin_scenarios-orgA.spec.js index 6b44d973..f6ddd221 100644 --- a/cypress-shared/integration/b2b/2.8.2-organization_admin_scenarios-orgA.spec.js +++ b/cypress-shared/integration/b2b/2.8.2-organization_admin_scenarios-orgA.spec.js @@ -26,13 +26,9 @@ import { describe('Organization A - Cost Center A1 - Organization Admin2 Scenario', () => { loginViaCookies({ storeFrontCookie: false }) - const { product, costCenter2, users, quotes, gmailCreds } = b2b.OrganizationA + const { product, costCenter2, users, quotes } = b2b.OrganizationA - loginToStoreFront( - users.OrganizationAdmin2, - ROLE_DROP_DOWN.OrganizationAdmin, - gmailCreds - ) + loginToStoreFront(users.OrganizationAdmin2, ROLE_DROP_DOWN.OrganizationAdmin) verifySession( b2b.OrganizationA, costCenter2.name, diff --git a/cypress-shared/integration/b2b/2.9-approver_scenarios_orgA.spec.js b/cypress-shared/integration/b2b/2.9-approver_scenarios_orgA.spec.js index 96a7c2ed..8273c85e 100644 --- a/cypress-shared/integration/b2b/2.9-approver_scenarios_orgA.spec.js +++ b/cypress-shared/integration/b2b/2.9-approver_scenarios_orgA.spec.js @@ -35,19 +35,13 @@ import { describe('Organization A - Cost Center A1 - Approver Scenario', () => { loginViaCookies({ storeFrontCookie: false }) - const { - organizationName, - nonAvailableProduct, - users, - costCenter1, - quotes, - gmailCreds, - } = b2b.OrganizationA + const { organizationName, nonAvailableProduct, users, costCenter1, quotes } = + b2b.OrganizationA const { organizationName: organizationB, quotes: organizationBquotes } = b2b.OrganizationB - loginToStoreFront(users.Approver1, ROLE_DROP_DOWN.Approver, gmailCreds) + loginToStoreFront(users.Approver1, ROLE_DROP_DOWN.Approver) verifySession(b2b.OrganizationA, costCenter1.name, ROLE_DROP_DOWN.Approver) productShouldNotbeAvailableTestCase(nonAvailableProduct) quoteShouldbeVisibleTestCase( diff --git a/cypress-shared/support/b2b/add_users.js b/cypress-shared/support/b2b/add_users.js index bb97638b..95b43023 100644 --- a/cypress-shared/support/b2b/add_users.js +++ b/cypress-shared/support/b2b/add_users.js @@ -43,7 +43,7 @@ export function addUserFn( }) } -export function addUser({ organizationName, costCenter, role, gmailCreds }) { +export function addUser({ organizationName, costCenter, role, email }) { const { suffixInEmail, dropDownText } = role it( @@ -51,11 +51,6 @@ export function addUser({ organizationName, costCenter, role, gmailCreds }) { updateRetry(3), () => { const userName = generateName(suffixInEmail) - const email = generateEmailWithSuffix( - gmailCreds.email, - organizationName, - suffixInEmail - ) addUserFn({ userName, email, costCenter }, dropDownText) } @@ -66,17 +61,12 @@ export function duplicateUserTestCase({ organizationName, costCenter, role, - gmailCreds, + email, }) { const { suffixInEmail, dropDownText } = role - const email = generateEmailWithSuffix( - gmailCreds.email, - organizationName, - suffixInEmail - ) it( - `Add duplicate user ${email} from same organization and verify popup`, + `Add duplicate user ${email} from same organization ${organizationName} and verify popup`, updateRetry(3), () => { const userName = generateName(suffixInEmail) @@ -237,14 +227,14 @@ export function updateCostCenterOftheUser({ ) } -export function addUserViaGraphql(gmailCreds, roleKey) { +export function addUserViaGraphql(users, roleKey) { const { organizationName, costCenter1 } = b2b.OrganizationA it( `Adding ${roleKey} in ${organizationName} with ${costCenter1.name}`, updateRetry(3), () => { - const { suffixInEmail, role } = ROLE_ID_EMAIL_MAPPING[roleKey] + const { role } = ROLE_ID_EMAIL_MAPPING[roleKey] // Define constants const APP_NAME = 'vtex.storefront-permissions' const APP_VERSION = '1.x' @@ -264,11 +254,7 @@ export function addUserViaGraphql(gmailCreds, roleKey) { orgId: organizationItems[organizationName], costId: organizationItems[costCenter1.name], name: generateName(role), - email: generateEmailWithSuffix( - gmailCreds.email, - organizationName, - suffixInEmail - ), + email: users[roleKey].email, } expect(variables.roleId).to.not.be.undefined diff --git a/cypress-shared/support/b2b/common.js b/cypress-shared/support/b2b/common.js index ec136cb6..99a1ff6b 100644 --- a/cypress-shared/support/b2b/common.js +++ b/cypress-shared/support/b2b/common.js @@ -1,5 +1,5 @@ import selectors from '../common/selectors.js' -import { generateEmailWithSuffix, validateToastMsg } from './utils.js' +import { validateToastMsg } from './utils.js' import { BUTTON_LABEL, TOAST_MSG } from '../validation_text.js' import { GRAPHL_OPERATIONS } from '../graphql_operations.js' import { updateRetry } from '../common/support.js' @@ -168,27 +168,19 @@ export function userAndCostCenterShouldNotBeEditable({ organizationName, costCenter, role, - gmailCreds, + email, }) { it( `Trying to update user and cost center in ${organizationName} with role ${role.dropDownText}`, updateRetry(1), () => { - const { suffixInEmail } = role - cy.gotoMyOrganization() cy.get(selectors.AddUser).should('be.visible') cy.get( '.vtex-table__container .ReactVirtualized__Grid__innerScrollContainer' ) .last() - .contains( - generateEmailWithSuffix( - gmailCreds.email, - organizationName, - suffixInEmail - ) - ) + .contains(email) .should('have.class', 'c-disabled') cy.get(selectors.AddUser).should('be.visible').should('be.disabled') cy.get(selectors.AddCostCenter).should('be.visible').should('be.disabled') diff --git a/cypress-shared/support/b2b/constants.js b/cypress-shared/support/b2b/constants.js index b3543b62..a63061d7 100644 --- a/cypress-shared/support/b2b/constants.js +++ b/cypress-shared/support/b2b/constants.js @@ -131,6 +131,20 @@ const ORG_A_GMAIL_CREDS = { refreshToken: gmail.refreshToken1, } +const ORG_A_GMAIL_CREDS3 = { + email: gmail.emailId3, + clientId: gmail.clientId3, + clientSecret: gmail.clientSecret3, + refreshToken: gmail.refreshToken3, +} + +const ORG_A_GMAIL_CREDS4 = { + email: gmail.emailId4, + clientId: gmail.clientId4, + clientSecret: gmail.clientSecret4, + refreshToken: gmail.refreshToken4, +} + const ORG_B_GMAIL_CREDS = { email: gmail.emailId2, clientId: gmail.clientId2, @@ -192,68 +206,103 @@ export default { product3: PRODUCTS.tshirt, nonAvailableProduct: PRODUCTS.irobot, quotes: quotesListForOrganizationA(), - gmailCreds: ORG_A_GMAIL_CREDS, users: { - OrganizationAdmin1: generateEmailWithSuffix( - ORG_A_GMAIL_CREDS.email, - ORGANIZATION_A, - ROLE_DROP_DOWN_EMAIL_MAPPING.OrganizationAdmin1.suffixInEmail - ), - OrganizationAdmin2: generateEmailWithSuffix( - ORG_A_GMAIL_CREDS.email, - ORGANIZATION_A, - ROLE_DROP_DOWN_EMAIL_MAPPING.OrganizationAdmin2.suffixInEmail - ), - Buyer1: generateEmailWithSuffix( - ORG_A_GMAIL_CREDS.email, - ORGANIZATION_A, - ROLE_DROP_DOWN_EMAIL_MAPPING.Buyer1.suffixInEmail - ), - Buyer2: generateEmailWithSuffix( - ORG_A_GMAIL_CREDS.email, - ORGANIZATION_A, - ROLE_DROP_DOWN_EMAIL_MAPPING.Buyer2.suffixInEmail - ), - Buyer3: generateEmailWithSuffix( - ORG_A_GMAIL_CREDS.email, - ORGANIZATION_A, - ROLE_DROP_DOWN_EMAIL_MAPPING.Buyer3.suffixInEmail - ), - Buyer4: generateEmailWithSuffix( - ORG_A_GMAIL_CREDS.email, - ORGANIZATION_A, - ROLE_DROP_DOWN_EMAIL_MAPPING.Buyer4.suffixInEmail - ), - Approver1: generateEmailWithSuffix( - ORG_A_GMAIL_CREDS.email, - ORGANIZATION_A, - ROLE_DROP_DOWN_EMAIL_MAPPING.Approver1.suffixInEmail - ), - Approver2: generateEmailWithSuffix( - ORG_A_GMAIL_CREDS.email, - ORGANIZATION_A, - ROLE_DROP_DOWN_EMAIL_MAPPING.Approver2.suffixInEmail - ), - Approver3: generateEmailWithSuffix( - ORG_A_GMAIL_CREDS.email, - ORGANIZATION_A, - ROLE_DROP_DOWN_EMAIL_MAPPING.Approver3.suffixInEmail - ), - SalesRep: generateEmailWithSuffix( - ORG_A_GMAIL_CREDS.email, - ORGANIZATION_A, - ROLE_ID_EMAIL_MAPPING.SalesRepresentative.suffixInEmail - ), - SalesAdmin: generateEmailWithSuffix( - ORG_A_GMAIL_CREDS.email, - ORGANIZATION_A, - ROLE_ID_EMAIL_MAPPING.SalesAdmin.suffixInEmail - ), - SalesManager: generateEmailWithSuffix( - ORG_A_GMAIL_CREDS.email, - ORGANIZATION_A, - ROLE_ID_EMAIL_MAPPING.SalesManager.suffixInEmail - ), + OrganizationAdmin1: { + gmailCreds: ORG_A_GMAIL_CREDS, + email: generateEmailWithSuffix( + ORG_A_GMAIL_CREDS.email, + ORGANIZATION_A, + ROLE_DROP_DOWN_EMAIL_MAPPING.OrganizationAdmin1.suffixInEmail + ), + }, + OrganizationAdmin2: { + gmailCreds: ORG_A_GMAIL_CREDS4, + email: generateEmailWithSuffix( + ORG_A_GMAIL_CREDS4.email, + ORGANIZATION_A, + ROLE_DROP_DOWN_EMAIL_MAPPING.OrganizationAdmin2.suffixInEmail + ), + }, + Buyer1: { + gmailCreds: ORG_A_GMAIL_CREDS, + email: generateEmailWithSuffix( + ORG_A_GMAIL_CREDS.email, + ORGANIZATION_A, + ROLE_DROP_DOWN_EMAIL_MAPPING.Buyer1.suffixInEmail + ), + }, + Buyer2: { + gmailCreds: ORG_A_GMAIL_CREDS3, + email: generateEmailWithSuffix( + ORG_A_GMAIL_CREDS3.email, + ORGANIZATION_A, + ROLE_DROP_DOWN_EMAIL_MAPPING.Buyer2.suffixInEmail + ), + }, + Buyer3: { + gmailCreds: ORG_A_GMAIL_CREDS, + email: generateEmailWithSuffix( + ORG_A_GMAIL_CREDS.email, + ORGANIZATION_A, + ROLE_DROP_DOWN_EMAIL_MAPPING.Buyer3.suffixInEmail + ), + }, + Buyer4: { + gmailCreds: ORG_A_GMAIL_CREDS, + email: generateEmailWithSuffix( + ORG_A_GMAIL_CREDS.email, + ORGANIZATION_A, + ROLE_DROP_DOWN_EMAIL_MAPPING.Buyer4.suffixInEmail + ), + }, + Approver1: { + gmailCreds: ORG_A_GMAIL_CREDS, + email: generateEmailWithSuffix( + ORG_A_GMAIL_CREDS.email, + ORGANIZATION_A, + ROLE_DROP_DOWN_EMAIL_MAPPING.Approver1.suffixInEmail + ), + }, + Approver2: { + gmailCreds: ORG_A_GMAIL_CREDS, + email: generateEmailWithSuffix( + ORG_A_GMAIL_CREDS3.email, + ORGANIZATION_A, + ROLE_DROP_DOWN_EMAIL_MAPPING.Approver2.suffixInEmail + ), + }, + Approver3: { + gmailCreds: ORG_A_GMAIL_CREDS, + email: generateEmailWithSuffix( + ORG_A_GMAIL_CREDS.email, + ORGANIZATION_A, + ROLE_DROP_DOWN_EMAIL_MAPPING.Approver3.suffixInEmail + ), + }, + SalesRepresentative: { + gmailCreds: ORG_A_GMAIL_CREDS, + email: generateEmailWithSuffix( + ORG_A_GMAIL_CREDS.email, + ORGANIZATION_A, + ROLE_ID_EMAIL_MAPPING.SalesRepresentative.suffixInEmail + ), + }, + SalesAdmin: { + gmailCreds: ORG_B_GMAIL_CREDS, + email: generateEmailWithSuffix( + ORG_B_GMAIL_CREDS.email, + ORGANIZATION_A, + ROLE_ID_EMAIL_MAPPING.SalesAdmin.suffixInEmail + ), + }, + SalesManager: { + gmailCreds: ORG_B_GMAIL_CREDS, + email: generateEmailWithSuffix( + ORG_A_GMAIL_CREDS4.email, + ORGANIZATION_A, + ROLE_ID_EMAIL_MAPPING.SalesManager.suffixInEmail + ), + }, }, }, OrganizationB: { @@ -282,24 +331,32 @@ export default { product: PRODUCTS.irobot, nonAvailableProduct: PRODUCTS.tshirt, quotes: quotesListForOrganizationB(), - gmailCreds: ORG_B_GMAIL_CREDS, users: { - OrganizationAdmin1: generateEmailWithSuffix( - ORG_B_GMAIL_CREDS.email, - ORGANIZATION_B, - ROLE_DROP_DOWN_EMAIL_MAPPING.OrganizationAdmin1.suffixInEmail - ), + OrganizationAdmin1: { + gmailCreds: ORG_B_GMAIL_CREDS, + email: generateEmailWithSuffix( + ORG_B_GMAIL_CREDS.email, + ORGANIZATION_B, + ROLE_DROP_DOWN_EMAIL_MAPPING.OrganizationAdmin1.suffixInEmail + ), + }, - Buyer1: generateEmailWithSuffix( - ORG_B_GMAIL_CREDS.email, - ORGANIZATION_B, - ROLE_DROP_DOWN_EMAIL_MAPPING.Buyer1.suffixInEmail - ), - Approver1: generateEmailWithSuffix( - ORG_B_GMAIL_CREDS.email, - ORGANIZATION_B, - ROLE_DROP_DOWN_EMAIL_MAPPING.Approver1.suffixInEmail - ), + Buyer1: { + gmailCreds: ORG_B_GMAIL_CREDS, + email: generateEmailWithSuffix( + ORG_B_GMAIL_CREDS.email, + ORGANIZATION_B, + ROLE_DROP_DOWN_EMAIL_MAPPING.Buyer1.suffixInEmail + ), + }, + Approver1: { + gmailCreds: ORG_B_GMAIL_CREDS, + email: generateEmailWithSuffix( + ORG_B_GMAIL_CREDS.email, + ORGANIZATION_B, + ROLE_DROP_DOWN_EMAIL_MAPPING.Approver1.suffixInEmail + ), + }, }, }, } diff --git a/cypress-shared/support/b2b/login.js b/cypress-shared/support/b2b/login.js index 1bb15fd6..0ba464c5 100644 --- a/cypress-shared/support/b2b/login.js +++ b/cypress-shared/support/b2b/login.js @@ -4,7 +4,7 @@ import selectors from '../common/selectors.js' export function visitHomePage() { cy.getVtexItems().then((vtex) => { cy.url().then((url) => { - if (url.includes('blank') || url !== vtex.baseUrl) { + if (url.includes('blank') || url !== `${vtex.baseUrl}/`) { cy.intercept('POST', 'https://rc.vtex.com.br/api/events').as('EVENTS') cy.qe( 'Visit home page/storefront and wait for EVENTS api to get called' @@ -41,10 +41,10 @@ export function storeUserCookie(email) { }) } -export function loginToStoreFront(email, role, gmailCreds) { +export function loginToStoreFront({ email, gmailCreds }, role) { it( - `Logging in to storefront as ${role}`, - { defaultCommandTimeout: 60000, retries: 1 }, + `Logging in to storefront with ${email} as ${role}`, + { defaultCommandTimeout: 80000, retries: 1 }, () => { cy.qe(`Logging in to storefront as ${role}`) cy.addDelayBetweenRetries(10000) @@ -55,36 +55,55 @@ export function loginToStoreFront(email, role, gmailCreds) { // If we already logged in to this user in previous testcase, then use that cookie to re-login loginWithCookiesStoredInJSON(organization[email]) } else { + let currentAccessToken + visitHomePage() + cy.get('body').then(async ($body) => { - if ($body.find(selectors.SignInBtn).length) { - const accessToken = await getAccessToken(email, gmailCreds) + if ($body.find(selectors.ProfileLabel).length) { + cy.qe('Already logged in') + } else if ($body.find(selectors.SignInBtn).length) { + if (!$body.find(selectors.Token).length) { + currentAccessToken = await getAccessToken( + email, + gmailCreds, + 2, + null + ) + cy.intercept('POST', '**/startlogin').as('startlogin') + cy.intercept('POST', '**/accesskey/send').as('send') + cy.qe('SignInBtn should be visible and click it') + cy.get(selectors.SignInBtn).should('be.visible').click() + cy.qe('AccessCode Btn should be visible and click it') + cy.get(selectors.AccessCode).should('be.visible').click() + cy.qe(`Type ${email} in Email field`) + cy.get(selectors.Email) + .should('be.visible') + .focus() + .clear() + .type(email) + cy.qe(`Click submit btn`) + cy.get(selectors.Submit) + .click() + .then(async () => { + cy.wait('@startlogin') + .its('response.statusCode') + .should('eq', 200) + cy.qe('Wait for startLogin and send API') + cy.wait('@send') + .its('response.statusCode') + .should('eq', 200) + }) + } - cy.intercept('POST', '**/startlogin').as('startlogin') - cy.intercept('POST', '**/accesskey/send').as('send') - cy.qe('SignInBtn should be visible and click it') - cy.get(selectors.SignInBtn).should('be.visible').click() - cy.qe('AccessCode Btn should be visible and click it') - cy.get(selectors.AccessCode).should('be.visible').click() - cy.qe(`Type ${email} in Email field`) - cy.get(selectors.Email) + cy.get(selectors.Token) .should('be.visible') - .focus() - .clear() - .type(email) - cy.qe(`Click submit btn`) - cy.get(selectors.Submit) - .click() .then(async () => { - cy.wait('@startlogin') - .its('response.statusCode') - .should('eq', 200) - cy.qe('Wait for startLogin and send API') - cy.wait('@send').its('response.statusCode').should('eq', 200) const newAccessToken = await getAccessToken( email, gmailCreds, - accessToken + 10, + currentAccessToken ) cy.qe(`Type ${newAccessToken} in token field`) @@ -96,8 +115,6 @@ export function loginToStoreFront(email, role, gmailCreds) { cy.get(selectors.ProfileLabel).should('be.visible') storeUserCookie(email) }) - } else if ($body.find(selectors.ProfileLabel).length) { - cy.qe('Already logged in') } else { cy.qe('SignInBtn is not found in the page') throw new Error('Selectors not loaded within time period') diff --git a/cypress-shared/support/b2b/utils.js b/cypress-shared/support/b2b/utils.js index 1ada1bb6..72d98d6e 100644 --- a/cypress-shared/support/b2b/utils.js +++ b/cypress-shared/support/b2b/utils.js @@ -62,6 +62,7 @@ export const OTHER_ROLES = [ ] export const ROLE_ID_EMAIL_MAPPING = { + // Below Roles should match with users roles in b2b/constants.js SalesAdmin: { role: OTHER_ROLES[0], suffixInEmail: 'sa' }, SalesRepresentative: { role: OTHER_ROLES[1], suffixInEmail: 'sr' }, SalesManager: { role: OTHER_ROLES[2], suffixInEmail: 'sm' }, diff --git a/cypress-shared/support/extract.js b/cypress-shared/support/extract.js index b16ba6dc..6fe29fc2 100644 --- a/cypress-shared/support/extract.js +++ b/cypress-shared/support/extract.js @@ -6,22 +6,27 @@ function extractAccessCode(message) { if (message) { const regex = /(\d.*)<\/strong>/ - return message.includes('access code') ? message.match(regex)[1] : '0' + return message.includes('access code') ? message.match(regex)[1] : null } - return '0' + return null } -export async function getAccessToken(email, gmailCreds, accessToken = null) { +export async function getAccessToken( + email, + gmailCreds, + totalRetry, + accessToken = null +) { + /* eslint-disable no-await-in-loop */ const gmail = new GmailAPI(gmailCreds) - const ToEmail = email.replace('+', '%2B') - let currentAccessToken - const totalRetry = 8 await gmail.getAcceToken(gmailCreds) + const ToEmail = email.replace('+', '%2B') + let currentAccessToken = null - /* eslint-disable no-await-in-loop */ - for (let currentRetry = 0; currentRetry <= totalRetry; currentRetry++) { + for (let currentRetry = 1; currentRetry <= totalRetry; currentRetry++) { + await delay(5500) currentAccessToken = extractAccessCode( await gmail.readInboxContent( new URLSearchParams( @@ -30,10 +35,10 @@ export async function getAccessToken(email, gmailCreds, accessToken = null) { gmailCreds ) ) - if (accessToken === null || currentAccessToken !== accessToken) { - return currentAccessToken + if (currentAccessToken !== accessToken) { + break } - - await delay(5500) } + + return currentAccessToken }