UNPKG

qe-fe-automation

Version:
810 lines (710 loc) 33.6 kB
import { AdminDashboardPage } from '@admin-lib/admin_avi/admin_dashboard_section'; import { PolicyPages } from '@growth-lib/policy-page'; import { Timeouts } from '@utility-lib/constants'; const selectors = { getStartedPolicyWizard: '[data-testid="wizard-landing-page-button-start"] > .ta-button-v2', allBookingsRadioButton: '[data-testid="radio-control__item--All bookings"]', outOfPolicyRadioButton: '[data-testid="radio-control__item--Only out-of-policy bookings"]', yesRadioButton: '[data-testid="radio-control__item--Yes"]', notRightNowRadioButton: '[data-testid="radio-control__item--Not right now"]', noneRadioButton: '[data-testid="radio-control__item--None"]', nextButton: '[data-testid="policy-wizard-footer-next-cta"] > .ta-button-v2', backButton: '[data-testid="policy-wizard-footer-back-cta"] > .ta-button-v2', backButtonInSaveAndClosePage: '[data-testid="policy-wizard-summary-footer-back-cta"]', summaryNextButton: '[data-testid="policy-wizard-summary-footer-next-cta"] > .ta-button-v2', percentInput: '[data-testid="percentage__input"]', maxPriceDropdown: '[data-testid="max-price-wrapper-accordion"]', maxPriceInput: '[data-testid="max-price-accordion__input"]', bookingLeadTimeInput: '[data-testid="booking-lead-time__input"]', cabinAndSeatUpgradeDropdown: '[data-testid="upgrades-accordion"]', cabinUpgradeToggle: '[data-testid="upgrades-accordion__cabin-upgrade-toggle"]', seatToggle: '[data-testid="upgrades-accordion__seat-toggle"]', carClassSelect: '[data-testid="other-flight-policy__cabins__select"][value="electric"]', otherFlightPolicyCabinSelect: '[data-testid="RuleType.FLIGHT-policy__control__cabins__select"]', otherHotelPolicyClassSelect: '[data-testid="RuleType.HOTEL-policy__control__cabins__select"]', otherCarPolicyClassSelect: '[data-testid="RuleType.CAR-policy__control__cabins__select"]', summarySaveAndCloseCta: '[data-testid="policy-wizard-summary-footer-save-and-close-cta"] > .ta-button-v2', saveAndCloseWholeWizardCta: '[data-testid="policy-wizard-footer-save-and-close-cta"] > .ta-button-v2', maxAllowedCabinPremiumEconomy: '[data-testid="RuleType.FLIGHT-policy__cabins__select--Premium Economy"]', skipToTrainPolicyButton: '[data-testid="policy-wizard-footer-go-to-train-cta"]', summaryTableFlightMedianPrice: '[data-testid="summary-table__price--flight"]', summaryTableFlightMaxPrice: '[data-testid="summary-table__maxPrice--flight"]', summaryTableFlightMaxCabin: '[data-testid="summary-table__cabin--flight"]', summaryTableFlightBookLeadTime: '[data-testid="summary-table__lead-time--flight"]', summaryTableFlightAvailCabinUpgrades: '[data-testid="summary-table__upgrades--flight"] > :nth-child(1)', summaryTableFlightAvailSeatUpgrades: '[data-testid="summary-table__upgrades--flight"] > :nth-child(2)', summaryTableHotelMedianPrice: '[data-testid="summary-table__price--hotel"]', summaryTableHotelMaxPrice: '[data-testid="summary-table__maxPrice--hotel"]', summaryTableHotelRoomType: '[data-testid="summary-table__upgrades--hotel"]', summaryTableHotelBookLeadTime: '[data-testid="summary-table__lead-time--hotel"]', summaryTableCarMedianPrice: '[data-testid="summary-table__price--car"]', summaryTableCarBookLeadTime: '[data-testid="summary-table__lead-time--car"]', summaryTableCarClass: '[data-testid="summary-table__upgrades--car"]', summaryTableTrainMaxPrice: '[data-testid="summary-table__maxPrice--train"]', summaryTableTrainBookLeadTime: '[data-testid="summary-table__lead-time--train"]', summaryTableTrainClass: '[data-testid="summary-table__upgrades--train"]', validationPageFlightIcon: '[data-testid="polcy-side-navigation__Flights"]', validationPageTrainIcon: '[data-testid="polcy-side-navigation__Trains"]', validationPageHotelIcon: '[data-testid="polcy-side-navigation__Hotels"]', validationPageCarIcon: '[data-testid="polcy-side-navigation__Rental cars"]', flightValidationPageCost: '[data-testid="flight-cost-per-booking__column-short"]', flightBookingNotifications: '[data-testid="flight-booking-notifications-long_editable"]', flightDurationline: '[data-testid="flight-duration-column_editable"]', flightUpgradesLine: '[data-testid="flight-upgrades-long_editable"]', flightCabinClassLong: '[data-testid="flight-cabin-long_editable"]', flightBookingLeadTimeLong: '[data-testid="flight-bookingLeadTime-long_editable"]', validationPageCost: '[data-testid="ta-co-table__content-cost_editable"]', hotelValidationPageRoomsCancellation: '[data-testid="hotel-rooms-cancellation_editable"]', ValidationPageBookLeadTime: '[data-testid="bookingLeadTime-daysBefore_editable"]', ValidationPageBookingApproval: '[data-testid="bookingNotifications-approvalType_editable"]', trainBookingNotifications: '[data-testid="train-bookingNotifications_editable"]', ValidationPageClassAllowed: '[data-testid="ClassAllowedColumn_editable"]', dismissButtonModalValidationPage: '[data-testid="video-tooltip-dismiss"]', flightOutOfPolicy: '[data-testid="flight-policy__out-of-policy-dynamic-input-ui"]', hotelOutOfPolicy: '[data-testid="hotel-out-of-policy"]', carOutOfPolicy: '[data-testid="car-out-of-policy"]', trainOutOfPolicy: '[data-testid="train-out-of-policy-title"]', travelerToggleView: '[data-testid="verticalsTabGroup"] > button:nth-child(1)', adminToggleView: '[data-testid="verticalsTabGroup"] > button:nth-child(2)', allowRefundableRoomHotel: '[data-testid="RuleType.HOTEL-policy__cabins__select--Allow refundable room bookings only"]', dropModalExitPolicySetup: '[data-testid="discardChanges"]', dynamicPolicyModal: '[data-testid="option-disclaimer__info"]', bookingLeadTimeModal: '[data-testid="booking-lead-time__info"]' }; const viewSelectors = { fiftyPriceShield: '[data-testid="flight-policy__out-of-policy-fifty-price-currency-shield-icon"]', oneFiftyPriceShield: '[data-testid="flight-policy__out-of-policy-one-fifty-price-currency-shield-icon"]', hotelHundrendPriceShield: '[data-testid="hotel-policy__shield-hundred"]', hotelThreefiftyPriceShield: '[data-testid="hotel-policy__shield-threefifty"]', policyTitle: '[data-testid="policy"]', daysBeforeDepartureTitle: '[data-testid="days-booked-before-departure"]', allFlightsTitle: '[data-testid="all-flights"]', otherFlightPremiumEconomyShield: '[data-testid="other-flight-lead-icon-premium-business1"]', otherFlightPremiumShield: '[data-testid="other-flight-shield-icon-premium1"]', otherHotelRefundableShield1: '[data-testid="other-hotel-refundable-shield-icon1"]', otherHotelRefundableShield2: '[data-testid="other-hotel-refundable-shield-icon2"]', carHundrendPriceShield: '[data-testid="car-policy__shield-hundred"]', carOneTwenyFivePriceShield: '[data-testid="car-policy__shield-one-tweny-five"]' }; const MEDIAN_PRICE = 100; const percentInput = '50'; const maxFlightPriceInput = '1,000'; const bookLeadTimeInput = '15'; const maxCarPriceInput = '200'; const maxHotelPriceInput = '500'; const maxTrainPriceInput = '100'; const carClassAllowed = 'Luxury'; const gotItButtonText = 'Got it'; export enum PolicyWizardState { NOT_STARTED = 'NOT_STARTED', NOTIFICATIONS_CONFIGURED = 'NOTIFICATIONS_CONFIGURED', COMPLETED = 'COMPLETED' } export enum PolicyWizardToggleView { TRAVELER = 'TRAVELER', ADMIN = 'ADMIN' } export class PolicyWizardPages { static goToPolicyWizardPage(): void { cy.allure().logStep('go to get started policy wizard page'); AdminDashboardPage.visitAdminDashboardPage(); PolicyPages.clickTravelPolicyButtonInMenu(); } static toggleView(policyWizardToggleView: PolicyWizardToggleView): void { policyWizardToggleView === PolicyWizardToggleView.TRAVELER ? cy.get(selectors.travelerToggleView).click() : cy.get(selectors.adminToggleView).click(); } static clickOnStartedPolicyWizard(): void { cy.allure().logStep('policy wizard click on get started'); cy.get(selectors.getStartedPolicyWizard).click(); cy.wait('@waitForFlightRule'); cy.wait('@waitForHotelRule'); cy.wait('@waitForCarRule'); cy.wait('@waitForTrainRule'); cy.wait(Timeouts.SHORT_TIMEOUT_3_SEC.timeout); } static patchPolicyState(policyWizardState: PolicyWizardState, token: string): void { cy.allure().logStep(`policy wizard update policy ${policyWizardState} state`); cy.request({ method: 'PATCH', url: `/api/selfSetup/company/policySetup`, body: { wizardState: policyWizardState }, headers: { Authorization: token } }).then((response) => { expect(response.status).to.eq(200); }); } static clickNextButton(): void { cy.allure().logStep('policy wizard click next button'); cy.get(selectors.nextButton).click(); } static clickOnNoneAnswer(): void { cy.allure().logStep('policy wizard click on "none" (no notifications) answer'); cy.get(selectors.noneRadioButton).click(); } static setBookNotificationAll(): void { cy.allure().logStep('policy wizard choose all bookings notifications'); cy.get(selectors.allBookingsRadioButton).click(); } static setBookingPolicyYes(): void { cy.allure().logStep('policy wizard choose yes booking policy'); cy.get(selectors.yesRadioButton).click(); } static fillEntireWizardFlowAndVerifyAnswers(): void { PolicyWizardPages.setBookNotificationAll(); PolicyWizardPages.clickNextButton(); PolicyWizardPages.setBookingPolicyYes(); PolicyWizardPages.clickNextButton(); PolicyWizardPages.verifyFlightSpendPolicyPage(); PolicyWizardPages.clickNextButton(); PolicyWizardPages.verifyOtherFlightSpendPolicyPage(); PolicyWizardPages.clickNextButton(); PolicyWizardPages.verifyHotelSpendPolicyPage(); PolicyWizardPages.clickNextButton(); PolicyWizardPages.verifyOtherHotelSpendPolicyPage(); PolicyWizardPages.clickNextButton(); PolicyWizardPages.clickSummaryPageNextButton(); PolicyWizardPages.verifyCarSpendPolicyPage(); PolicyWizardPages.clickNextButton(); PolicyWizardPages.verifyOtherCarSpendPolicyPage(); PolicyWizardPages.clickNextButton(); PolicyWizardPages.clickSummaryPageNextButton(); PolicyWizardPages.verifyTrainSpendPolicyPage(); PolicyWizardPages.clickNextButton(); } static fillFlightSpendPolicyPage(): void { cy.allure().logStep('policy wizard flight spend policy'); cy.get(selectors.percentInput).wait(100).clear(); cy.get(selectors.percentInput).type(percentInput); cy.get(selectors.maxPriceDropdown).click(); cy.get(selectors.maxPriceInput).wait(100).clear(); cy.get(selectors.maxPriceInput).type(maxFlightPriceInput); } static verifyFlightSpendPolicyPage(): void { cy.allure().logStep('verifyFlightSpendPolicyPage'); PolicyWizardPages.fillFlightSpendPolicyPage(); cy.get(selectors.flightOutOfPolicy).contains(`$${+percentInput + MEDIAN_PRICE} and up is out of policy`); cy.get(viewSelectors.fiftyPriceShield).should('not.exist'); cy.get(viewSelectors.oneFiftyPriceShield).should('be.visible'); PolicyWizardPages.toggleView(PolicyWizardToggleView.ADMIN); cy.get(viewSelectors.policyTitle).contains(`Median price + ${percentInput}%`); cy.get(viewSelectors.policyTitle).contains(`Max price per booking: 1000$`); } static verifyOtherFlightSpendPolicyPage(): void { cy.allure().logStep('verifyOtherFlightSpendPolicyPage'); PolicyWizardPages.toggleView(PolicyWizardToggleView.TRAVELER); cy.get(selectors.otherFlightPolicyCabinSelect).click(); cy.get(selectors.maxAllowedCabinPremiumEconomy).click(); cy.get(viewSelectors.otherFlightPremiumEconomyShield).should('not.exist'); cy.get(viewSelectors.otherFlightPremiumShield).should('exist'); PolicyWizardPages.toggleView(PolicyWizardToggleView.ADMIN); cy.get(viewSelectors.policyTitle).contains(`Premium Economy`); cy.get(viewSelectors.daysBeforeDepartureTitle).contains(`7 Days`); } static verifyHotelSpendPolicyPage(): void { cy.allure().logStep('verifyHotelSpendPolicyPage'); PolicyWizardPages.toggleView(PolicyWizardToggleView.TRAVELER); PolicyWizardPages.fillHotelSpendPolicyPage(); cy.get(selectors.hotelOutOfPolicy).contains(`$${+percentInput + MEDIAN_PRICE} and up is out of policy`); cy.get(viewSelectors.hotelHundrendPriceShield).should('not.exist'); cy.get(viewSelectors.hotelThreefiftyPriceShield).should('be.visible'); PolicyWizardPages.toggleView(PolicyWizardToggleView.ADMIN); cy.get(viewSelectors.policyTitle).contains(`Fair market price + ${percentInput}%`); cy.get(viewSelectors.policyTitle).contains(`Max price per booking: 500$`); } static verifyOtherHotelSpendPolicyPage(): void { cy.allure().logStep('verifyOtherHotelSpendPolicyPage'); PolicyWizardPages.toggleView(PolicyWizardToggleView.TRAVELER); cy.get(viewSelectors.otherHotelRefundableShield1).should('not.exist'); cy.get(viewSelectors.otherHotelRefundableShield2).should('not.exist'); cy.get(selectors.otherHotelPolicyClassSelect).click(); cy.get(selectors.allowRefundableRoomHotel).click(); cy.get(viewSelectors.otherHotelRefundableShield1).should('be.visible'); cy.get(viewSelectors.otherHotelRefundableShield2).should('be.visible'); PolicyWizardPages.toggleView(PolicyWizardToggleView.ADMIN); cy.get(viewSelectors.policyTitle).contains(` Allow refundable room bookings only`); cy.get(viewSelectors.daysBeforeDepartureTitle).contains(`7 Days`); } static verifyCarSpendPolicyPage(): void { cy.allure().logStep('verifyCarSpendPolicyPage'); cy.get(viewSelectors.carHundrendPriceShield).should('not.exist'); cy.get(viewSelectors.carOneTwenyFivePriceShield).should('be.visible'); cy.get(selectors.carOutOfPolicy).contains(`$125 and up is out of policy`); PolicyWizardPages.fillCarSpendPolicyPage(); cy.get(viewSelectors.carHundrendPriceShield).should('not.exist'); cy.get(viewSelectors.carOneTwenyFivePriceShield).should('not.exist'); PolicyWizardPages.toggleView(PolicyWizardToggleView.ADMIN); cy.get(viewSelectors.policyTitle).contains(`Fair market price + ${percentInput}%`); cy.get(viewSelectors.policyTitle).contains(`Max price per booking: 200$`); } static verifyOtherCarSpendPolicyPage(): void { cy.allure().logStep('verifyOtherCarSpendPolicyPage'); PolicyWizardPages.toggleView(PolicyWizardToggleView.TRAVELER); PolicyWizardPages.fillOtherCarPolicyPage(); PolicyWizardPages.toggleView(PolicyWizardToggleView.ADMIN); cy.get(viewSelectors.policyTitle).contains(carClassAllowed); cy.get(viewSelectors.daysBeforeDepartureTitle).contains(`${bookLeadTimeInput} Days`); } static verifyTrainSpendPolicyPage(): void { cy.allure().logStep('verifyTrainSpendPolicyPage'); cy.get(selectors.trainOutOfPolicy).contains(`No pricing limit defined`); PolicyWizardPages.fillTrainSpendPolicyPage(); cy.get(selectors.trainOutOfPolicy).contains(`$${+maxTrainPriceInput} and up is out of policy`); PolicyWizardPages.toggleView(PolicyWizardToggleView.ADMIN); cy.get(viewSelectors.daysBeforeDepartureTitle).contains(`${bookLeadTimeInput} Days`); } static fillFlightAndHotelFlow(): void { this.clickNextButton(); this.fillFlightSpendPolicyPage(); this.clickNextButton(); this.fillOtherFlightPolicyPage(); this.clickNextButton(); this.fillHotelSpendPolicyPage(); this.clickNextButton(); this.fillOtherHotelPolicyPage(); this.clickNextButton(); } static fillFlightAndHotelWithMoveToCarsFlow(): void { this.clickNextButton(); this.setBookingPolicyYes(); this.fillFlightAndHotelFlow(); this.clickSummaryPageNextButton(); } static setBookNotificationOutOfPolicy(): void { cy.allure().logStep('policy wizard click on out of policy answer'); cy.get(selectors.outOfPolicyRadioButton).click(); } static fillFlowWithOutOfPolicyAnswer(): void { this.setBookNotificationOutOfPolicy(); this.fillFlightAndHotelFlow(); } static fillOtherFlightPolicyPage(): void { cy.allure().logStep('policy wizard other flight policy'); cy.get(selectors.otherFlightPolicyCabinSelect).click(); cy.get(selectors.maxAllowedCabinPremiumEconomy).click(); cy.get(selectors.bookingLeadTimeInput).clear(); cy.get(selectors.bookingLeadTimeInput).type(bookLeadTimeInput); cy.get(selectors.cabinAndSeatUpgradeDropdown).click(); cy.get(selectors.cabinUpgradeToggle).click(); cy.get(selectors.seatToggle).click(); } static fillHotelSpendPolicyPage(): void { cy.allure().logStep('policy wizard hotel spend policy'); cy.get(selectors.percentInput).wait(100).clear(); cy.get(selectors.percentInput).type(percentInput); cy.get(selectors.maxPriceDropdown).click(); cy.get(selectors.maxPriceInput).wait(100).clear(); cy.get(selectors.maxPriceInput).type(maxHotelPriceInput); } static fillOtherHotelPolicyPage(): void { cy.allure().logStep('policy wizard other hotel policy'); cy.get(selectors.otherHotelPolicyClassSelect).click(); cy.get(selectors.bookingLeadTimeInput).wait(100).clear(); cy.get(selectors.bookingLeadTimeInput).type(bookLeadTimeInput); } static clickSummaryStageSaveAndClose(): void { cy.allure().logStep('policy wizard summary stage save and close'); cy.get(selectors.summarySaveAndCloseCta).click(); } static clickSaveAndCloseEndOfWizard(): void { cy.allure().logStep(' click save and close at the end of the wizard flow'); cy.get(selectors.saveAndCloseWholeWizardCta).click(); } static clickOnBookingPolicyNotRightNowAnswer(): void { cy.allure().logStep('policy wizard not right now'); cy.get(selectors.notRightNowRadioButton).click(); } static clickBackButton(): void { cy.allure().logStep('policy wizard click 1 time back button'); cy.get(selectors.backButton).click(); } static clickTwiceBackButton(): void { cy.allure().logStep('policy wizard click 2 times back button'); cy.get(selectors.backButton).click(); cy.get(selectors.backButton).click(); } static clickTwiceBackAndOneBackInSaveAndClose(): void { cy.allure().logStep('policy wizard click 3 times back button'); this.clickTwiceBackButton(); cy.get(selectors.backButtonInSaveAndClosePage).click(); } static checkDynamicPolicyModal(): void { cy.allure().logStep('policy wizard check dynamic policy modal'); cy.get(selectors.dynamicPolicyModal).click(); cy.allure().logStep('Click the "Got it" button'); cy.contains('button', gotItButtonText).click(); } static checkBookingLeadTimeModal(): void { cy.allure().logStep('policy wizard check booking lead time modal'); cy.get(selectors.bookingLeadTimeModal).click(); cy.allure().logStep('Check Modal'); cy.contains('button', gotItButtonText).click(); } static verifyDropModal(): void { cy.allure().logStep('policy wizard verify drop modal'); cy.get(selectors.dropModalExitPolicySetup).should('be.visible'); } static verifyFlightNotificationsOnlyVisible(): void { cy.allure().logStep('Verify all flight policy elements are not visible and only notifications is visible'); cy.get(selectors.flightValidationPageCost).should('not.exist'); cy.get(selectors.flightCabinClassLong).should('not.exist'); cy.get(selectors.flightUpgradesLine).should('not.exist'); cy.get(selectors.flightDurationline).should('not.exist'); cy.get(selectors.flightBookingNotifications).should('be.visible'); } static verifyTrainNotificationsOnlyVisible(): void { cy.allure().logStep('Click train icon'); cy.get(selectors.validationPageTrainIcon).click(); cy.allure().logStep('Verify all train policy elements are not visible and only notifications is visible'); cy.get(selectors.validationPageCost).should('not.exist'); cy.get(selectors.ValidationPageClassAllowed).should('not.exist'); cy.get(selectors.ValidationPageBookLeadTime).should('not.exist'); cy.get(selectors.trainBookingNotifications).should('be.visible'); } static verifyHotelNotificationsOnlyVisible(): void { cy.allure().logStep('Click hotel icon'); cy.get(selectors.validationPageHotelIcon).click(); cy.allure().logStep('Verify all hotel policy elements are not visible and only notifications is visible'); cy.get(selectors.validationPageCost).should('not.exist'); cy.get(selectors.ValidationPageClassAllowed).should('not.exist'); cy.get(selectors.hotelValidationPageRoomsCancellation).should('not.exist'); cy.get(selectors.ValidationPageBookingApproval).should('be.visible'); } static verifyCarNotificationsOnlyVisible(): void { cy.allure().logStep('Click car icon'); cy.get(selectors.validationPageCarIcon).click(); cy.allure().logStep('Verify all car policy elements are not visible and only notifications is visible'); cy.get(selectors.validationPageCost).should('not.exist'); cy.get(selectors.ValidationPageClassAllowed).should('not.exist'); cy.get(selectors.hotelValidationPageRoomsCancellation).should('not.exist'); cy.get(selectors.ValidationPageBookingApproval).should('be.visible'); } static verifyFirstSaveAndCloseNotRightNowFlow(): void { cy.allure().logStep('policy wizard verify first save and close only notifications'); this.verifyFlightNotificationsOnlyVisible(); this.verifyTrainNotificationsOnlyVisible(); this.verifyHotelNotificationsOnlyVisible(); this.verifyCarNotificationsOnlyVisible(); } static fillEntireWizardFlow(): void { this.setBookNotificationAll(); this.fillFlightAndHotelWithMoveToCarsFlow(); this.fillCarSpendPolicyPage(); this.clickNextButton(); this.fillOtherCarPolicyPage(); this.clickNextButton(); this.clickSummaryPageNextButton(); this.fillTrainSpendPolicyPage(); this.clickNextButton(); this.summaryTableDataValidation(); } static policyWizardFlowWithBackNavigations(): void { this.fillEntireWizardFlow(); this.clickTwiceBackAndOneBackInSaveAndClose(); this.verifyOtherCarPolicyContent(); this.clickTwiceBackAndOneBackInSaveAndClose(); this.clickBackButton(); this.verifyHotelSpendPolicyContent(); this.clickBackButton(); this.checkBookingLeadTimeModal(); this.clickBackButton(); this.verifyFlightSpendPolicyContent(); this.checkDynamicPolicyModal(); this.clickTwiceBackButton(); this.clickBackButton(); this.verifyDropModal(); } static fillFlowWithSkipFromCarToTrainPolicy(): void { this.setBookNotificationAll(); this.fillFlightAndHotelWithMoveToCarsFlow(); this.clickSkipToTrainPolicyButton(); this.fillTrainSpendPolicyPage(); this.clickNextButton(); } static setNotificationsNotRightNowFlow(): void { this.clickOnNoneAnswer(); this.clickNextButton(); this.clickOnBookingPolicyNotRightNowAnswer(); this.clickSaveAndCloseEndOfWizard(); } static clickSummaryPageNextButton(): void { cy.allure().logStep('policy wizard summary page next button'); cy.get(selectors.summaryNextButton).click(); } static fillCarSpendPolicyPage(): void { cy.allure().logStep('policy wizard car spend policy'); cy.get(selectors.percentInput).wait(100).clear(); cy.get(selectors.percentInput).type(percentInput); cy.get(selectors.maxPriceDropdown).click(); cy.get(selectors.maxPriceInput).wait(100).clear(); cy.get(selectors.maxPriceInput).type(maxCarPriceInput); } static verifyOtherCarPolicyContent(): void { const expectedValues = { carClass: 'Luxury', bookingLeadTime: bookLeadTimeInput }; cy.allure().logStep('Verify car policy content has not changed'); cy.get(selectors.otherCarPolicyClassSelect).should('contain', expectedValues.carClass); cy.get(selectors.bookingLeadTimeInput).should('have.value', expectedValues.bookingLeadTime); } static verifyHotelSpendPolicyContent(): void { const expectedValues = { PercentInput: percentInput, MaxHotelPriceInput: maxHotelPriceInput }; cy.allure().logStep('Verify hotel spend policy content is correct'); cy.get(selectors.percentInput).should('have.value', expectedValues.PercentInput); cy.get(selectors.maxPriceInput).should('have.value', expectedValues.MaxHotelPriceInput); } static verifyFlightSpendPolicyContent(): void { const expectedValues = { PercentInput: percentInput, MaxFlightPriceInput: 1000 }; cy.allure().logStep('Verify flight spend policy content is correct'); cy.get(selectors.percentInput).should('have.value', expectedValues.PercentInput); cy.get(selectors.maxPriceInput).should('have.value', expectedValues.MaxFlightPriceInput); } static fillOtherCarPolicyPage(): void { cy.allure().logStep('policy wizard other car policy'); cy.get(selectors.otherCarPolicyClassSelect).click(); cy.contains('div.ta-select-option__label', carClassAllowed).click(); cy.get('body').click(); cy.get(selectors.bookingLeadTimeInput).wait(100).clear(); cy.get(selectors.bookingLeadTimeInput).type(bookLeadTimeInput); } static fillTrainSpendPolicyPage(): void { cy.allure().logStep('policy wizard train spend policy'); cy.get(selectors.maxPriceInput).wait(100).clear(); cy.get(selectors.maxPriceInput).type(maxTrainPriceInput); cy.get(selectors.bookingLeadTimeInput).wait(100).clear(); cy.get(selectors.bookingLeadTimeInput).type(bookLeadTimeInput); } static clickSkipToTrainPolicyButton(): void { cy.allure().logStep('policy wizard skip to train policy button'); cy.get(selectors.skipToTrainPolicyButton).click(); } static summaryTableDataValidation(): void { cy.allure().logStep('policy wizard summary table data validation'); this.checkSummaryTableFlightData(); this.checkSummaryTableHotelData(); this.checkSummaryTableCarData(); this.checkSummaryTableTrainData(); } static PolicyWizardCheckPageDataValidation(): void { cy.allure().logStep('policy wizard travel policy page data validation'); this.checkFlightPolicyTable(); this.checkHotelPolicyTable(); this.checkCarPolicyTable(); this.checkTrainPolicyTable(); } static checkSummaryTableFlightData(): void { const scenarios = [ { selector: selectors.summaryTableFlightMedianPrice, expectedValue: percentInput }, { selector: selectors.summaryTableFlightMaxPrice, expectedValue: maxFlightPriceInput }, { selector: selectors.summaryTableFlightMaxCabin, expectedValue: 'Premium Economy' }, { selector: selectors.summaryTableFlightBookLeadTime, expectedValue: bookLeadTimeInput } ]; cy.allure().logStep('policy wizard check summary table flight data'); scenarios.forEach((scenario) => { cy.get(scenario.selector).should('contain', scenario.expectedValue); }); } static checkSummaryTableHotelData(): void { const scenarios = [ { step: 'policy wizard check summary table hotel median price', selector: selectors.summaryTableHotelMedianPrice, expectedValue: percentInput }, { step: 'policy wizard check summary table hotel max price', selector: selectors.summaryTableHotelMaxPrice, expectedValue: maxHotelPriceInput }, { step: 'policy wizard check summary table hotel book lead time', selector: selectors.summaryTableHotelBookLeadTime, expectedValue: bookLeadTimeInput }, { step: 'policy wizard check summary table hotel room type', selector: selectors.summaryTableHotelRoomType, expectedValue: 'All rooms allowed' } ]; cy.allure().logStep('policy wizard check summary table hotel data'); scenarios.forEach((scenario) => { cy.allure().logStep(scenario.step); cy.get(scenario.selector).should('contain', scenario.expectedValue); }); } static checkSummaryTableCarData(): void { const scenarios = [ { step: 'policy wizard check summary table car median price', selector: selectors.summaryTableCarMedianPrice, expectedValue: percentInput }, { step: 'policy wizard check summary table car book lead time', selector: selectors.summaryTableCarBookLeadTime, expectedValue: bookLeadTimeInput }, { step: 'policy wizard check summary table car max class', selector: selectors.summaryTableCarClass, expectedValue: 'Luxury' } ]; cy.allure().logStep('policy wizard check summary table car data'); scenarios.forEach((scenario) => { cy.allure().logStep(scenario.step); cy.get(scenario.selector).should('contain', scenario.expectedValue); }); } static checkSummaryTableTrainData(): void { const scenarios = [ { step: 'policy wizard check summary table train max price', selector: selectors.summaryTableTrainMaxPrice, expectedValue: maxTrainPriceInput }, { step: 'policy wizard check summary table train book lead time', selector: selectors.summaryTableTrainBookLeadTime, expectedValue: bookLeadTimeInput }, { step: 'policy wizard check summary table train class', selector: selectors.summaryTableTrainClass, expectedValue: 'Standard' } ]; cy.allure().logStep('policy wizard check summary table train data'); scenarios.forEach((scenario) => { cy.allure().logStep(scenario.step); cy.get(scenario.selector).should('contain', scenario.expectedValue); }); } static checkFlightPolicyTable(): void { const scenarios = [ { selector: selectors.flightValidationPageCost, expectedValue: percentInput }, { selector: selectors.flightValidationPageCost, expectedValue: maxFlightPriceInput }, { selector: selectors.flightCabinClassLong, expectedValue: 'Premium Economy' }, { selector: selectors.flightBookingLeadTimeLong, expectedValue: bookLeadTimeInput } ]; cy.allure().logStep('Check policy page data validation - flights'); cy.allure().logStep('Click on dismiss button in modal'); //cy.get(selectors.dismissButtonModalValidationPage).click(); scenarios.forEach((scenario) => { cy.get(scenario.selector).should('contain', scenario.expectedValue); }); } static checkHotelPolicyTable(): void { cy.allure().logStep('Click on the hotel validation page icon'); cy.get(selectors.validationPageHotelIcon).click(); const scenarios = [ { step: 'policy wizard check page validation hotel median price', selector: selectors.validationPageCost, expectedValue: percentInput }, { step: 'policy wizard check page validation hotel max price', selector: selectors.validationPageCost, expectedValue: maxHotelPriceInput }, { step: 'policy wizard check page validation hotel book lead time', selector: selectors.ValidationPageBookLeadTime, expectedValue: bookLeadTimeInput }, { step: 'policy wizard check page validation hotel room type', selector: selectors.hotelValidationPageRoomsCancellation, expectedValue: 'All rooms allowed' } ]; cy.allure().logStep('Check policy page data validation - Hotel'); scenarios.forEach((scenario) => { cy.allure().logStep(scenario.step); cy.get(scenario.selector).should('contain', scenario.expectedValue); }); } static checkCarPolicyTable(): void { cy.allure().logStep('Click on the car validation page icon'); cy.get(selectors.validationPageCarIcon).click(); const scenarios = [ { step: 'policy wizard check page validation car median price', selector: selectors.validationPageCost, expectedValue: percentInput }, { step: 'policy wizard check page validation car book lead time', selector: selectors.ValidationPageBookLeadTime, expectedValue: bookLeadTimeInput }, { step: 'policy wizard check page validation car max class', selector: selectors.ValidationPageClassAllowed, expectedValue: 'Luxury' } ]; cy.allure().logStep('Check policy page data validation - Cars'); scenarios.forEach((scenario) => { cy.allure().logStep(scenario.step); cy.get(scenario.selector).should('contain', scenario.expectedValue); }); } static checkTrainPolicyTable(): void { cy.allure().logStep('Click on the train validation page icon'); cy.get(selectors.validationPageTrainIcon).click(); const scenarios = [ { step: 'policy wizard check summary table train max price', selector: selectors.validationPageCost, expectedValue: maxTrainPriceInput }, { step: 'policy wizard check page validation train book lead time', selector: selectors.ValidationPageBookLeadTime, expectedValue: bookLeadTimeInput }, { step: 'policy wizard check page validation train class', selector: selectors.ValidationPageClassAllowed, expectedValue: 'Standard' } ]; cy.allure().logStep('Check policy page data validation - Trains'); scenarios.forEach((scenario) => { cy.allure().logStep(scenario.step); cy.get(scenario.selector).should('contain', scenario.expectedValue); }); } }