qe-fe-automation
Version:
FE test automation framework using cypress
227 lines (207 loc) • 8.04 kB
text/typescript
import { bookingVerticalType, Timeouts, Utility } from '@utility-lib/index';
const flightItinerarySelector = {
viewTripsButton:
'.booking-complete-others__left__buttons .ta-button.ta-button--medium-size.ta-button--primary-color.ta-button--primary-theme',
closeSuggestHotelModalButton: '[qaid="bookingSuccessClose"] ta-svg-image',
itineraryBody: '.itinerary__content-body__item',
addToExistingTrip: 'ta-add-to-trip-dropdown',
selectBookingType:
'[class="add-to-trip-dropdown-popover ng-star-inserted"] [role="button"]',
viewItinerary: '.navan-trip-card',
bookingCard: 'button[qaid="goToItinerary"]',
bookingId:
'div[class$="trip-event-card-flight__booking-info__key"]:contains("Navan")+div',
tripactionsBookingId:
'div[class$="trip-event-card-flight__booking-info__key"]:contains("TripActions")+div',
goToItinerary: '[qaid="goToItinerary"]',
changeFlightButton: '.ta-trip-card-v2 .ta-trip-card-v2__actions-change',
tripTimeline: 'ta-trip-timeline',
tripTimelineCardDetails: '[class^="trip-event-card-flight__seats__wrapper"]',
flightBookingId: '.trip-event-card-flight__booking-info__row div',
departureLocation: '[qaid="flightCardMiniDepartureAirport"]',
arrivalLocation: '[qaid="flightCardMiniArrivalAirport"]',
airline: '.trip-event-card-flight__flight-info__flight-card',
airlineLoyaltyCard: ':is([class="ta-loyalty-card"], [class^="airline-club-banner"])',
itineraryPageChangeFlightButton: '[qaid="eventActionChangeFlight"]'
};
export class FlightItinerary {
static waitToBeLoaded(): void {
cy.allure().logStep('wait for flight itinerary page APIs to complete');
cy.wait('@tickets').then((interception) => {
cy.task('putDataInCache', {
key: 'bookingUuid',
data: interception.request.url.split('/')[8]
});
});
cy.get(flightItinerarySelector.flightBookingId)
.eq(1)
.then((element) => {
cy.task('putDataInCache', {
key: 'bookingID',
data: element.text().trim()
});
});
cy.url().then((url) => {
const getUrl = url;
cy.log('<<< Flight Itinerary URL is >>>: ' + getUrl);
cy.task('putDataInCache', {
key: 'ItineraryURL',
data: getUrl
});
});
}
static loadAndTicketFlightBooking(): void {
cy.wait('@waitForFlightTickets');
cy.task('getDataFromCache', 'bookingUuid').then((bookingUuid) => {
cy.ticketFlightBookingWithoutLogin(bookingUuid);
});
}
static loadFirstTripItemItinerary(): void {
cy.visit('app/user2/trips');
FlightItinerary.goToItineraryPage();
cy.wait('@waitForFlightTickets');
}
static initiateFlightExchange(): void {
cy.get(flightItinerarySelector.itineraryPageChangeFlightButton).click();
cy.wait('@waitForFlightTickets');
}
static syncAndTicketFlightBooking(): void {
cy.task('getDataFromCache', 'bookingUuid').then((bookingUuid) => {
cy.task('getDataFromCache', 'agencyUuid').then((agencyData) => {
cy.task('getDataFromCache', 'bookingID').then((bookingID) => {
console.log(bookingID);
console.log(agencyData);
console.log(bookingUuid);
cy.ticketAndSyncFlightBooking(bookingUuid, agencyData, bookingID);
});
});
});
}
static forcePDFSyncAPI(): void {
cy.task('getDataFromCache', 'bookingUuid').then((bookingUuid) => {
cy.forcePDFSyncAPI(bookingUuid);
cy.allure().logStep('Force PDF Sync API Call bookingUuid-> ' + bookingUuid);
});
}
static retrieveFlightBookingPDF(): void {
cy.task('getDataFromCache', 'bookingUuid').then((bookingUuid) => {
cy.retrieveDownloadPDF(bookingUuid);
});
}
static viewItineraryPage(): void {
cy.allure().logStep('Go to itinerary page');
let isSuggestHotelFlow = false;
cy.task('getDataFromCache', 'suggestedHotelSearch').then(
(suggestedHotelSearch: any) => {
isSuggestHotelFlow = suggestedHotelSearch;
const selector = suggestedHotelSearch
? flightItinerarySelector.closeSuggestHotelModalButton
: flightItinerarySelector.viewTripsButton;
cy.get(selector).eq(0).click();
if (!isSuggestHotelFlow) {
cy.get(flightItinerarySelector.goToItinerary, Timeouts.MEDIUM_TIMEOUT_60_SEC)
.eq(0)
.should('be.visible')
.click({ force: true });
}
}
);
}
static openTrip() {
Utility.openTrip();
}
static verifyFlightItineraryPage(): void {
cy.allure().logStep('wait for flight itinerary page to be loaded');
cy.get(flightItinerarySelector.bookingId).then((ele) => {
cy.wrap(ele).scrollIntoView();
cy.wrap(ele).should('be.visible');
});
}
static cancelFlight(optional = false) {
Utility.closeSurveyIfExists();
Utility.cancelTrip('Flight');
Utility.selectCancellationReason('Change of plans');
if (!optional) {
Utility.confirmFlightCancellation();
Utility.expectCancelledLabelIsPresent();
}
}
static addNewTripInCurrentItinerary(bookingType: bookingVerticalType) {
cy.get(flightItinerarySelector.addToExistingTrip).click();
cy.get(flightItinerarySelector.selectBookingType).contains(bookingType).click();
cy.allure().logStep(`add new trip type ${bookingType} in current itinerary`);
}
static changeFlight() {
cy.allure().logStep('change flight');
cy.get(flightItinerarySelector.changeFlightButton).eq(0).click();
}
static visitFlightItineraryPageByTripUuid(tripUuid: string) {
cy.allure().logStep('Visit flight itinerary page');
cy.visit(`app/user2/trips/${tripUuid}/itinerary`);
cy.wait('@waitForTripTimeline');
}
static getTripUuidFromCacheAndVisitFlightItineraryPage() {
cy.task('getDataFromCache', 'tripUuid').then((tripUuid: any) => {
expect(tripUuid, 'TripUuid should not be null').to.not.be.null;
this.visitFlightItineraryPageByTripUuid(tripUuid);
});
}
static verifyNumberOfPassengers(numberOfPassengers: number) {
cy.allure().logStep(`verify number of passengers is ${numberOfPassengers}`);
cy.get(flightItinerarySelector.tripTimeline).contains('Departs').click();
Cypress._.times(numberOfPassengers, (iteration) => {
cy.get(flightItinerarySelector.tripTimelineCardDetails).contains(
`Passenger ${iteration + 1}`
);
});
}
static goToItineraryPage() {
cy.task('getDataFromCache', 'ItineraryURL').then((searchURL: any) => {
cy.visit(searchURL);
});
}
static getFlightDetail() {
cy.get(flightItinerarySelector.arrivalLocation).then((element: any) => {
cy.task('putDataInCache', {
key: 'arrivalLocation',
data: element.text().trim()
});
});
cy.get(flightItinerarySelector.departureLocation).then((element: any) => {
cy.task('putDataInCache', {
key: 'departureLocation',
data: element.text().trim()
});
});
cy.get(flightItinerarySelector.airline).then((element) => {
const airlineName = element.text().split(' ')[0];
const flightName = element.text().split(' ')[1];
const flightCode = flightName.substring(flightName.indexOf(' ') + 1);
const airlineCode = flightCode.substring(0, 2);
const flightNumber = flightCode.substring(2);
cy.task('putDataInCache', {
key: 'airline',
data: airlineName.trim()
});
cy.task('putDataInCache', {
key: 'airlineCode',
data: airlineCode.trim()
});
cy.task('putDataInCache', {
key: 'flightNumber',
data: flightNumber.trim()
});
});
}
static expectLoyaltyPointsIsPresent() {
Utility.closeSurveyIfExists();
cy.get(flightItinerarySelector.airlineLoyaltyCard).should('be.visible');
}
static sabreSyncFlightBooking(): void {
cy.task('getDataFromCache', 'agencyUuid').then((agencyData) => {
cy.task('getDataFromCache', 'bookingID').then((bookingID) => {
cy.sabreSyncFlightBooking(agencyData, bookingID);
});
});
}
}