qe-fe-automation
Version:
FE test automation framework using cypress
96 lines (82 loc) • 3.11 kB
text/typescript
import { AmplitudeEvents } from '@growth-lib/index';
import { Timeouts } from '@utility-lib/constants';
const personaSelectors = {
answerByNumber: (answerNumber: number) => {
return '[data-testid="answerNumber' + answerNumber + '"]';
},
answerBySignupReason: (signupReason: SignupReason) => {
return '[data-testid="answer-' + signupReason + '"]';
},
firstPersonaAnswer: '[data-testid="answerNumber0"]',
secondPersonaAnswer: '[data-testid="answerNumber1"]',
thirdPersonaAnswer: '[data-testid="answerNumber2"]',
travelerPersonaAnswer: '[data-testid="answerNumber1"]',
startCompanySetup: '[data-testid="startSetup"]',
closeModalButton: '[data-testid="modal-header-close-button"]'
};
export enum SignupReason {
TRAVEL_AND_EXPENSE_SOLUTION = 'TRAVEL_AND_EXPENSE_SOLUTION',
TRAVEL_SOLUTION = 'TRAVEL_SOLUTION',
BOOK_FOR_OTHERS = 'BOOK_FOR_OTHERS',
BOOK_TRIP = 'BOOK_TRIP',
TEAM_OFFSITE = 'TEAM_OFFSITE'
}
enum PersonaQuestion {
FIRST = 'first',
SECOND = 'second',
THIRD = 'Third',
FOURTH = 'Fourth',
FIFTH = 'Fifth'
}
export class Persona {
static nonPersonaFlow() {
cy.allure().logStep('check we do not on persona question flow');
cy.get(personaSelectors.answerByNumber(0)).should('not.exist');
}
static answerFirstPersonaAsTravelerAndExpanseManagerAccount() {
Persona.answerFirstPersonaQuestion(SignupReason.TRAVEL_AND_EXPENSE_SOLUTION);
}
static answerFirstPersonaAsTravelerManagerAccount() {
Persona.answerFirstPersonaQuestion(SignupReason.TRAVEL_SOLUTION);
}
static answerFirstPersonaAsRogueTravelAccount() {
Persona.answerFirstPersonaQuestion(SignupReason.BOOK_TRIP);
}
static answerFirstPersonaAsBookForOtherAccount() {
Persona.answerFirstPersonaQuestion(SignupReason.BOOK_FOR_OTHERS);
}
static fillPersonaBeforeSignup(signupReason: SignupReason) {
Persona.answerSignupReason(signupReason);
}
static checkBookForOtherNotExist() {
cy.get(
personaSelectors.answerBySignupReason(SignupReason.TRAVEL_AND_EXPENSE_SOLUTION)
);
cy.get(personaSelectors.answerBySignupReason(SignupReason.BOOK_FOR_OTHERS)).should(
'not.exist'
);
}
static answerFirstPersonaQuestion(signupReason: SignupReason) {
cy.intercept('POST', new RegExp('/api/selfSell/onboard')).as('onboard');
Persona.answerSignupReason(signupReason);
cy.wait('@onboard').then((res) => {
if (res.response?.body?.companyUuid) {
cy.task('putDataInCache', {
key: 'companyUuid',
data: res.response?.body?.companyUuid
});
}
});
}
static answerSignupReason(signupReason: SignupReason) {
cy.allure().logStep('Answer Persona signup reason as ' + signupReason);
this.answerPersonaBySelector(personaSelectors.answerBySignupReason(signupReason));
}
static answerPersonaBySelector(selector: string) {
AmplitudeEvents.addExpectedAmplitudeEvents('self signup questionnaire opened');
cy.get(selector).click({ force: true });
AmplitudeEvents.addExpectedAmplitudeEvents(
'self signup questionnaire answer selected'
);
}
}