UNPKG

qe-fe-automation

Version:
227 lines (207 loc) 8.04 kB
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); }); }); } }