qe-fe-automation
Version:
FE test automation framework using cypress
162 lines (143 loc) • 6.87 kB
text/typescript
import { UserModal } from 'cypress/e2e/profile/lib/user-modal';
import { Random, Logs, utilitySelector, Utility } from '@utility-lib/index';
const invitationSelector = {
invitationsMenu: '[data-qaid="INVITATIONS-button"]',
invitationsMenuElement: (elName: string) => `.ta-menu-item--text[title="${elName}"]`,
createNewTraveler: '[data-testid="newGuestTravelerProfile"]',
addTravelerButton: '[data-testid="saveGuestTraveler"]',
invitationTitle: '[data-testid="tripInvitationTitle"]',
invitationLocation: '[data-testid="tripInvitationLocation"]',
invitationEventStartDate: '[data-testid="tripInvitationStartDate"]',
invitationEventEndDate: '[data-testid="tripInvitationEndDate"]',
suggestedArrivalTime: '[data-testid="latestArrivalTime"]',
suggestedDepartureTime: '[data-testid="earliestReturningTime"]',
flightDatePicker: '[qaid="flightRoundDepartureDateTrigger"]',
calendarDay: '[data-testid="calendarDay"]',
calendarMonth: '.ta-calendar-month',
calendarDoneBtn: '[data-testid="datePickerDoneButton"]',
teamEventUserGroup: '[qaid="teamEventUserGroup"]',
teamEventUserGroupInput: () => `${invitationSelector.teamEventUserGroup} > input`,
travellerDropDown: '[data-testid="travelerDropdown"]',
travellersGroup: '[data-testid="travelersGroup"]',
travelerTag: 'ta-user-tag',
verticalsTabGroup: '.ta-tabs__wrapper',
calendarDaySpan: '[data-testid="calendarDay"] span',
flightArrivalAirport: '[qaid="searchFormRoundArrivalAirport"] ta-typeahead input',
flightDepartureAirport: '[qaid="searchFormRoundDepartureAirport"] ta-typeahead input',
flightDepartureDate: '[qaid="flightRoundDepartureDateTrigger"]',
flightReturnDate: '[qaid="flightRoundReturnDateTrigger"]'
};
const email: string = 'user' + '_' + Random.randomString() + '@staging.tripactions.xyz';
export class Invitations {
static expandInvitationsMenu() {
cy.allure().logStep('expand invitations menu');
cy.get(invitationSelector.invitationsMenu).click();
}
static selectInvitationsMenuElement(elementName: string) {
cy.allure().logStep(`select invitations menu element: ${elementName}`);
cy.get(invitationSelector.invitationsMenuElement(elementName)).click();
}
static createGuestTraveller() {
cy.get(invitationSelector.createNewTraveler).click();
UserModal.fillTravelerName('John', 'Doe');
UserModal.fillBirthday(18);
UserModal.fillEmail(email);
UserModal.fillPhoneNumber('+1 123 453 45345');
UserModal.fillGender('MALE');
cy.get(invitationSelector.addTravelerButton).click();
cy.wait('@waitForSaveGuest').then((xhr) => {
Logs.cypressResponseLog('SAVED GUEST RESPONSE', xhr);
});
}
static selectTravelWindowsDates(tripStartDate: string, tripEndDate: string) {
cy.allure().logStep('select travel window dates');
cy.get(invitationSelector.flightDatePicker).click();
cy.get(invitationSelector.calendarDay).contains(tripStartDate).click();
cy.get(invitationSelector.calendarDay).contains(tripEndDate).click();
cy.get(invitationSelector.calendarDoneBtn).click();
}
static verifyInvitationName(invitationName: string) {
cy.allure().logStep(`verify invitation name is ${invitationName}`);
cy.get(invitationSelector.invitationTitle).contains(invitationName);
}
static verifyInvitationLocation(invitationLocation: string) {
cy.allure().logStep(`verify invitation location is ${invitationLocation}`);
cy.get(invitationSelector.invitationLocation)
.invoke('text')
.then((text) => {
const normalizedText = Utility.normalizeText(text);
const normalizedInvitationLocation = Utility.normalizeText(invitationLocation);
expect(normalizedText).to.contains(normalizedInvitationLocation);
});
}
static verifyInvitationEventStartDate(startDay: string) {
cy.allure().logStep('verify invitation event start date');
cy.get(invitationSelector.invitationEventStartDate).contains(startDay);
}
static verifyInvitationEventEndDate(endDay: string) {
cy.allure().logStep('verify invitation event end date');
cy.get(invitationSelector.invitationEventEndDate).contains(endDay);
}
static verifyLatestArrivalTime(latestArrivalTime: string) {
cy.allure().logStep('verify latest arrival time');
cy.get(invitationSelector.suggestedArrivalTime).contains(latestArrivalTime, {
matchCase: false
});
}
static verifyEarliestReturningTime(earliestReturningTime: string) {
cy.allure().logStep('verify earliest returning time');
cy.get(invitationSelector.suggestedDepartureTime).contains(earliestReturningTime, {
matchCase: false
});
}
static verifyFlightReturnDate(returnDate: string) {
cy.allure().logStep('verify flight return date');
cy.get(invitationSelector.flightReturnDate).contains(returnDate);
}
static verifyFlightDepartureDate(departureDate: string) {
cy.allure().logStep('verify flight departure date');
cy.get(invitationSelector.flightDepartureDate).contains(departureDate);
}
static verifyOnlyTravelDatesAreEnabled(dayBefore: string, dayAfter: string) {
cy.allure().logStep('verify only travel window dates are enabled');
cy.get(invitationSelector.flightDatePicker).click();
cy.get(invitationSelector.calendarMonth)
.eq(0)
.contains(invitationSelector.calendarDaySpan, `${dayBefore}`)
.parent()
.should('have.class', 'ta-calendar-day--disabled');
cy.get(invitationSelector.calendarMonth)
.eq(0)
.contains(invitationSelector.calendarDaySpan, `${dayAfter}`)
.parent()
.should('have.class', 'ta-calendar-day--disabled');
}
static selectExtraGuestByInput(extraGuestInput: string) {
cy.allure().logStep('set extra guest');
cy.get(invitationSelector.teamEventUserGroupInput())
.should('have.attr', 'placeholder', 'Add one extra guest')
.type(extraGuestInput);
cy.wait('@waitForTravellers');
cy.get(invitationSelector.travellerDropDown).contains('Guests').next().click();
}
static verifyNumberOfTravelers(numberOfTravelers: number) {
cy.allure().logStep(`verify number of travelers is ${numberOfTravelers}`);
cy.get(invitationSelector.travellersGroup)
.find(invitationSelector.travelerTag)
.should('have.length', numberOfTravelers);
}
static verifyOnlyAllowedVerticalsTabsAreVisible(tabs: string[], length: number) {
cy.allure().logStep(
'verify only tabs for allowed verticals are visible in invitation'
);
cy.get(invitationSelector.verticalsTabGroup).within(() => {
cy.get(utilitySelector.buttonSelector).each((item, index) => {
expect(item).to.be.visible;
expect(item.text().trim()).contains(tabs[index]);
});
});
cy.get(invitationSelector.verticalsTabGroup)
.find(utilitySelector.buttonSelector)
.should('have.length', length);
}
}