UNPKG

qe-fe-automation

Version:
160 lines (145 loc) 5.88 kB
import { AdminClaim } from '@growth-lib/admin-claim'; import { LEAD_TOKEN } from '@support-growth/login-self-sell'; import Chainable = Cypress.Chainable; import { Accept } from '@support-base/request_header'; import { HttpRequest } from '../../../artifacts'; import { defaultPersonaData, OnboardParams, PersonaQuestionsData } from '@growth-lib/model'; import { stagingUsers } from '@fixtures/staging-users'; import { HomePage } from '@rebranded_home_page-lib/home-page'; const PASSWORD = Cypress.env('newUser')?.NEW_USER_PASSWORD; enum onboardApis { onboardLead = 'api/selfSell/onboard', personaQuestionsUpdate = 'api/selfSell/leads/growth/update', adminClaim = 'api/selfSell/company/onboard' } export class OnboardByApi { static ONBOARD_TOKEN: string; static onboard(leadToken?: string, origin?: string, onboardParams?: OnboardParams): Chainable<any> { cy.allure().logStep(`onboarding user with lead token`); return cy .request({ method: HttpRequest.Post, url: `${onboardApis.onboardLead}?token=${leadToken || LEAD_TOKEN}`, body: { firstName: onboardParams?.firstName || 'test', lastName: onboardParams?.lastName || 'test', leadPhoneNumber: onboardParams?.leadPhoneNumber || '', password: PASSWORD, origin: origin || 'MARKETING_PAGE', // iovation_blackbox: '', accountType: onboardParams?.accountType || 'TRAVEL_AND_LIQUID', signupReason: onboardParams?.signupReason || 'TRAVEL_AND_EXPENSE_SOLUTION' }, headers: {}, retryOnStatusCodeFailure: false }) .then((response) => { expect(response.status).to.eq(200); cy.task('putDataInCache', { key: 'companyUuid', data: response?.body?.companyUuid }); cy.allure().logStep(`userUuid ${response?.body?.userUuid}`); cy.allure().logStep(`companyName ${response?.body?.companyName}`); cy.allure().logStep(`companyDomain ${response?.body?.companyDomain}`); cy.allure().logStep(`companyUuid ${response?.body?.companyUuid}`); cy.allure().logStep(`token ${response?.body?.token}`); OnboardByApi.ONBOARD_TOKEN = response?.body?.token; }); } static fillPersona(data = defaultPersonaData): Chainable<any> { cy.allure().logStep(`posting persona questions data: ${JSON.stringify(data)}`); return cy .request({ method: HttpRequest.Post, url: onboardApis.personaQuestionsUpdate, body: data, headers: { Authorization: `TripActions ${OnboardByApi.ONBOARD_TOKEN}`, Accept: Accept.ApplicationJson }, retryOnStatusCodeFailure: false }) .then((response) => { expect(response.status).to.eq(200); }); } static onboardAndFillPersona(leadToken?: string, origin?: string, data?: PersonaQuestionsData): Chainable<any> { return OnboardByApi.onboard(leadToken, origin).then(() => { return OnboardByApi.fillPersona(data); }); } static onboardSelfSellAdmin(leadToken?: string, origin?: string, data?: PersonaQuestionsData): Chainable<any> { return OnboardByApi.onboard(leadToken, origin) .then(() => { return OnboardByApi.fillPersona(data); }) .then(() => { return OnboardByApi.fillAdminClaim(); }); } static onboardSelfSellRouge(leadToken?: string, origin?: string, data?: PersonaQuestionsData): Chainable<any> { return OnboardByApi.onboard(leadToken, origin).then(() => { data = { ...defaultPersonaData, ...data, userRole: data?.userRole || 'TRAVELER' }; return OnboardByApi.fillPersona(data); }); } static fillAdminClaim(): Chainable<any> { return cy.task('getDataFromCache', 'companyNameSuffix').then((companyNameSuffix) => { const companyName = 'TestCompany' + companyNameSuffix; cy.task('putDataInCache', { key: 'companyName', data: companyName }); cy.allure().logStep(`posting admin claim for ${companyName}`); return cy .request({ method: HttpRequest.Post, url: onboardApis.adminClaim, body: { address: { line1: 'page mill 1501', line2: '', city: 'Palo Alto', state: 'CA', country: 'US', postalCode: '94304' }, businessLegalName: companyName, businessPhoneNumber: '+112692673678', maxEmployeeCount: 10, annualTravelBudget: 1 }, headers: { Authorization: `TripActions ${OnboardByApi.ONBOARD_TOKEN}`, Accept: Accept.ApplicationJson }, retryOnStatusCodeFailure: false }) .then((response) => { expect(response.status).to.eq(200); AdminClaim.interceptedToken = response?.body?.token; }); }); } static loginWithOnboardedUser(visitHomePage = true): Chainable<any> { return cy.task('getDataFromCache', 'userEmail').then((userEmail) => { cy.allure().logStep(`login with onboarded user ${userEmail}`); cy.loginWithAuthToken({ email: userEmail, password: PASSWORD }); if (visitHomePage) { cy.allure().logStep(`login with onboarded user moving to home screen`); HomePage.visitHomePage(); } }); } static deleteLastOnboardedCompany(): Chainable<any> { const delegateStaticCompanyUuid = stagingUsers?.travel_planner_user?.companyUuid; return cy.task('getDataFromCache', 'companyUuid').then((companyUuid) => { if (!companyUuid || delegateStaticCompanyUuid === companyUuid) { throw new Error('No companyUuid for deletion'); } cy.allure().logStep(`deleting company ${companyUuid}`); return cy.deleteCompany(companyUuid.toString()); }); } }