qe-fe-automation
Version:
FE test automation framework using cypress
160 lines (145 loc) • 5.88 kB
text/typescript
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());
});
}
}