Java tutorial
/* * Copyright 2014 Hotwire. All Rights Reserved. * * This software is the proprietary information of Hotwire. * Use is subject to license terms. */ package com.hotwire.test.steps.tools.c3.search; import com.hotwire.selenium.tools.c3.C3IndexPage; import com.hotwire.selenium.tools.c3.C3SearchResultPage; import com.hotwire.selenium.tools.c3.breadCrumbs.C3BreadcrumbsFragment; import com.hotwire.selenium.tools.c3.casenotes.C3SearchForCasePage; import com.hotwire.selenium.tools.c3.customer.C3CaseHistoryPage; import com.hotwire.selenium.tools.c3.customer.C3CustomerInfoFragment; import com.hotwire.selenium.tools.c3.customer.C3CustomerMainPage; import com.hotwire.selenium.tools.c3.customer.C3HotelPageUponDetails; import com.hotwire.selenium.tools.c3.customer.C3MultipleAccountsSearchResultsPage; import com.hotwire.selenium.tools.c3.customer.C3PastBookingPage; import com.hotwire.selenium.tools.c3.customer.C3PaymentDetailsFragment; import com.hotwire.selenium.tools.c3.customer.C3PaymentDetailsPage; import com.hotwire.selenium.tools.c3.customer.C3RecentSearchPage; import com.hotwire.selenium.tools.c3.customer.C3SearchCustomerPage; import com.hotwire.selenium.tools.c3.customer.C3SearchPartnerPage; import com.hotwire.selenium.tools.c3.customer.itineraryDetails.C3AirItineraryPage; import com.hotwire.selenium.tools.c3.customer.itineraryDetails.C3CarItineraryPage; import com.hotwire.selenium.tools.c3.customer.itineraryDetails.C3HotelItineraryPage; import com.hotwire.selenium.tools.c3.purchase.air.C3AirConfirmationPage; import com.hotwire.selenium.tools.c3.purchase.car.C3CarConfirmationPage; import com.hotwire.selenium.tools.c3.purchase.car.C3OldBillingPage; import com.hotwire.selenium.tools.c3.purchase.hotel.C3HotelConfirmationPage; import com.hotwire.selenium.tools.c3.hotel.C3BlockedHotelsPage; import com.hotwire.selenium.tools.c3.hotel.C3HotelBlockConfirmationPage; import com.hotwire.selenium.tools.c3.hotel.C3HotelStarRatingPage; import com.hotwire.test.steps.tools.State; import com.hotwire.test.steps.tools.ToolsAbstractModel; import com.hotwire.test.steps.tools.bean.BillingInfo; import com.hotwire.test.steps.tools.bean.CustomerInfo; import com.hotwire.test.steps.tools.bean.HotwireProduct; import com.hotwire.test.steps.tools.bean.TripInfo; import com.hotwire.test.steps.tools.bean.c3.C3CaseNoteInfo; import com.hotwire.test.steps.tools.bean.c3.C3FlightInfo; import com.hotwire.test.steps.tools.bean.c3.C3HotelSupplyInfo; import com.hotwire.test.steps.tools.bean.c3.C3ItineraryInfo; import com.hotwire.test.steps.tools.bean.c3.C3MobileInfo; import com.hotwire.test.steps.tools.c3.purchase.C3AirPurchaseModel; import com.hotwire.test.steps.tools.c3.purchase.C3CarPurchaseModel; import com.hotwire.test.steps.tools.c3.purchase.C3HotelPurchaseModel; import com.hotwire.test.steps.tools.c3.purchase.C3PurchaseModel; import com.hotwire.test.steps.tools.mail.MailModel; import com.hotwire.testing.UnimplementedTestException; import com.hotwire.util.db.c3.C3CaseNotesDao; import com.hotwire.util.db.c3.C3CustomerDao; import com.hotwire.util.db.c3.C3HotelSupplyDao; import com.hotwire.util.db.c3.C3RefundRecoveryCustomerDao; import com.hotwire.util.db.c3.C3SearchDao; import cucumber.api.PendingException; import org.fest.assertions.Delta; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.NoSuchFrameException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.Resource; import java.sql.Timestamp; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Map; import static org.fest.assertions.Assertions.assertThat; /** * Created with IntelliJ IDEA. * User: v-abudyak */ public class C3SearchModel extends ToolsAbstractModel { private static final Logger LOGGER = LoggerFactory.getLogger(C3SearchModel.class); private static final String UNAVAILABLE = "N/A"; // private String windowHandler = null; @Resource(name = "customerProfiles") Map<String, CustomerInfo> customerProfiles; @Autowired private CustomerInfo customerInfo; @Autowired private CustomerInfo nonExpressCustomer; @Autowired private BillingInfo billingInfo; @Autowired private C3ItineraryInfo c3ItineraryInfo; @Autowired private C3FlightInfo c3FlightInfo; @Autowired private C3CaseNoteInfo c3CaseNotesInfo; @Autowired private C3MobileInfo c3MobileInfo; @Autowired private TripInfo tripInfo; @Autowired private HotwireProduct hotwireProduct; @Autowired private C3HotelSupplyInfo c3HotelSupplyInfo; @Autowired private C3HotelPurchaseModel hotelPurchaseModel; @Autowired private C3CarPurchaseModel carPurchaseModel; @Autowired private C3AirPurchaseModel airPurchaseModel; @Autowired private MailModel mailModel; private C3PurchaseModel getPurchaseModel() { switch (hotwireProduct.getProductVertical()) { case HOTEL: return hotelPurchaseModel; case CAR: return carPurchaseModel; case AIR: return airPurchaseModel; default: return null; } } public void searchForCustomerByEmail(String email) { C3SearchCustomerPage searchCustomerPage = new C3SearchCustomerPage(getWebdriverInstance()); customerInfo.setEmail(email); searchCustomerPage.setEmailInput(email); searchCustomerPage.clickSubmit(); } public void searchForCustomerByPhone(String phone) { C3SearchCustomerPage searchCustomerPage = new C3SearchCustomerPage(getWebdriverInstance()); customerInfo.setPhoneNumber(phone); searchCustomerPage.searchByPhone(phone); } public void searchForCustomerByItinerary(String itinerary) { new C3SearchCustomerPage(getWebdriverInstance()).setConfirmationNumber(itinerary); } public void searchForCustomerByPnr(String pnrNumber) { C3SearchCustomerPage searchCustomerPage = new C3SearchCustomerPage(getWebdriverInstance()); searchCustomerPage.searchByPNR(pnrNumber); } public void searchForCustomerByCustomerId(String customerId) { this.switchToDefaultContent(); this.switchToFrame("c3Frame"); C3SearchCustomerPage searchCustomerPage = new C3SearchCustomerPage(getWebdriverInstance()); searchCustomerPage.setCustomerId(customerId); searchCustomerPage.clickSubmit(); } public void searchForCustomerByCaseId(String caseId) { this.switchToDefaultContent(); this.switchToFrame("c3Frame"); C3SearchCustomerPage searchCustomerPage = new C3SearchCustomerPage(getWebdriverInstance()); searchCustomerPage.setCaseId(caseId); searchCustomerPage.clickSubmit(); } public void searchForCustomerByHotelReservationNumber(String hotelReservationNumber) { this.switchToDefaultContent(); this.switchToFrame("c3Frame"); C3SearchCustomerPage searchCustomerPage = new C3SearchCustomerPage(getWebdriverInstance()); searchCustomerPage.setHotelReservationNumber(hotelReservationNumber); searchCustomerPage.clickSubmit(); } public void searchForCustomerByCarReservationNumber(String carReservationNumber) { this.switchToDefaultContent(); this.switchToFrame("c3Frame"); C3SearchCustomerPage searchCustomerPage = new C3SearchCustomerPage(getWebdriverInstance()); searchCustomerPage.setCarReservationNumber(carReservationNumber); searchCustomerPage.clickSubmit(); } public void searchForCustomerByAirTicketNumber(String airTicketNumber) { this.switchToDefaultContent(); this.switchToFrame("c3Frame"); C3SearchCustomerPage searchCustomerPage = new C3SearchCustomerPage(getWebdriverInstance()); searchCustomerPage.setAirTicketNumber(airTicketNumber); searchCustomerPage.clickSubmit(); } public void searchForCustomerByLastName(String value) { this.switchToDefaultContent(); this.switchToFrame("c3Frame"); C3SearchCustomerPage searchCustomerPage = new C3SearchCustomerPage(getWebdriverInstance()); searchCustomerPage.setLastName(value); searchCustomerPage.clickSubmit(); } public void checkSearchResults(String value) { C3SearchResultPage c3SearchResultPage = new C3SearchResultPage(getWebdriverInstance()); assertThat(c3SearchResultPage.isResultsPresent()).isTrue(); assertThat(c3SearchResultPage.getResultsHeaderText()).contains(value); assertThat(c3SearchResultPage.countOfSearchResults()).isGreaterThan(1); } public void verifyErrorMessage(String message) { assertThat(new C3SearchCustomerPage(getWebdriverInstance()).getErrorMessage()) .as("Error message doesn't match").contains(message); } public void verifySearchCountResultsByPhone(int value) { assertThat(new C3SearchResultPage(getWebdriverInstance()).countOfSearchResults()) .as("Count search results more than 20").isLessThan(value); } public void selectSomeCustomer(int value) { new C3SearchResultPage(getWebdriverInstance()).selectSomeCustomer(value); } public void verifyItineraryDetailsPage() { logItinerary(); assertThat(hotwireProduct.getItineraryPage(getWebdriverInstance()).getItineraryNumber()) .contains(c3ItineraryInfo.getItineraryNumber()); } public void verifyNecessaryFieldsOnCarItineraryDetailsPage() { C3CarItineraryPage c3CarItineraryPage = new C3CarItineraryPage(getWebdriverInstance()); assertThat(c3ItineraryInfo.getDriverName()).as("Driver name is wrong") .isEqualToIgnoringCase(c3CarItineraryPage.getDriverName()); assertThat(c3ItineraryInfo.getCompany()).as("Company is wrong") .isEqualToIgnoringCase(c3CarItineraryPage.getVendorName()); assertThat(c3ItineraryInfo.getItineraryNumber()).as("Itinerary number is wrong") .isEqualToIgnoringCase(c3CarItineraryPage.getItineraryNumber()); assertThat(c3ItineraryInfo.getCarReservationNumber()).as("Car reservation number is wrong") .isEqualToIgnoringCase(c3CarItineraryPage.getCarReservationNumber()); assertThat(tripInfo.getShiftEndDate() - tripInfo.getShiftStartDate() + "").as("Number of days is wrong") .isEqualToIgnoringCase(c3CarItineraryPage.getNumberOfDays()); assertThat(tripInfo.getDestinationLocation()).as("Pick Up location ins wrong") .isEqualToIgnoringCase(c3CarItineraryPage.getPickUpLocation()); String pickUpDate = c3CarItineraryPage.getPickUpDate(); String dropOffDate = c3CarItineraryPage.getDropOffDate(); try { Date date = new SimpleDateFormat("dd-MMM-yy 'at' HH:mm a").parse(pickUpDate); pickUpDate = new SimpleDateFormat("EEE, MMM d, yyyy 'at' HH:mma").format(date); date = new SimpleDateFormat("dd-MMM-yy 'at' HH:mm a").parse(dropOffDate); dropOffDate = new SimpleDateFormat("EEE, MMM d, yyyy 'at' HH:mma").format(date); } catch (ParseException e) { e.printStackTrace(); } assertThat(pickUpDate).as("Pick up date is wrong").isEqualToIgnoringCase(c3ItineraryInfo.getPickUpDate()); assertThat(dropOffDate).as("Drop Off date is wrong") .isEqualToIgnoringCase(c3ItineraryInfo.getDropOffDate()); assertThat(Double.valueOf(c3ItineraryInfo.getTotalCost())) .as("Comparing amounts with rounding issue handling.").isEqualTo( Double.valueOf(c3CarItineraryPage.getTotalCost().replace("$", "")) + Double.valueOf(c3CarItineraryPage.getTripProtection().replace("$", "")), Delta.delta(0.1)); } public void verifyMobileDeviceType() { assertThat(hotwireProduct.getItineraryPage(getWebdriverInstance()).getDeviceType().toUpperCase()) .isEqualTo(c3MobileInfo.getDeviceType().toString()); } public void verifyApplicationType() { try { assertThat(hotwireProduct.getItineraryPage(getWebdriverInstance()).getApplicationType()) .isEqualTo(c3MobileInfo.getApplicationType()); } catch (AssertionError e) { assertThat(hotwireProduct.getItineraryPage(getWebdriverInstance()).getApplicationType()) .isEqualTo("DSS Widget"); } } public void clickViewConfirmation() { hotwireProduct.getItineraryPage(getWebdriverInstance()).clickViewConfirmation(); } public void verifyItineraryPageUponConfirmation() { switch (hotwireProduct.getProductVertical()) { case HOTEL: new C3HotelConfirmationPage(getWebdriverInstance()); break; case CAR: new C3CarConfirmationPage(getWebdriverInstance()); break; case AIR: new C3AirConfirmationPage(getWebdriverInstance()); break; default: unimplementedTest(); } } public void verifyItineraryPageUponDetails() { switch (hotwireProduct.getProductVertical()) { case HOTEL: new C3HotelPageUponDetails(getWebdriverInstance()); break; default: throw new UnimplementedTestException("Invalid ProductVertical or not implemented."); } } public void verifyGoogleMap() { C3HotelPageUponDetails hotelDetails = new C3HotelPageUponDetails(getWebdriverInstance()); assertThat(hotelDetails.isGoogleMapDisplayed()).isTrue(); } public void searchByReferenceNumber() { C3SearchCustomerPage searchCustomerPage = new C3SearchCustomerPage(getWebdriverInstance()); searchCustomerPage.searchByReferenceNumber(getRefNumber()); } public void startSearchByReferenceNumberOnCustomerInfo() { C3CustomerMainPage searchCustomerPage = new C3CustomerMainPage(getWebdriverInstance()); searchCustomerPage.startSearchByReferenceNumber(c3ItineraryInfo.getReferenceNumberResults()); } public void checkTheSameReferenceNumber() { C3SearchCustomerPage searchCustomerPage = new C3SearchCustomerPage(getWebdriverInstance()); searchCustomerPage.searchByReferenceNumber(c3ItineraryInfo.getReferenceNumberResults()); } public void searchByReferenceNumber(String referenceNumber) { C3SearchCustomerPage searchCustomerPage = new C3SearchCustomerPage(getWebdriverInstance()); searchCustomerPage.searchByReferenceNumber(referenceNumber); } public void searchWithFirstLastName(String firstName, String lastName) { C3SearchCustomerPage searchCustomerPage = new C3SearchCustomerPage(getWebdriverInstance()); searchCustomerPage.setFirstName(firstName); searchCustomerPage.setLastName(lastName); } public void clickCustomerSearchLink() { new C3IndexPage(getWebdriverInstance()).clickOnCustomerLink(); } public void verifyAccountPageByName(String name) { assertThat(new C3CustomerInfoFragment(getWebdriverInstance()).getName()).as("Account name doesn't match") .isEqualTo(name); } public void verifyMultipleAccountsSearchResultsPage() { new C3MultipleAccountsSearchResultsPage(getWebdriverInstance()); } public void choosePastPurchasesForFirstAccountOnMultiplePage(String vertical) { new C3MultipleAccountsSearchResultsPage(getWebdriverInstance()) .selectPastPurchasesForFirstResults(vertical); } public void verifyAccountPageByCustomerId() { assertThat(new C3CustomerInfoFragment(getWebdriverInstance()).getEmail()) .as("Accout email doesn't match customer ID").isEqualTo(new C3CustomerDao(getDataBaseConnection()) .getEmailByCustomerId(customerInfo.getCustomerId())); } public void verifyAccountPageByCaseId() { assertThat(new C3CustomerInfoFragment(getWebdriverInstance()).getEmail()) .as("Account email doesn't match case ID").isEqualTo( new C3CaseNotesDao(getDataBaseConnection()).getEmailByCaseId(c3CaseNotesInfo.getCaseId())); } public void verifyPurchaseByGDS() { assertThat(new C3CustomerInfoFragment(getWebdriverInstance()).getEmail()) .as("Account email doesn't match purchase GDS number") .isEqualTo(new C3CustomerDao(getDataBaseConnection()) .getEmailByHotelReservationNumber(c3ItineraryInfo.getHotelReservationNumber())); assertThat(new C3HotelItineraryPage(getWebdriverInstance()).getPNR() .startsWith(c3ItineraryInfo.getHotelReservationNumber())) .as("Purchase GDS number is not the same as in DB").isTrue(); } public void verifyPurchaseByAirTicketNumber() { assertThat(new C3CustomerInfoFragment(getWebdriverInstance()).getEmail()) .as("Account email doesn't match Air ticket number") .isEqualTo(new C3CustomerDao(getDataBaseConnection()) .getEmailByAirTicketNumber(c3ItineraryInfo.getAirTicketNumber())); assertThat(new C3AirItineraryPage(getWebdriverInstance()).getAirTicketNumbers() .contains(c3ItineraryInfo.getAirTicketNumber())) .as("Air ticket number is not the same as in DB " + c3ItineraryInfo.getAirTicketNumber()) .isTrue(); } public void returnToIndexC3Page() { new C3SearchCustomerPage(getWebdriverInstance()).returnToIndexC3Page(); } public void navigateToRejectedPurchaseDetails() { new C3PastBookingPage(getWebdriverInstance()).clickOnLastBooking(); } /** * This method skip Abandoned case notes alert, that sometimes appear. * This is pop-up alert, not WebPage. */ public void discardAbandonedCaseNotesAlert() { try { getWebdriverInstance().switchTo().frame("notesFrame"); getWebdriverInstance().findElement(By.id("discardCaseConfirmPopupLayer_confirmButton")).click(); LOGGER.info("Processing discardAbandonedCaseNotesAlert"); } catch (NoSuchFrameException | NoSuchElementException e) { LOGGER.info("NO Alert. Skip"); } } public void saveHotelAddress() { c3HotelSupplyInfo .setHotelAddress(hotwireProduct.getItineraryPage(getWebdriverInstance()).getHotelAddress()); } public void verifyPNRonItineraryDetails() { assertThat(hotwireProduct.getItineraryPage(getWebdriverInstance()).getPNR()) .contains(c3ItineraryInfo.getPnrNumber()); } public void clickOnCaseNotesSearch() { new C3IndexPage(getWebdriverInstance()).searchForCaseNotes(); } public void searchCaseNotesById() { new C3SearchForCasePage(getWebdriverInstance()).searchCaseByID(c3ItineraryInfo.getCaseNotesID()); } public void searchCaseNotesByEmail() { new C3SearchForCasePage(getWebdriverInstance()).searchCaseByEmail(customerInfo.getEmail()); } public void searchCaseNotesByCSRName(Integer days) { new C3SearchForCasePage(getWebdriverInstance()).searchCaseByCSR(days); } public void searchCaseNotesByItinerary() { new C3SearchForCasePage(getWebdriverInstance()).searchCaseByItinerary(c3ItineraryInfo.getItineraryNumber()); } public void clickSiteSearchLink() { new C3CustomerMainPage(getWebdriverInstance()).clickSiteSearchLink(); } public void verifyCustomerEmail() { assertThat(customerInfo.getEmail()) .isEqualTo(new C3CustomerInfoFragment(getWebdriverInstance()).getEmail()); LOGGER.info("Customer Email: OK"); } public void verifyCustomerType() { String type = customerInfo.getCustomerType().toString(); CustomerInfo profile = customerProfiles.get(type); assertThat(profile.getAccountType()) .isEqualTo(new C3CustomerInfoFragment(getWebdriverInstance()).getAccountType()); LOGGER.info("Customer Type: OK"); assertThat(profile.getWatermark()) .isEqualTo(new C3CustomerInfoFragment(getWebdriverInstance()).getWatermark()); LOGGER.info("Customer Watermark: OK"); verifyBreadCrumbs(profile.getBreadcrumbs()); switch (customerInfo.getCustomerType()) { case PARTNER: LOGGER.info("Partner purchase"); break; case EX_EXPRESS: LOGGER.info("Former express customer purchase"); final String expressProgramStatus = new C3CustomerInfoFragment(getWebdriverInstance()) .getExpressProgramStatus(); assertThat(expressProgramStatus).contains("Former"); String timestamp = expressProgramStatus.replaceFirst("^.*\\(", "").replaceFirst("\\)$", ""); DateTime parsedTimestamp = DateTimeFormat.forPattern("dd-MMM-yy h:mm a") .parseDateTime(timestamp.replace(" at", "")); //Assert that timestamp that is displayed in C3 not differs timestamp // from DB or differs in 5 seconds range assertThat(Math.abs(parsedTimestamp.getMillis() - customerInfo.getExpressDownGradeDate().getMillis()) / 10000).isLessThanOrEqualTo(5); break; default: assertThat(profile.getExpressProgram()) .isEqualTo(new C3CustomerInfoFragment(getWebdriverInstance()).getExpressProgramStatus()); } LOGGER.info("Express Program: OK"); } private void verifyBreadCrumbs(String customerIdentifier) { customerInfo.setCustomerInfoByItinerary(c3ItineraryInfo.getItineraryNumber()); String breadcrumbs = new C3BreadcrumbsFragment(getWebdriverInstance()).getBreadcrumbs(); String expected; if (customerInfo.getCustomerType().equals(CustomerInfo.CustomerTypes.PARTNER)) { expected = String.format("View itinerary %s details", c3ItineraryInfo.getItineraryNumber()); } else { expected = String.format("%s \\(?%s\\)?( )?> View Past Bookings > View itinerary (GP)?%s details", customerInfo.getFullName(), customerIdentifier, c3ItineraryInfo.getItineraryNumber()); } assertThat(breadcrumbs).matches(expected); LOGGER.info("Customer Breadcrumbs: OK"); } public void verifyCustomerName() { assertThat(customerInfo.getFirstName() + " " + customerInfo.getLastName()) .isEqualTo(new C3CustomerInfoFragment(getWebdriverInstance()).getName()); LOGGER.info("Customer Name: OK"); } public void verifyPrimaryPhone() { assertThat(customerInfo.getPhoneNumber()).as("Phones does not match") .contains(getPhoneLast7Digits(new C3CustomerInfoFragment(getWebdriverInstance()).getPhoneNumber())); LOGGER.info("Customer Primary phone: OK"); } public void verifyAltPhone() { assertThat(customerInfo.getAltPhone()).as("Alt phone doesn't match").contains( getPhoneLast7Digits(new C3CustomerInfoFragment(getWebdriverInstance()).getAltPhoneNumber())); LOGGER.info("Customer Alternative phone: OK"); } private String getPhoneLast7Digits(String rowPhone) { String digits = rowPhone.replaceAll("[+()\\- ]", ""); return digits.length() > 7 ? digits.substring(digits.length() - 7) : digits; } public void verifyAddress() { assertThat(customerInfo.getZipCode()) .isEqualTo(new C3CustomerInfoFragment(getWebdriverInstance()).getZip()); LOGGER.info("Customer Zip: OK"); assertThat(customerInfo.getCountry()) .isEqualTo(new C3CustomerInfoFragment(getWebdriverInstance()).getCountry()); LOGGER.info("Customer Country: OK"); } public void verifyCustomerInfo() { verifyCustomerName(); verifyCustomerEmail(); verifyPrimaryPhone(); verifyAltPhone(); verifyAddress(); } public void clickPartnerSearchLink() { new C3IndexPage(getWebdriverInstance()).clickSearchForPartnerLink(); } public void searchForPartnerByItinerary(String itineraryNumber) { new C3SearchPartnerPage(getWebdriverInstance()).searchForItinerary(itineraryNumber); } public void clickOnViewResources() { new C3IndexPage(getWebdriverInstance()).clickOnViewResources(); } public void setupHotelPurchaseWithStarRating() { final Map rating = new C3HotelSupplyDao(getDataBaseConnection()).getHotelPurchaseWithStarRating(); c3ItineraryInfo.setItineraryNumber(getRatingFromDB(rating, "DISPLAY_NUMBER")); c3HotelSupplyInfo.setHotelID(getRatingFromDB(rating, "HOTEL_ID")); c3HotelSupplyInfo.setFullHotelName(getRatingFromDB(rating, "HOTEL_NAME")); c3HotelSupplyInfo.setHotwireRating(getRatingFromDB(rating, "RATING_CODE")); c3HotelSupplyInfo.setExpediaRating(getRatingFromDB(rating, "EXPEDIA_STAR_RATING")); //check if rating was changed setLastRatingChangeFromHotel(rating); //check if hotel has survey c3HotelSupplyInfo.setHotelSurvey( new C3HotelSupplyDao(getDataBaseConnection()).isHotelHasSurvey(c3HotelSupplyInfo.getHotelID())); } private String getRatingFromDB(Map rating, String columnName) { if (rating.get(columnName) != null) { return rating.get(columnName).toString(); } else { return UNAVAILABLE; } } private void setLastRatingChangeFromHotel(Map rating) { if (new C3HotelSupplyDao(getDataBaseConnection()).isHotelRatingChanged(c3HotelSupplyInfo.getHotelID())) { String changeDate = rating.get("RATING_CODE_CHANGE_DATE").toString(); c3HotelSupplyInfo.setLastRatingChange(new DateTime(changeDate.replaceFirst("\\s+.*$", ""))); c3HotelSupplyInfo.setRatingChanged(true); } else { c3HotelSupplyInfo.setRatingChanged(false); } } public void verifyHotelStarRatingLink(boolean negation) { final boolean starRatingLinkDisplayed = hotwireProduct.getItineraryPage(getWebdriverInstance()) .isStarRatingLinkDisplayed(); if (negation) { assertThat(starRatingLinkDisplayed).isTrue(); } else { assertThat(starRatingLinkDisplayed).isFalse(); } } public void openHotelStarRating() { hotwireProduct.getItineraryPage(getWebdriverInstance()).clickOnHotelStarRatingLink(); } public void verifyStarRatingWindow() { C3HotelStarRatingPage ratingPage = new C3HotelStarRatingPage(getWebdriverInstance()); assertThat(ratingPage.getBenchmarkHotelID()).isEqualTo(c3HotelSupplyInfo.getHotelID()); assertThat(ratingPage.getHotelName().trim()) .isEqualTo(c3HotelSupplyInfo.getFullHotelName().replaceAll("\\(.*\\)", "").trim()); // verification of star rating details section verifyRating(ratingPage.getExpediaStarRating(), c3HotelSupplyInfo.getExpediaRating()); verifyRating(ratingPage.getHotwireStarRating(), c3HotelSupplyInfo.getHotwireRating()); } private void verifyRating(String actual, String expected) { try { assertThat(actual).isEqualTo(expected); } catch (AssertionError e) { assertThat(Double.valueOf(actual)).isEqualTo(Double.valueOf(expected)); } } public void verifyStarRatingChange() { final C3HotelStarRatingPage c3HotelStarRatingPage = new C3HotelStarRatingPage(getWebdriverInstance()); if (c3HotelSupplyInfo.isRatingChanged()) { assertThat(DateTimeFormat.forPattern("d MMM YYYY") .parseDateTime(c3HotelStarRatingPage.getLastRatingChange())) .isEqualTo(c3HotelSupplyInfo.getLastRatingChange()); assertThat(c3HotelStarRatingPage.getRatingChange()).isNotEqualTo(UNAVAILABLE); c3HotelStarRatingPage.verifyRatingChangeFragment(); } else { assertThat(c3HotelStarRatingPage.getLastRatingChange()).isEqualTo(UNAVAILABLE); assertThat(c3HotelStarRatingPage.getRatingChange()).contains(UNAVAILABLE); } } public void verifyHotelSurvey() { if (c3HotelSupplyInfo.isHotelSurvey()) { new C3HotelStarRatingPage(getWebdriverInstance()).verifySurveyFragment(); } } public void gotoDisplayBillingPageForItinerary() { hotwireProduct.getItineraryPage(getWebdriverInstance()).clickOnDisplayBillingPageForItinerary(); } public void checkDisplayBillingPageForItinerary() { C3OldBillingPage billing = new C3OldBillingPage(getWebdriverInstance()); assertThat(billing.getBookTripButton().isDisplayed()).as("Book trip button is not displayed").isTrue(); assertThat(billing.getAgreementCheckBox().isSelected()).as("Agreement checkbox is not selected").isTrue(); } public void selectRecentSearchPage() { new C3CustomerMainPage(getWebdriverInstance()).chooseRecentSearches(); } public void selectPastBookingTab(String tab) { hotwireProduct.setProductVertical(tab); new C3PastBookingPage(getWebdriverInstance()).choosePastBookingTab(tab); } public void selectCaseHistoryPage() { new C3BreadcrumbsFragment(getWebdriverInstance()).gotoMainCustomerPage(); new C3CustomerMainPage(getWebdriverInstance()).clickEditCustomerCaseHistory(); } public void verifyCaseNoteForItinerary() { assertThat(new C3CaseHistoryPage(getWebdriverInstance()) .isCaseForItineraryExist(c3ItineraryInfo.getItineraryNumber())) .as("Itinerary " + c3ItineraryInfo.getItineraryNumber() + " is not visible on page") .isTrue(); } public void resendEmailsForCheckesClick() { new C3PastBookingPage(getWebdriverInstance()).resendEmailsForCheckesClick(); } public void verifyViewAllView15Links() { C3RecentSearchPage recentSearchPage = new C3RecentSearchPage(getWebdriverInstance()); assertThat(recentSearchPage.verifyViewAllLink()).as("'View All' link is not displayed").isTrue(); recentSearchPage.clickViewAllLink(); assertThat(recentSearchPage.verifyView15Link()).as("'View 15' link is not displayed").isTrue(); } public void clickOnDetailsUponConfirmation() { hotwireProduct.getItineraryPage(getWebdriverInstance()).clickOnDetailsUponConfirmation(); } public void returnToCustomerAccount() { getWebdriverInstance().switchTo().defaultContent(); getWebdriverInstance().switchTo().frame("c3Frame"); getWebdriverInstance().findElements(By.cssSelector("td.breadcrumbbar>a")).get(0).click(); } private String getRefNumber() { String refNumber; if (c3ItineraryInfo.getReferenceNumberResults() != null && !c3ItineraryInfo.getReferenceNumberResults().isEmpty()) { refNumber = c3ItineraryInfo.getReferenceNumberResults(); } else { if (c3ItineraryInfo.getReferenceNumberDetails() != null && !c3ItineraryInfo.getReferenceNumberDetails().isEmpty()) { refNumber = c3ItineraryInfo.getReferenceNumberDetails(); } else { refNumber = ""; } } return refNumber; } public void checkRecentSearchBySearchID() { C3RecentSearchPage recentSearchPage = new C3RecentSearchPage(getWebdriverInstance()); String expected = getRefNumber(); String actual = recentSearchPage.getLastSearchID(); assertThat(expected.contains(actual)).as("SearchID was -" + expected + ", but actual -" + actual).isTrue(); } public void checkPastBookingByItinerary() { C3PastBookingPage pastBookingPage = new C3PastBookingPage(getWebdriverInstance()); String expected = c3ItineraryInfo.getItineraryNumber(); String actual = pastBookingPage.getLastItinerary(); assertThat(expected.equals(actual)).as("Itinerary was -" + expected + ", but actual -" + actual).isTrue(); } public void selectPastBookingLink() { new C3CustomerMainPage(getWebdriverInstance()).choosePastBooking(); } public void selectRecentSearchBySearchID() { new C3RecentSearchPage(getWebdriverInstance()).selectRecentSearchByID(getRefNumber()); this.getPurchaseModel().processSearchFrame(); } public void completeLastSearchFromRecentSearch() { new C3RecentSearchPage(getWebdriverInstance()).selectLastSearchButton(); hotwireProduct.getPurchaseModel().processAlert(); hotwireProduct.getPurchaseModel().processSearchFrame(); // hotwireProduct.getPurchaseModel().verifyCustomerSalesPage(); hotwireProduct.getPurchaseModel().waitForResults(); } public void verifySearchIDOnResultPage(boolean isExists) { String expectedReferenceNumber = c3ItineraryInfo.getReferenceNumberResults(); this.getPurchaseModel().processSearchFrame(); this.getPurchaseModel().saveReferenceNumberFromResultsPage(); Long iRef = Long.parseLong(this.getPurchaseModel().getReferenceNumberFromResultsPage()) - 1; String actualReferenceNumber = iRef.toString(); assertThat(expectedReferenceNumber.equals(actualReferenceNumber)) .as("expected " + expectedReferenceNumber + " actual " + actualReferenceNumber).isEqualTo(isExists); } public void checkRecentSearchByCSR(String param) { String expectedReferenceNumber = getRefNumber(); String csr = new C3RecentSearchPage(getWebdriverInstance()).getRecentSearchByCSR(expectedReferenceNumber); param = (param.equals("not ")) ? "No" : "Yes"; assertThat(csr).as("Searched by CSR").isEqualTo(param); } public void checkPreviousRecentSearchByCSR() { Long iRef = Long.parseLong(getRefNumber()) - 1; // previous ref c3ItineraryInfo.setItineraryNumber(iRef.toString()); this.checkRecentSearchByCSR(""); } public void checkNoPurchaseMessage(String tab) { String year = Calendar.getInstance().getTime().toString().split(" ")[5]; String expected = String.format("This customer did not purchase any %s itineraries in %s", tab, year); assertThat(verifyTextOnPageBoolean(expected)).isTrue(); } public void choosePNRLinkForItinerary() { C3PastBookingPage pastBookingPage = new C3PastBookingPage(getWebdriverInstance()); String itineraryNumber = c3ItineraryInfo.getItineraryNumber(); c3ItineraryInfo.setPnrNumber(pastBookingPage.getPNRByItinerary(itineraryNumber)); pastBookingPage.choosePNRLinkForItinerary(itineraryNumber); } public void checkCustomerSearchErrors() { assertThat( verifyTextOnPageBoolean("Your search did not match any customer records. You may create an account" + " for this customer\n or try your search again. " + "If you reattempt your search, we suggest the following:")).as( "Your search did not match any customer records. You may create an account for this customer\n" + " or try your search again. If you reattempt your search, we suggest the following:") .isTrue(); assertThat(verifyTextOnPageBoolean("Make sure all words are spelled correctly")) .as("Make sure all words are spelled correctly").isTrue(); assertThat(verifyTextOnPageBoolean("Try searching on different information")) .as("Try searching on different information").isTrue(); assertThat(verifyTextOnPageBoolean("Try searching only on last name")).as("Try searching only on last name") .isTrue(); assertThat(verifyTextOnPageBoolean("Create a new customer account using the search criteria")) .as("Create a new customer account using the search criteria").isTrue(); } public void clickFirstCarConfirmationLink() { C3PastBookingPage pastBookingPage = new C3PastBookingPage(getWebdriverInstance()); hotwireProduct.setProductVertical("car"); c3ItineraryInfo.setItineraryNumber(pastBookingPage.getLastItinerary()); pastBookingPage.clickFirstCarConfirmationLink(); } public void verifyCustomerDetailsPage() { new C3CustomerInfoFragment(getWebdriverInstance()); } public void givenPurchaseRefundedByCRR() { switch (hotwireProduct.getProductVertical()) { case HOTEL: c3ItineraryInfo.setItineraryNumber( new C3RefundRecoveryCustomerDao(getDataBaseConnection()).getHotelItineraryRefundedByCSR()); break; case CAR: c3ItineraryInfo.setItineraryNumber( new C3RefundRecoveryCustomerDao(getDataBaseConnection()).getCarItineraryRefundedByCSR()); break; default: unimplementedTest(); } } public void givenPurchaseRefundedByCustomer() { switch (hotwireProduct.getProductVertical()) { case HOTEL: c3ItineraryInfo.setItineraryNumber( new C3RefundRecoveryCustomerDao(getDataBaseConnection()).getHotelItineraryRefundedByCustomer()); break; default: unimplementedTest(); } } public void getBackToRecentSearchTab() { getWebdriverInstance().switchTo().parentFrame(); getWebdriverInstance().findElement(By.xpath("//a[text()='View recent searches']")).click(); } public void getPurchaseDoneByCsr(String isCSR) { String itinerary = ""; if (isCSR.equals("not ")) { itinerary = new C3PastBookingPage(getWebdriverInstance()).getPurchaseDoneByDomestic(); } else { itinerary = new C3PastBookingPage(getWebdriverInstance()).getPurchaseDoneByCsr(); } if (itinerary.equals("none")) { throw new PendingException("Cant find " + isCSR + " csr made purchase"); } c3ItineraryInfo.setItineraryNumber(itinerary); } public void clickViewCaseAttachedLink() { new C3PastBookingPage(getWebdriverInstance()) .clickViewCaseAttachedLink(c3ItineraryInfo.getItineraryNumber()); } public void checkIntlSiteBookingFlag() { assertThat(new C3PastBookingPage(getWebdriverInstance()) .getIntlSiteBookingFlag(c3ItineraryInfo.getItineraryNumber())).isEqualTo("Y\n" + "United Kingdom"); } public void verifyPurchaseByCarReservationNumber() { assertThat(new C3CustomerInfoFragment(getWebdriverInstance()).getEmail()) .as("Account email doesn't match Air ticket number") .isEqualTo(new C3CustomerDao(getDataBaseConnection()) .getEmailByCarReservationNumber(c3ItineraryInfo.getCarReservationNumber())); assertThat(new C3CarItineraryPage(getWebdriverInstance()).getCarReservationNumber() .contains(c3ItineraryInfo.getCarReservationNumber())).as( "Air ticket number is not the same as in DB " + c3ItineraryInfo.getCarReservationNumber()) .isTrue(); } public void checkHotelParametersForRecentSearch() { C3RecentSearchPage recentSearchPage = new C3RecentSearchPage(getWebdriverInstance()); //actual from tripInfo String locationActual = tripInfo.getFromLocation(); String checkInActual = new DateTime(new DateTime()).plusDays(tripInfo.getShiftStartDate()).toLocalDate() .toString("d-MMM-yy"); String checkOutActual = new DateTime(new DateTime()).plusDays(tripInfo.getShiftEndDate()).toLocalDate() .toString("d-MMM-yy"); Integer roomsActual = tripInfo.getNumberOfHotelRooms(); Integer adultsActual = tripInfo.getNumberOfAdults(); Integer childrenActual = tripInfo.getNumberOfChildren(); Integer nightsActual = tripInfo.getShiftEndDate() - tripInfo.getShiftStartDate(); // expected from UI String referenceNumberResults = getRefNumber(); String locationExpected = recentSearchPage.getLocationBySearchID(referenceNumberResults); String checkInExpected = recentSearchPage.getCheckInBySearchID(referenceNumberResults); String checkOutExpected = recentSearchPage.getCheckOutBySearchID(referenceNumberResults); String roomsExpected = recentSearchPage.getRoomsBySearchID(referenceNumberResults); String adultsExpected = recentSearchPage.getAdultsBySearchID(referenceNumberResults); String childrenExpected = recentSearchPage.getChildrenBySearchID(referenceNumberResults); String nightsExpected = recentSearchPage.getNightsBySearchID(referenceNumberResults); //assertion assertThat(locationExpected).as("not equals actual and expected").contains(locationActual); assertThat(checkInActual).as("not equals actual and expected").isEqualTo(checkInExpected); assertThat(checkOutActual).as("not equals actual and expected").isEqualTo(checkOutExpected); assertThat(roomsActual.toString()).as("not equals actual and expected").isEqualTo(roomsExpected); assertThat(adultsActual.toString()).as("not equals actual and expected").isEqualTo(adultsExpected); assertThat(childrenActual.toString()).as("not equals actual and expected").isEqualTo(childrenExpected); assertThat(nightsActual.toString()).as("not equals actual and expected").isEqualTo(nightsExpected); } public void checkCarParametersForRecentSearch() { C3RecentSearchPage recentSearchPage = new C3RecentSearchPage(getWebdriverInstance()); //actual from tripInfo String locationActual = tripInfo.getFromLocation(); String checkInActual = new DateTime(new DateTime()).plusDays(tripInfo.getShiftStartDate()).toLocalDate() .toString("d-MMM-yy"); String checkOutActual = new DateTime(new DateTime()).plusDays(tripInfo.getShiftEndDate()).toLocalDate() .toString("d-MMM-yy"); String pickupTimeActual = tripInfo.getPickupTime().toUpperCase(); String dropoffTimeActual = tripInfo.getDropoffTime().toUpperCase(); String cardTypeActual = "Credit Card"; // expected from UI String referenceNumberResults = getRefNumber(); String locationExpected = recentSearchPage.getLocationBySearchID(referenceNumberResults); String checkInExpected = recentSearchPage.getCheckInBySearchID(referenceNumberResults); String checkOutExpected = recentSearchPage.getCheckOutBySearchID(referenceNumberResults); String pickupTimeExpected = recentSearchPage.getPickUpTimeBySearchID(referenceNumberResults); String dropoffTimeExpected = recentSearchPage.getDropOffTimeBySearchID(referenceNumberResults); //assertion assertThat(locationExpected).as("not equals actual and expected").contains(locationActual); assertThat(checkInActual).as("not equals actual and expected").isEqualTo(checkInExpected); assertThat(checkOutActual).as("not equals actual and expected").isEqualTo(checkOutExpected); assertThat(pickupTimeActual).as("not equals actual and expected").isEqualTo(pickupTimeExpected); assertThat(dropoffTimeActual).as("not equals actual and expected").isEqualTo(dropoffTimeExpected); } public void checkCustomerInfoForNonExpress() { C3CustomerInfoFragment customerInfoFragment = new C3CustomerInfoFragment(getWebdriverInstance()); assertThat(customerInfoFragment.getName()).as("Account name is correct") .isEqualTo(nonExpressCustomer.getFirstName() + " " + nonExpressCustomer.getLastName()); assertThat(customerInfoFragment.getAccountType()).as("Account type is correct") .isEqualTo(customerInfo.getAccountType()); assertThat(customerInfoFragment.getEmail()).as("Email is correct").isEqualTo(customerInfo.getEmail()); assertThat(customerInfoFragment.getPhoneNumber().replaceAll("\\D", "")).as("Phone number is correct") .isEqualTo(customerInfo.getPhoneNumber()); // customerInfoFragment.getAltPhoneNumber(); assertThat(customerInfoFragment.getCountry()).as("Country is correct").isEqualTo(customerInfo.getCountry()); assertThat(customerInfoFragment.getZip()).as("Zip is correct").isEqualTo(billingInfo.getZipCode()); } public void resendEmailsForMultiplyItinerariesAndCheck() throws Exception { String firstItinerary; String secondItinerary; C3PastBookingPage pastBookingPage = new C3PastBookingPage(getWebdriverInstance()); Integer firstConfirmedPurchaseNumber = pastBookingPage.getNumbersOfConfirmedPurchase().get(0); Integer secondConfirmedPurchaseNumber = pastBookingPage.getNumbersOfConfirmedPurchase().get(1); pastBookingPage.clickCheckBoxByNum(firstConfirmedPurchaseNumber); pastBookingPage.clickCheckBoxByNum(secondConfirmedPurchaseNumber); firstItinerary = pastBookingPage.getItineraryByNum(firstConfirmedPurchaseNumber); secondItinerary = pastBookingPage.getItineraryByNum(secondConfirmedPurchaseNumber); pastBookingPage.resendEmailsForCheckesClick(); assertThat(pastBookingPage.getConfirmationMessage()).as("Confirmation message is correct") .isEqualTo("Itinerary confirmation or Destination Services Voucher e-mail successfully sent"); mailModel.verifyTextInEmail(firstItinerary); mailModel.verifyTextInEmail(secondItinerary); } public void verifyNecessaryFieldsOnHotelItineraryDetailsPage() { C3HotelItineraryPage pg = new C3HotelItineraryPage(getWebdriverInstance()); assertThat(hotwireProduct.getItineraryPage(getWebdriverInstance()).getItineraryNumber()) .isEqualTo(c3ItineraryInfo.getItineraryNumber()); assertThat(pg.getHotelReservationNumber()).contains(c3ItineraryInfo.getHotelReservationNumber()); assertThat(hotwireProduct.getItineraryPage(getWebdriverInstance()).getGuestName()) .isEqualTo(c3HotelSupplyInfo.getHotelGuestName()); assertThat(pg.getFullHotelName()).isEqualTo(c3HotelSupplyInfo.getFullHotelName()); assertThat(pg.getAmenities()).isEqualTo(c3HotelSupplyInfo.getAmenities()); assertThat(pg.getStarRating()).contains(c3HotelSupplyInfo.getStarRating()); assertThat(pg.getNights()).isEqualTo(c3HotelSupplyInfo.getNights().toString()); assertThat(pg.getRooms()).isEqualTo(c3HotelSupplyInfo.getRooms().toString()); //CheckIn CheckOut dates String checkInDate = c3HotelSupplyInfo.getCheckInDate(); String checkOutDate = c3HotelSupplyInfo.getCheckOutDate(); Date date = null; try { date = new SimpleDateFormat("EEE, MMM dd, yyyy").parse(checkInDate); checkInDate = new SimpleDateFormat("dd-MMM-yy").format(date); date = new SimpleDateFormat("EEE, MMM dd, yyyy").parse(checkOutDate); checkOutDate = new SimpleDateFormat("dd-MMM-yy").format(date); } catch (ParseException e) { e.printStackTrace(); } assertThat(pg.getCheckInDate()).isEqualTo(checkInDate); assertThat(pg.getCheckOutDate()).isEqualTo(checkOutDate); //Total for customer assertThat(Double.valueOf(billingInfo.getTotalAmountText().replace("$", ""))) .as("Comparing amounts with rounding issue handling.").isEqualTo( Double.valueOf(hotwireProduct.getItineraryPage(getWebdriverInstance()).getTotalCost() .replace("$", "")) + Double.valueOf(pg.getTripProtectionAmount().replace("$", "")), Delta.delta(0.1)); //address String stateAbbr = c3HotelSupplyInfo.getHotelAddress() .substring(c3HotelSupplyInfo.getHotelAddress().length() - 8).split(" ")[0]; String address = c3HotelSupplyInfo.getHotelAddress() .replace(stateAbbr, State.valueOfAbbreviation(stateAbbr).toString()).replaceAll(",", ""); assertThat(hotwireProduct.getItineraryPage(getWebdriverInstance()).getHotelAddress().replaceAll(",", "")) .contains(address); } public void checkAirParametersForRecentSearch() { C3RecentSearchPage recentSearchPage = new C3RecentSearchPage(getWebdriverInstance()); //actual from tripInfo String fromActual = tripInfo.getFromLocation(); String toActual = tripInfo.getDestinationLocation(); String tripDateToActual = new DateTime(new DateTime()).plusDays(tripInfo.getShiftStartDate()).toLocalDate() .toString("d-MMM-yy"); String tripDateBackActual = new DateTime(new DateTime()).plusDays(tripInfo.getShiftEndDate()).toLocalDate() .toString("d-MMM-yy"); Integer ticketsActual = tripInfo.getPassengers(); // expected from UI String ref = getRefNumber(); String fromExpected = recentSearchPage.getFromAirportBySearchID(ref); String toExpected = recentSearchPage.getToAirportBySearchID(ref); String tripDateFromExpected = recentSearchPage.getCheckInBySearchID(ref); String tripDateToExpected = recentSearchPage.getCheckOutBySearchID(ref); String ticketsExpected = recentSearchPage.getTicketsBySearchID(ref); //assertion assertThat(fromActual).as("not equals actual and expected").contains(fromExpected); assertThat(toActual).as("not equals actual and expected").contains(toExpected); assertThat(tripDateToActual).as("not equals actual and expected").isEqualTo(tripDateFromExpected); assertThat(tripDateBackActual).as("not equals actual and expected").isEqualTo(tripDateToExpected); assertThat(ticketsActual.toString()).as("not equals actual and expected").isEqualTo(ticketsExpected); } public void blockHotel() { new C3HotelBlockConfirmationPage(getWebdriverInstance()).blockHotelByCustomer("Amenities not available"); } public void unblockHotel() { new C3HotelBlockConfirmationPage(getWebdriverInstance()) .unblockHotelByCustomer("Hotel block made an error"); } public void cancelHotelWhileBlocking() { new C3HotelBlockConfirmationPage(getWebdriverInstance()).cancelHotelByCustomer("Amenities not available"); } public void cancelHotelWhileUnblocking() { new C3HotelBlockConfirmationPage(getWebdriverInstance()).cancelHotelByCustomer("Hotel block made an error"); } public void verifyHotelIsBlockedInDB() { DateFormat formatterDate = new SimpleDateFormat("dd-MM-yy"); C3SearchDao searchDao = new C3SearchDao(getDataBaseConnection()); Map hotel = searchDao.getBlockedHotelByItinerary(c3ItineraryInfo.getItineraryNumber()); Date blockActionDate = (Timestamp) hotel.get("BLOCK_ACTION_DATE"); Date createDate = (Timestamp) hotel.get("UPDATE_DATE"); assertThat(formatterDate.format(java.util.Calendar.getInstance().getTime())) .as("Block action date is correct").isEqualTo(formatterDate.format(blockActionDate)); assertThat(formatterDate.format(java.util.Calendar.getInstance().getTime())).as("Update date is correct") .isEqualTo(formatterDate.format(createDate)); assertThat(hotel.get("UNBLOCK_ACTION_DATE")).as("Unblock action date is empty").isNull(); } public void verifyHotelIsUnBlockedInDB() { DateFormat formatterDate = new SimpleDateFormat("dd-MM-yy"); C3SearchDao searchDao = new C3SearchDao(getDataBaseConnection()); Map hotel = searchDao.getUnblockedHotelByItinerary(c3ItineraryInfo.getItineraryNumber()); Date unblockActionDate = (Timestamp) hotel.get("UNBLOCK_ACTION_DATE"); Date createDate = (Timestamp) hotel.get("UPDATE_DATE"); assertThat(formatterDate.format(java.util.Calendar.getInstance().getTime())) .as("Unblock action date is correct").isEqualTo(formatterDate.format(unblockActionDate)); assertThat(formatterDate.format(java.util.Calendar.getInstance().getTime())).as("Update date is correct") .isEqualTo(formatterDate.format(createDate)); assertThat(hotel.get("BLOCK_ACTION_DATE")).as("Block action date is empty").isNull(); } public void givenHotelPurchaseForBlocking() { switch (hotwireProduct.getProductVertical()) { case HOTEL: c3ItineraryInfo .setItineraryNumber(new C3SearchDao(getDataBaseConnection()).getHotelItineraryForBlocking()); break; default: unimplementedTest(); } } public void verifyHotelInBlockedList() { C3BlockedHotelsPage blockedHotelsPage = new C3BlockedHotelsPage(getWebdriverInstance()); assertThat(blockedHotelsPage.isHotelInBlockedList(c3ItineraryInfo.getItineraryNumber())) .as("Hotels blocked list contains " + c3ItineraryInfo.getItineraryNumber() + " itinerary").isTrue(); } public void verifyHotelDateOfBlock() { DateFormat formatterDate = new SimpleDateFormat("dd-MMM-yy"); C3BlockedHotelsPage blockedHotelsPage = new C3BlockedHotelsPage(getWebdriverInstance()); assertThat(blockedHotelsPage.getInformationOfBlockedHotel(c3ItineraryInfo.getItineraryNumber())) .as("Blocked hotel contains correct date of block") .containsIgnoringCase(formatterDate.format(java.util.Calendar.getInstance().getTime())); } public void unblockHotelFromFromBlockedHotelsPage() { C3BlockedHotelsPage blockedHotelsPage = new C3BlockedHotelsPage(getWebdriverInstance()); blockedHotelsPage.clickUnblockHotel(c3ItineraryInfo.getItineraryNumber()); new C3HotelBlockConfirmationPage(getWebdriverInstance()) .unblockHotelByCustomer("Hotel block made an error"); } public void verifyHotelIsAbsentInBlockedList() { String errorText = null; C3BlockedHotelsPage blockedHotelsPage = null; try { errorText = getWebdriverInstance().findElement(By.id("errorMessaging")).getText(); assertThat(errorText).as("Error message doesn't match") .contains("There are no hotel blockings associated with this customer."); } catch (Exception e) { blockedHotelsPage = new C3BlockedHotelsPage(getWebdriverInstance()); assertThat(blockedHotelsPage.isHotelInBlockedList(c3ItineraryInfo.getItineraryNumber())) .as("Hotels blocked list contains " + c3ItineraryInfo.getItineraryNumber() + " itinerary") .isFalse(); } } public void clickBlockHotelFromItineraryDetailsPage() { new C3HotelItineraryPage(getWebdriverInstance()).clickBlockHotel(); } public void clickUnblockHotelFromItineraryDetailsPage() { new C3HotelItineraryPage(getWebdriverInstance()).clickUnblockHotel(); } public void checkReferenceNumberCustomerValidationError() { assertThat(new C3CustomerMainPage(getWebdriverInstance()).getReferenceNumberError()) .isEqualTo("This search was performed as a different customer. " + "Please start a new search from this customer account or close " + "out your case and enter the search reference number on the search for customer screen."); } public void checkReferenceNumberCorrectValidationError() { assertThat(new C3CustomerMainPage(getWebdriverInstance()).getReferenceNumberError()) .isEqualTo("Please correct the Search Reference ID."); } public void verifyRecentC3SearchOnPage() { C3RecentSearchPage recentSearchPage = new C3RecentSearchPage(getWebdriverInstance()); assertThat(recentSearchPage.getCsrStatusBySearchID( new C3SearchDao(getDataBaseConnection()).getSearchIdByEmail(customerInfo.getEmail()))) .as("CSR search status is correct").isEqualToIgnoringCase("Yes"); } public void returnToC3HomePage() { getWebdriverInstance().switchTo().parentFrame(); getWebdriverInstance().findElement(By.cssSelector(".homeItem")).click(); } public void verifyAirDepartingSegments() { C3AirItineraryPage airItineraryPage = new C3AirItineraryPage(getWebdriverInstance()); String headersOfDepartingSegments = airItineraryPage.getHeadersOfDepartingSegments(); for (String expectedHeader : C3AirItineraryPage.EXPECTED_HEADERS_FOR_DEPARTING_SEGMENTS) { assertThat(headersOfDepartingSegments).as("Header '" + expectedHeader + "' doesn't exist") .containsIgnoringCase(expectedHeader); } } public void verifyAirReturningSegments() { C3AirItineraryPage airItineraryPage = new C3AirItineraryPage(getWebdriverInstance()); String headersOfDepartingSegments = airItineraryPage.getHeadersOfReturningSegments(); for (String expectedHeader : C3AirItineraryPage.EXPECTED_HEADERS_FOR_DEPARTING_SEGMENTS) { assertThat(headersOfDepartingSegments).as("Header '" + expectedHeader + "' doesn't exist") .containsIgnoringCase(expectedHeader); } } public void verifyContentOfAirDepartingSegments() { SimpleDateFormat formatDate = new SimpleDateFormat("dd-MMM-yy"); SimpleDateFormat formatTime = new SimpleDateFormat("h:mm a"); C3AirItineraryPage airItineraryPage = new C3AirItineraryPage(getWebdriverInstance()); Integer sizeOfTransferForDeparting = airItineraryPage.getDepartingFlightNumber().size(); // assertThat(airItineraryPage.getDepartingCarrier()).isEqualToIgnoringCase(c3FlightInfo.getDepartingCarrier()); // assertThat(airItineraryPage.getDepartingFlightType()).isEqualToIgnoringCase(c3FlightInfo.getDepartingTypeOfFlight()); for (int i = 0; i < sizeOfTransferForDeparting; i++) { assertThat(airItineraryPage.getDepartingFlightNumber().get(i)) .as("Flight number is incorrect for departing segment") .isEqualToIgnoringCase(c3FlightInfo.getDepartingFlightNumber().get(i)); assertThat(c3FlightInfo.getDepartingFromLocation().get(i)) .as("From location is incorrect for departing segment") .containsIgnoringCase(airItineraryPage.getDepartingFromLocation().get(i)); assertThat(c3FlightInfo.getDepartingToLocation().get(i)) .as("To location is incorrect for departing segment") .containsIgnoringCase(airItineraryPage.getDepartingToLocation().get(i)); assertThat(airItineraryPage.getDepartingStartDateAndTime().get(i)) .as("Start date and time is incorrect for departing segment") .isEqualToIgnoringCase(formatDate.format(c3FlightInfo.getDepartingStartDateAndTime().get(i)) + " at " + formatTime.format(c3FlightInfo.getDepartingStartDateAndTime().get(i))); assertThat(airItineraryPage.getDepartingEndDateAndTime().get(i)) .as("End date and time is incorrect for departing segment") .isEqualToIgnoringCase(formatDate.format(c3FlightInfo.getDepartingEndDateAndTime().get(i)) + " at " + formatTime.format(c3FlightInfo.getDepartingEndDateAndTime().get(i))); assertThat(airItineraryPage.getDepartingTotalTripTime().get(i).replace(" ", "")) .as("Total trip time is incorrect for departing segment") .isEqualToIgnoringCase(c3FlightInfo.getDepartingTotalTripTime().get(i).replaceAll("[ ()]", "")); assertThat(airItineraryPage.getDepartingAirlineRecordLocator().get(i)) .as("Airline record locator is incorrect for departing segment") .isEqualToIgnoringCase(c3FlightInfo.getConfirmationNumber()); } } public void verifyContentOfAirReturningSegments() { SimpleDateFormat formatDate = new SimpleDateFormat("dd-MMM-yy"); SimpleDateFormat formatTime = new SimpleDateFormat("h:mm a"); C3AirItineraryPage airItineraryPage = new C3AirItineraryPage(getWebdriverInstance()); Integer sizeOfTransferForReturning = airItineraryPage.getReturningFlightNumber().size(); // assertThat(airItineraryPage.getReturningCarrier()).isEqualToIgnoringCase(c3FlightInfo.getReturningCarrier()); // assertThat(airItineraryPage.getReturningFlightType()).isEqualToIgnoringCase(c3FlightInfo.getReturningTypeOfFlight()); for (int i = 0; i < sizeOfTransferForReturning; i++) { assertThat(airItineraryPage.getReturningFlightNumber().get(i)) .as("Flight number is incorrect for returning segment") .isEqualToIgnoringCase(c3FlightInfo.getReturningFlightNumber().get(i)); assertThat(c3FlightInfo.getReturningFromLocation().get(i)) .as("From location is incorrect for returning segment") .containsIgnoringCase(airItineraryPage.getReturningFromLocation().get(i)); assertThat(c3FlightInfo.getReturningToLocation().get(i)) .as("To location is incorrect for returning segment") .containsIgnoringCase(airItineraryPage.getReturningToLocation().get(i)); assertThat(airItineraryPage.getReturningStartDateAndTime().get(i)) .as("Start date and time is incorrect for returning segment") .isEqualToIgnoringCase(formatDate.format(c3FlightInfo.getReturningStartDateAndTime().get(i)) + " at " + formatTime.format(c3FlightInfo.getReturningStartDateAndTime().get(i))); assertThat(airItineraryPage.getReturningEndDateAndTime().get(i)) .as("End date and time is incorrect for returning segment") .isEqualToIgnoringCase(formatDate.format(c3FlightInfo.getReturningEndDateAndTime().get(i)) + " at " + formatTime.format(c3FlightInfo.getReturningEndDateAndTime().get(i))); assertThat(airItineraryPage.getReturningTotalTripTime().get(i).replace(" ", "")) .as("Total trip time is incorrect for returning segment") .isEqualToIgnoringCase(c3FlightInfo.getReturningTotalTripTime().get(i).replaceAll("[ ()]", "")); assertThat(airItineraryPage.getReturningAirlineRecordLocator().get(i)) .as("Airline record locator is incorrect for returning segment") .isEqualToIgnoringCase(c3FlightInfo.getConfirmationNumber()); } } public void verifyNecessaryFieldsOnAirItineraryDetailsPage() { Integer numOfDepSegments = c3FlightInfo.getDepartingStartDateAndTime().size() - 1; Integer numOfRetSegments = c3FlightInfo.getReturningStartDateAndTime().size() - 1; SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yy"); String airportCodeFromLocationDeparting = c3FlightInfo.getDepartingFromLocation().get(0).split("[(]")[1] .split("[)]")[0]; String airportCodeToLocationDeparting = c3FlightInfo.getDepartingToLocation().get(numOfDepSegments) .split("[(]")[1].split("[)]")[0]; String airportCodeFromLocationReturning = c3FlightInfo.getReturningFromLocation().get(0).split("[(]")[1] .split("[)]")[0]; String airportCodeToLocationReturning = c3FlightInfo.getReturningToLocation().get(numOfRetSegments) .split("[(]")[1].split("[)]")[0]; C3AirItineraryPage airItineraryPage = new C3AirItineraryPage(getWebdriverInstance()); assertThat(airItineraryPage.getItineraryNumber()).as("Itinerary number is incorrect") .isEqualToIgnoringCase(c3ItineraryInfo.getItineraryNumber()); for (String airTicketNumber : c3FlightInfo.getAirTicketsNumbers()) { assertThat(airItineraryPage.getAirTicketNumbers()).as("Number of ticket is incorrect") .containsIgnoringCase(airTicketNumber); } for (String nameOfPassengers : c3FlightInfo.getNamesOfPassengers()) { assertThat(airItineraryPage.getNamesOfPassengers()).as("Name of the passenger is incorrect") .containsIgnoringCase(nameOfPassengers); } assertThat(airItineraryPage.getNumberOfPassengers()).as("Number of passengers is incorrect") .isEqualToIgnoringCase(c3FlightInfo.getNumberOfTickets()); assertThat(airItineraryPage.getNumberOfTickets()).as("Number of tickets is incorrect") .isEqualToIgnoringCase(c3FlightInfo.getNumberOfTickets()); assertThat(airItineraryPage.getDepartLocationFromItinerarySection().replaceAll("\n", "")) .as("Depart field is incorrect") .isEqualTo(format.format(c3FlightInfo.getDepartingStartDateAndTime().get(0)) + airportCodeFromLocationDeparting + "/" + airportCodeToLocationDeparting); assertThat(airItineraryPage.getReturnLocationFromItinerarySection().replaceAll("\n", "")) .as("Return field is incorrect") .isEqualTo(format.format(c3FlightInfo.getReturningEndDateAndTime().get(numOfRetSegments)) + airportCodeFromLocationReturning + "/" + airportCodeToLocationReturning); for (int i = 0; i <= numOfDepSegments; i++) { assertThat(airItineraryPage.getPlatingCarrier()) .containsIgnoringCase(c3FlightInfo.getDepartingCarrier().get(i)); } for (int i = 0; i <= numOfRetSegments; i++) { assertThat(airItineraryPage.getPlatingCarrier()).as("Plating carrier is incorrect") .containsIgnoringCase(c3FlightInfo.getReturningCarrier().get(i)); } assertThat(airItineraryPage.getBookingType()).as("Booking type is incorrect") .containsIgnoringCase("Air- " + hotwireProduct.getOpacity().getRateType()); assertThat(airItineraryPage.getTransactionDate()).as("Transaction date is incorrect") .containsIgnoringCase(format.format(new Date())); assertThat(airItineraryPage.getDeviceType()).as("Device type is incorrect").containsIgnoringCase("Other"); assertThat(airItineraryPage.getApplicationType()).as("Application type is incorrect") .containsIgnoringCase("Desktop"); assertThat(airItineraryPage.getLoggedIn1()).as("Logged1 is incorrect").containsIgnoringCase("Yes"); assertThat(airItineraryPage.getTripProtection().toLowerCase() .contains(tripInfo.getTripInsurance() ? "yes" : "no")).as("Trip protection is incorrect").isTrue(); assertThat(airItineraryPage.getLoggedIn2()).as("Logged2 is incorrect").containsIgnoringCase("Yes"); assertThat(airItineraryPage.getRentalCarProtection().toLowerCase() .contains(tripInfo.getCarInsurance() ? "yes" : "no")).as("Car trip protection is incorrect") .isTrue(); assertThat(airItineraryPage.getSearchedBookedByCSR()).as("Booked by CSR is incorrect") .isEqualToIgnoringCase("Y/Y"); assertThat(airItineraryPage.getBilledBy()).as("Billed by is incorrect") .isEqualToIgnoringCase(hotwireProduct.getOpacity().getBilledBy()); assertThat(airItineraryPage.getOutBoundConnection()).as("Outbound connections is incorrect") .isEqualTo(numOfDepSegments.toString()); assertThat(airItineraryPage.getInBoundConnection()).as("Inbound connections is incorrect") .isEqualTo(numOfRetSegments.toString()); Double totalCostFromAirItinerary; totalCostFromAirItinerary = Double.parseDouble(airItineraryPage.getTotalCost().replaceAll("[$,]", "")); if (null != airItineraryPage.getTripProtectionBookedDetails()) { totalCostFromAirItinerary += Double .parseDouble(airItineraryPage.getTripProtectionBookedDetails().replaceAll("[$,]", "")); } assertThat(airItineraryPage.getTotalCost()).as("Currency code for total cost is incorrect") .startsWith(c3ItineraryInfo.getCurrencyCode()); assertThat(totalCostFromAirItinerary).as("Total cost value is incorrect") .isEqualTo(c3ItineraryInfo.getTotalCost()); } public void openPurchaseDetailsByItinerary(String itinerary) { getWebdriverInstance().switchTo().defaultContent(); getWebdriverInstance().switchTo().frame("c3Frame"); new C3PastBookingPage(getWebdriverInstance()).choosePurchaseByItinerary(itinerary); } public void verifyAirSearchPurchaseStatus(String searched, String booked) { assertThat(new C3AirItineraryPage(getWebdriverInstance()).getSearchedBookedByCSR()) .as("Booked by CSR is incorrect").isEqualTo(searched + "/" + booked); } public void verifyTemplateOfPaymentDetailsPage(String table) { C3PaymentDetailsFragment paymentDetailsFragment = new C3PaymentDetailsFragment(getWebdriverInstance()); String rootWindowHandler = getWebdriverInstance().getWindowHandle(); if ("full authorization".equals(table)) { paymentDetailsFragment.getFullAuthorizationTable().clickDetailsLink(); } else if ("bill".equals(table)) { paymentDetailsFragment.getBillTable().clickDetailsLink(); } for (String h : getWebdriverInstance().getWindowHandles()) { if (!h.equals(rootWindowHandler) && !h.isEmpty()) { C3PaymentDetailsPage paymentDetailsPage = new C3PaymentDetailsPage( getWebdriverInstance().switchTo().window(h)); paymentDetailsPage.verifyTextOnPage("Customer Email"); paymentDetailsPage.verifyTextOnPage("HW Itinerary"); paymentDetailsPage.verifyTextOnPage("Payment Method"); paymentDetailsPage.verifyTextOnPage("Transaction Date"); paymentDetailsPage.verifyTextOnPage("Amount"); paymentDetailsPage.verifyTextOnPage("Event"); paymentDetailsPage.verifyTextOnPage("Event Status"); paymentDetailsPage.verifyTextOnPage("Payment Gateway/Payment Processor"); paymentDetailsPage.verifyTextOnPage("Payment Gateway Error Message"); paymentDetailsPage.verifyTextOnPage("Request Number"); paymentDetailsPage.verifyTextOnPage("Authorization Code"); paymentDetailsPage.verifyTextOnPage("Bank Error Message"); paymentDetailsPage.verifyTextOnPage("Address Verification Response Code"); paymentDetailsPage.verifyTextOnPage("Card Presence Verification Response Code"); paymentDetailsPage.verifyTextOnPage("VbV/SecureCode Response Code"); try { paymentDetailsPage.verifyTextOnPage("Billed by"); } catch (AssertionError e) { paymentDetailsPage.verifyTextOnPage("Auth by"); } paymentDetailsPage.verifyTextOnPage("VbV/SecureCode ECI Codes"); paymentDetailsPage.verifyTextOnPage("Fraud Score"); paymentDetailsPage.verifyTextOnPage("Fraud Score Transaction Status"); getWebdriverInstance().switchTo().window(h).close(); } } getWebdriverInstance().switchTo().window(rootWindowHandler); switchToFrame("c3Frame"); } }