def test_availability_accessibility(self): """ Test case for a valid availability query. Reads the travel properties from test-data.json, sets the travel departureTimeEarliest to next monday at 11:00Z. Expects valid response for a transport leaving 19:00+3, one availability for the passenger adult with GUIDE_DOG accessibility feature in the reservation. """ # Trip availaibility inquiry travel = self.testdata['travel_data_accessibility'] product = self.testdata['test_products_current_date_response'] t = datetime.datetime.now() travel["travel"]["departureTimeEarliest"] = zulu.now().shift(days=(7 - t.weekday())). \ replace(hour=11, minute=00).isoformat() r = lippuclient.availability_request(self.envdata['base_url'], headers=self.headers, payload=travel) logging.info( "test_availability_accessibility, availability response: %s" % r.json()) self.assertEqual(r.status_code, 200) self.assertEqual(len(r.json()['availability']), 1) self.assertEqual(r.json()['contract'], travel['contract']) self.assertEqual(r.json()['travel']['productType'], travel['travel']['productType']) self.assertEqual(r.json()['travel']['to']['lat'], travel['travel']['to']['lat']) self.assertEqual(r.json()['travel']['to']['lon'], travel['travel']['to']['lon']) self.assertEqual(r.json()['travel']['from']['lat'], travel['travel']['from']['lat']) self.assertEqual(r.json()['travel']['from']['lon'], travel['travel']['from']['lon']) for item in r.json()['availability']: self.assertNotEqual(item['applicableForPassengers'], 'None') self.assertEqual(item['fare']['currency'], 'EUR') self.assertEqual(item['fare']['amount'], 14) self.assertEqual(item['fare']['vatPercent'], 10) for applicable in item['applicableForPassengers']: self.assertEqual(applicable['category'], 'Adult') self.assertEqual( applicable['category'] in product['products2']['suitablePassengerCategories'], True) self.assertEqual(applicable['accessibility'][0]['title'], 'GUIDE_DOG') self.assertEqual( applicable['accessibility'][0]['fare']['currency'], 'EUR') self.assertEqual( applicable['accessibility'][0]['fare']['amount'], 0) self.assertEqual( applicable['accessibility'][0]['fare']['vatPercent'], 0) self.assertEqual(r.json()['travel']['departureTime'].startswith( zulu.now().shift(days=(7 - t.weekday())). \ replace(hour=19, minute=00).format('%Y-%m-%dT%H:%M') ), True) logging.info("Departure time: %s" % zulu.parse(r.json()['travel']['departureTime']))
def test_availability_empty_extra_services(self): """ Test case for a availability query with invalid extraService. Expects valid response for a transport leaving, but with no availabilities as the one passenger has invalid extraService """ # Trip availaibility inquiry travel = self.testdata['travel_data_extra_services'] travel['passengers'][0]['extraServices'][0]['title'] = "" product = self.testdata['test_products_current_date_response'] t = datetime.datetime.now() travel["travel"]["departureTimeEarliest"] = zulu.now().shift(days=(7 - t.weekday())). \ replace(hour=11, minute=00).isoformat() r = lippuclient.availability_request(self.envdata['base_url'], headers=self.headers, payload=travel) logging.info( "test_availability_invalid_extra_services, availability response: %s" % r.json()) self.assertEqual(r.status_code, 200) self.assertEqual(len(r.json()['availability']), 0) self.assertEqual(r.json()['contract'], travel['contract']) self.assertEqual(r.json()['travel']['productType'], travel['travel']['productType']) self.assertEqual(r.json()['travel']['to']['lat'], travel['travel']['to']['lat']) self.assertEqual(r.json()['travel']['to']['lon'], travel['travel']['to']['lon']) self.assertEqual(r.json()['travel']['from']['lat'], travel['travel']['from']['lat']) self.assertEqual(r.json()['travel']['from']['lon'], travel['travel']['from']['lon'])
def test_availability_set_both_times(self): """ Test case for a valid availability query. Reads the travel properties from test-data.json, sets the travel departureTimeEarliest two days from now to 14:00Z and arrivalTimeLatest two days from now at 21:30. As both are set, expects the departureTimeEarliest to be used for query.Expects valid response for a transport leaving 20:00+3. """ # Trip availaibility inquiry travel = self.testdata['travel_data'] product = self.testdata['test_products_current_date_response'] travel["travel"]["departureTimeEarliest"] = zulu.now().shift(days=2). \ replace(hour=14, minute=00).isoformat() travel["travel"]["arrivalTimeLatest"] = zulu.now().shift(days=2). \ replace(hour=21, minute=30).isoformat() r = lippuclient.availability_request(self.envdata['base_url'], headers=self.headers, payload=travel) logging.info( "test_availability_both_arrival_time, availability response: %s" % r.json()) self.assertEqual(r.status_code, 200) self.assertEqual(len(r.json()['availability']), 3) self.assertEqual(r.json()['contract'], travel['contract']) self.assertEqual(r.json()['travel']['productType'], travel['travel']['productType']) self.assertEqual(r.json()['travel']['to']['lat'], travel['travel']['to']['lat']) self.assertEqual(r.json()['travel']['to']['lon'], travel['travel']['to']['lon']) self.assertEqual(r.json()['travel']['from']['lat'], travel['travel']['from']['lat']) self.assertEqual(r.json()['travel']['from']['lon'], travel['travel']['from']['lon']) for item in r.json()['availability']: self.assertNotEqual(item['applicableForPassengers'], 'None') for applicable in item['applicableForPassengers']: self.assertNotEqual(applicable, 'None') self.assertEqual( applicable['category'] in product['products1']['suitablePassengerCategories'], True) self.assertEqual(r.json()['travel']['departureTime'].startswith( zulu.now().shift(days=2). \ replace(hour=20, minute=00).format('%Y-%m-%dT%H:%M') ), True) self.assertEqual(r.json()['travel']['arrivalTime'].startswith( zulu.now().shift(days=2). \ replace(hour=23, minute=10).format('%Y-%m-%dT%H:%M') ), True) logging.info("Arrival time: %s" % zulu.parse(r.json()['travel']['arrivalTime']))
def test_reservation_accessibility_invalid_reservation_id(self): """ Test case for reservation with invalid accessibility requirements reservation id, reservation request fails. """ t = datetime.datetime.now() travel = self.testdata['travel_data_accessibility'] travel["travel"]["departureTimeEarliest"] = zulu.now().shift(days=(7 - t.weekday())). \ replace(hour=14, minute=00).isoformat() logging.info( "test_reservation_accessibility, availability request: %s" % travel) r_availability = lippuclient.availability_request( self.envdata['base_url'], headers=self.headers, payload=travel) logging.info( "test_reservation_accessibility, availability response: %s" % r_availability) self.assertEqual(r_availability.status_code, 200) self.assertGreater(len(r_availability.json()), 0) # Make reservation self.headers['X-Message-Id'] = str(uuid.uuid4()) travel_entitlement_id = r_availability.json( )['availability'][0]['travelEntitlementId'] reservation = { 'reservations': [{ 'travelEntitlementId': travel_entitlement_id, 'chosenAccessibilityReservationIds': [str(uuid.uuid4())], 'customerInfo': [self.testdata['customer_info']] }] } logging.info("Sending reservation %s" % reservation) r_reservation = lippuclient.reservation_request( self.envdata['base_url'], headers=self.headers, payload=reservation) logging.info( "test_reservation_accessibility, reservation response %s" % r_reservation.text) self.assertEqual(r_reservation.status_code, 404) # Test that reservation does not exits. self.headers['X-Message-Id'] = str(uuid.uuid4()) r = lippuclient.travel_entitlement_status( self.envdata['base_url'], headers=self.headers, travel_entitlement_id=travel_entitlement_id) logging.info( "test_reservation_accessibility, travel entitlement response %s" % r.text) self.assertEqual(r.status_code, 404)
def test_availability_null_date(self): """ Test case for using null departureTimeEarliest. """ travel = self.testdata['travel_data'] travel["travel"]["departureTimeEarliest"] = None r = lippuclient.availability_request(self.envdata['base_url'], headers=self.headers, payload=travel) logging.info("test_availability_null_date, availability response: %s" % r.json()) self.assertEqual(r.status_code, 200)
def test_reservation_delete(self): """ Test case for reservation_delete, create reservation and then delete it. Cancelletion of transport reservation """ # Add reservation and test you can delete it with the case id travel = self.testdata['travel_data'] r_availability = lippuclient.availability_request( self.envdata['base_url'], headers=self.headers, payload=travel) logging.info("test_reservation_delete, availability response: %s" % r_availability) self.assertEqual(r_availability.status_code, 200) self.assertGreater(len(r_availability.json()), 0) # Make reservation self.headers['X-Message-Id'] = str(uuid.uuid4()) reservation = { 'reservations': [{ 'travelEntitlementId': r_availability.json()['availability'][0] ['travelEntitlementId'], 'customerInfo': [self.testdata['customer_info']] }] } logging.info("Sending reservation %s" % reservation) r_reservation = lippuclient.reservation_request( self.envdata['base_url'], headers=self.headers, payload=reservation) logging.info("test_reservation_delete, reservation response %s" % r_reservation.text) self.assertEqual(r_reservation.status_code, 200) self.headers['X-Message-Id'] = str(uuid.uuid4()) caseId = r_reservation.json()['caseId'] r_delete = lippuclient.reservation_delete(self.envdata['base_url'], headers=self.headers, reservation_id=caseId) self.assertEqual(r_delete.status_code, 200) # Test that already deleted reservation is deleted and could # not be deleted again. self.headers['X-Message-Id'] = str(uuid.uuid4()) r_delete2 = lippuclient.reservation_delete(self.envdata['base_url'], headers=self.headers, reservation_id=caseId) self.assertEqual(r_delete2.status_code, 404)
def test_availability_null_from_lat_coordinate(self): """ Test case for using null latiatude from coordinate. """ travel = self.testdata['travel_data'] travel["travel"]["departureTimeEarliest"] = zulu.now().shift(days=2).\ replace(hour=14, minute=00).isoformat() travel["travel"]["from"]["lat"] = None r = lippuclient.availability_request(self.envdata['base_url'], headers=self.headers, payload=travel) logging.info( "test_availability_null_from_lat_coordinate, availability response: %s" % r.json()) self.assertEqual(r.status_code, 400) self.assertEqual(r.json()["statusCode"], 400)
def test_availability_departure_late(self): """ Test case for using too late departure time earliest, in which case the tansport operator does not have transport to offer. """ travel = self.testdata['travel_data'] travel["travel"]["departureTimeEarliest"] = zulu.now().shift(days=2). \ replace(hour=20, minute=45).isoformat() r = lippuclient.availability_request(self.envdata['base_url'], headers=self.headers, payload=travel) logging.info( "test_availability_departure_late, availability response: %s" % r.json()) self.assertEqual(r.status_code, 400) self.assertEqual(r.json()["statusCode"], 400)
def test_availability_non_valid_token(self): """ Test case for using non valid authentication token for availability query """ travel = self.testdata['travel_data'] travel["travel"]["departureTimeEarliest"] = zulu.now().shift(days=2).\ replace(hour=14, minute=00).isoformat() headers = lippuclient.generate_headers( account_id=self.testdata['valid_client1'], token=str(uuid.uuid4()), language="fi") r = lippuclient.availability_request(self.envdata['base_url'], headers=headers, payload=travel) logging.info("test_availability_non_valid_token, response: %s" % (r.json())) self.assertEqual(r.status_code, 403)
def test_availability_invalid_accessibility(self): """ Test case for a availability query with invalid accessibility feature. Reads the travel properties from test-data.json, sets the travel departureTimeEarliest to next monday at 11:00Z. Expects response with zero travel availabilities. """ # Trip availaibility inquiry travel = self.testdata['travel_data_accessibility'] travel["passengers"][0]["accessibility"][0][ "title"] = "TESTING_ACCESSIBILITY" product = self.testdata['test_products_current_date_response'] t = datetime.datetime.now() travel["travel"]["departureTimeEarliest"] = zulu.now().shift(days=(7 - t.weekday())). \ replace(hour=11, minute=00).isoformat() r = lippuclient.availability_request(self.envdata['base_url'], headers=self.headers, payload=travel) logging.info( "test_availability_invalid_accessibility, availability response: %s" % r.json()) self.assertEqual(r.status_code, 400)
def test_reservation_extra_services_accessibility(self): """ Test case for reservation with extra services and accessibility requirements """ t = datetime.datetime.now() travel = self.testdata['travel_data_extra_services'] travel['passengers'][0]['accessibility'] = [{"title": "LOW-FLOOR"}] travel["travel"]["departureTimeEarliest"] = zulu.now().shift(days=(7 - t.weekday())). \ replace(hour=14, minute=00).isoformat() r_availability = lippuclient.availability_request( self.envdata['base_url'], headers=self.headers, payload=travel) logging.info( "test_reservation_extra_services_accessibility, availability response: %s" % r_availability) self.assertEqual(r_availability.status_code, 200) self.assertGreater(len(r_availability.json()['availability']), 0) # Make reservation self.headers['X-Message-Id'] = str(uuid.uuid4()) travel_entitlement_id = r_availability.json( )['availability'][0]['travelEntitlementId'] extra_service_id = r_availability.json()['availability'][0]\ ['applicableForPassengers'][0]['extraServices'][0]['extraServiceReservationId'] accessibility_id = r_availability.json()['availability'][0]\ ['applicableForPassengers'][0]['accessibility'][0]['accessibilityReservationId'] reservation = { 'reservations': [{ 'travelEntitlementId': travel_entitlement_id, 'chosenExtraReservationIds': [extra_service_id], 'chosenAccessibilityReservationIds': [accessibility_id], 'customerInfo': [self.testdata['customer_info']] }] } logging.info("Sending reservation %s" % reservation) r_reservation = lippuclient.reservation_request( self.envdata['base_url'], headers=self.headers, payload=reservation) logging.info("test_reservation_extra_services_accessibility, " "reservation response %s" % r_reservation.text) self.assertEqual(r_reservation.status_code, 200) self.assertNotEqual(r_reservation.json()['caseId'], None) self.assertNotEqual(r_reservation.json()['caseId'], '') self.assertNotEqual(r_reservation.json()['confirmedReservations'], None) self.assertEqual( r_reservation.json()['confirmedReservations'][0] ['travelEntitlementId'], travel_entitlement_id) caseId = r_reservation.json()['caseId'] # Test that reservation has the extra service and accessibility # requirements reserved in the reservation request. self.headers['X-Message-Id'] = str(uuid.uuid4()) r = lippuclient.travel_entitlement_status( self.envdata['base_url'], headers=self.headers, travel_entitlement_id=travel_entitlement_id) logging.info("test_reservation_extra_services_accessibility, " "travel entitlment response %s" % r_reservation.text) self.assertEqual(r.json()['travelEntitlementId'], travel_entitlement_id) self.assertEqual( r.json()['extraServices'][0]['extraServiceReservationId'], extra_service_id) self.assertEqual( r.json()['accessibility'][0]['accessibilityReservationId'], accessibility_id)
def test_reservation_do_not_include_accessibility(self): """ Test case for reservation with leaving out accessibility requirements that were in availability request. """ t = datetime.datetime.now() travel = self.testdata['travel_data_accessibility'] travel["travel"]["departureTimeEarliest"] = zulu.now().shift(days=(7 - t.weekday())). \ replace(hour=14, minute=00).isoformat() logging.info( "test_reservation_do_not_include_accessibility, availability request: %s" % travel) r_availability = lippuclient.availability_request( self.envdata['base_url'], headers=self.headers, payload=travel) logging.info( "test_reservation_do_not_include_accessibility, availability response: %s" % r_availability) self.assertEqual(r_availability.status_code, 200) self.assertGreater(len(r_availability.json()), 0) # Make reservation self.headers['X-Message-Id'] = str(uuid.uuid4()) travel_entitlement_id = r_availability.json( )['availability'][0]['travelEntitlementId'] accessibility_id = r_availability.json( )['availability'][0]['applicableForPassengers'][0]['accessibility'][0][ 'accessibilityReservationId'] reservation = { 'reservations': [{ 'travelEntitlementId': travel_entitlement_id, 'chosenAccessibilityReservationIds': [], 'customerInfo': [self.testdata['customer_info']] }] } logging.info("Sending reservation %s" % reservation) r_reservation = lippuclient.reservation_request( self.envdata['base_url'], headers=self.headers, payload=reservation) logging.info( "test_reservation_do_not_include_accessibility, reservation response %s" % r_reservation.text) self.assertEqual(r_reservation.status_code, 200) self.assertNotEqual(r_reservation.json()['caseId'], None) self.assertNotEqual(r_reservation.json()['caseId'], '') self.assertNotEqual(r_reservation.json()['confirmedReservations'], None) self.assertEqual( r_reservation.json()['confirmedReservations'][0] ['travelEntitlementId'], travel_entitlement_id) caseId = r_reservation.json()['caseId'] # Test that reservation does not have the accessibility features in # the reservation request. self.headers['X-Message-Id'] = str(uuid.uuid4()) r = lippuclient.travel_entitlement_status( self.envdata['base_url'], headers=self.headers, travel_entitlement_id=travel_entitlement_id) logging.info( "test_reservation_do_not_include_accessibility, travel entitlement response %s" % r_reservation.text) self.assertEqual(r.json()['travelEntitlementId'], travel_entitlement_id) self.assertEqual(r.json()['accessibility'], [])