def test_book_single_flight_for_user_user_not_exist(self): '''Book Flight for User Account - Invalid :- When user does not exist''' reservation_data = self.valid_reservation_data.copy() response = self.client.post( reverse( 'account-reservations-reservations', kwargs={ 'version': 'v1', 'pk': uuid.uuid4() } ), data=reservation_data, HTTP_AUTHORIZATION=utils.generate_token(self.super_user) ) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual( response.data.get('errors').get('global'), 'No Accounts matches the given query.' ) self.assertEqual( response.data.get('message'), 'An error has occured.' )
def test_schedule_airline_daily_flights_when_departure_same_as_arrival( self): '''Schedule Single Flight for Airline - Invalid :- When Departure and Arrival are same airport''' flight_data = self.flight_schedule.copy() flight_data['departure_airport'] = flight_data['arrival_airport'] response = self.client.post(reverse('airlines-daily-schedule', kwargs={ 'version': 'v1', 'pk': 'DL' }), data=flight_data, HTTP_AUTHORIZATION=utils.generate_token( self.super_user)) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual( response.data.get('errors').get('departure_airport')['message'], 'Arrival airport cant be same as departure.') self.assertEqual( response.data.get('errors').get('departure_airport')['type'], 'invalid') self.assertEqual( response.data.get('errors').get('arrival_airport')['message'], 'Arrival airport cant be same as departure.') self.assertEqual( response.data.get('errors').get('arrival_airport')['type'], 'invalid')
def test_book_single_flight_for_user_bad_permission(self): '''Book Flight for User Account - Invalid :- When User does not have sufficient permission''' reservation_data = self.valid_reservation_data response = self.client.post( reverse( 'account-reservations-reservations', kwargs={ 'version': 'v1', 'pk': self.super_user.account.id, } ), data=reservation_data, HTTP_AUTHORIZATION=utils.generate_token(self.user) ) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual( response.data.get('errors').get('global'), 'Insufficient Permission.' ) self.assertEqual( response.data.get('message'), 'An error has occured.' )
def test_make_reservation_when_return_same_as_first_flight(self): '''Make Reservation For self - Invalid :- When Return Flight same as First Flight''' reservation_data = self.valid_reservation_data_return.copy() reservation_data['return_flight'] = reservation_data['first_flight'] response = self.client.post(reverse('reservations-list', kwargs={ 'version': 'v1', }), data=reservation_data, HTTP_AUTHORIZATION=utils.generate_token( self.user)) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual( response.data.get('errors').get('return_flight')['message'], 'Return Flight cannot be same as first flight.') self.assertEqual( response.data.get('errors').get('return_flight')['type'], 'invalid') self.assertEqual( response.data.get('errors').get('first_flight')['message'], 'Return Flight cannot be same as first flight.') self.assertEqual( response.data.get('errors').get('first_flight')['type'], 'invalid')
def test_book_single_flight_for_user_missing_fields(self): '''Book Flight for User Account - Invalid :- When Not all fields are sent in''' reservation_data = self.valid_reservation_data.copy() del reservation_data['first_flight'] response = self.client.post( reverse( 'account-reservations-reservations', kwargs={ 'version': 'v1', 'pk': self.user.account.id, } ), data=reservation_data, HTTP_AUTHORIZATION=utils.generate_token(self.user) ) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual( response.data.get('errors').get('first_flight')['message'], 'This field is required.' ) self.assertEqual( response.data.get('errors').get('first_flight')['type'], 'required' )
def test_book_single_flight_for_user(self): '''Book Flight for User Account - Valid :- ''' reservation_data = self.valid_reservation_data.copy() response = self.client.post( reverse( 'account-reservations-reservations', kwargs={ 'version': 'v1', 'pk': self.user.account.id, } ), data=reservation_data, HTTP_AUTHORIZATION=utils.generate_token(self.user) ) self.assertTrue(response.data.get('success')) payload = response.data.get('payload') self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual( payload.get('flight_class'), reservation_data.get('flight_class') ) self.assertEqual( payload.get('reserved_by').get('full_name'), '{} {}'.format(self.user.first_name, self.user.last_name) ) self.assertEqual( response.data.get('message'), 'Reservation made Successfully.' )
def test_filter_airlines(self): '''Filter list of all Airlines - Valid: No filters''' response = self.client.get(reverse('airlines-list', kwargs={ 'version': 'v1', }), HTTP_AUTHORIZATION=utils.generate_token( self.super_user)) payload = response.data.get('payload') self.assertTrue(response.data.get('success')) self.assertGreaterEqual(payload.get('count'), 1)
def test_filter_airline_schedule(self): '''List/Filter Airline Flight Schedule - Valid''' reservation_factory.create_single_flight(airline='WT') response = self.client.get(reverse('airlines-schedule', kwargs={ 'version': 'v1', 'pk': 'WT' }), HTTP_AUTHORIZATION=utils.generate_token( self.super_user)) payload = response.data.get('payload') self.assertTrue(response.data.get('success')) self.assertGreaterEqual(len(payload), 1)
def test_list_flights_filter_dates(self): '''List/Filter Flights - Valid :-Filter by Dates''' response = self.client.get( reverse('flights-list', kwargs={ 'version': 'v1', }), data={'date': timezone.now() + timedelta(days=1)}, HTTP_AUTHORIZATION=utils.generate_token(self.user)) payload = response.data.get('payload') self.assertTrue(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_retrieve_reservation(self): '''Retrieve Reservation - Valid : payload correct''' response = self.client.get( reverse('reservations-detail', kwargs={ 'version': 'v1', 'pk': self.return_ticket_reservation.id, }), HTTP_AUTHORIZATION=utils.generate_token(self.user)) payload = response.data.get('payload') self.assertTrue(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(payload.get('flight_class'), self.return_ticket_reservation.flight_class)
def test_retrieve_reservation_not_for_user(self): '''Retrieve Single Reservation - Invalid :- Bad permission''' response = self.client.get( reverse('reservations-detail', kwargs={ 'version': 'v1', 'pk': self.single_ticket_reservation.id }), HTTP_AUTHORIZATION=utils.generate_token(self.user2)) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual(response.data.get('message'), 'An error has occured.')
def test_list_flights_no_query_params(self): '''List/Filter Flights - Valid :- No filter''' response = self.client.get(reverse('flights-list', kwargs={ 'version': 'v1', }), HTTP_AUTHORIZATION=utils.generate_token( self.user)) payload = response.data.get('payload') self.assertTrue(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(payload), 2)
def test_filter_airlines_filter_code(self): '''Filter list of all Airlines - Valid: filter Code''' response = self.client.get(reverse('airlines-list', kwargs={ 'version': 'v1', }), data={'code': 'BA'}, HTTP_AUTHORIZATION=utils.generate_token( self.super_user)) payload = response.data.get('payload') self.assertTrue(response.data.get('success')) self.assertEqual(payload.get('count'), 1) self.assertEqual( payload.get('results')[0].get('airline_name'), 'British Airways')
def test_list_reservations_by_year(self): '''List/Filter Reservations by Year- Valid :- Payload correct''' response = self.client.get( reverse('reservations-filter-reservations-by-year', kwargs={ 'version': 'v1', 'year': timezone.now().year }), HTTP_AUTHORIZATION=utils.generate_token(self.super_user)) payload = response.data.get('payload') self.assertTrue(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_list_flights_filter_by_arrival_airport(self): '''List/Filter Flights - Valid :-Filter by Airports (Arrival)''' response = self.client.get(reverse('flights-list', kwargs={ 'version': 'v1', }), data={'destination': 'London Heathrow'}, HTTP_AUTHORIZATION=utils.generate_token( self.user)) payload = response.data.get('payload') self.assertTrue(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(payload), 1)
def test_list_reservations(self): '''List/Filter All Reservations - Valid :- Payload correct''' response = self.client.get(reverse('reservations-list', kwargs={ 'version': 'v1', }), HTTP_AUTHORIZATION=utils.generate_token( self.super_user)) payload = response.data.get('payload') self.assertTrue(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(payload.get('count'), 2) self.assertEqual(len(payload.get('results')), 2)
def test_list_flights_by_month_invalid_month(self): '''List/Filter Reservations by Month - Invalid :- Invalid Month''' response = self.client.get( reverse('reservations-filter-reservations-by-month', kwargs={ 'version': 'v1', 'year': timezone.now().year, 'month': 26 }), HTTP_AUTHORIZATION=utils.generate_token(self.super_user)) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual( response.data.get('errors').get('global'), 'Not a valid month.') self.assertEqual(response.data.get('message'), 'An error has occured.')
def test_make_reservation_for_flight_invalid_flight(self): '''Make Reservation for Flight - Invalid :- When Flight pk is of invalid type''' reservation_data = self.valid_reservation_data.copy() response = self.client.post(reverse('flights-reservations', kwargs={ 'version': 'v1', 'pk': 'WTA' }), data=reservation_data, HTTP_AUTHORIZATION=utils.generate_token( self.user)) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual(response.data.get('message'), 'An error has occured.')
def test_book_single_flight_for_user_when_return_airport_different(self): '''Book Flight for User Account - Invalid :- When Return Flight Lands in different city''' reservation_data = self.valid_reservation_data.copy() return_flight = create_single_flight( flight_number='0192', departure_airport='LOS', arrival_airport='JFK', expected_departure=timezone.now() + timedelta(days=1), expected_arrival=timezone.now() + timedelta(days=1, hours=12) ) reservation_data['return_flight'] = return_flight.id reservation_data['ticket_type'] = Reservation.RETURN response = self.client.post( reverse( 'account-reservations-reservations', kwargs={ 'version': 'v1', 'pk': self.user.account.id } ), data=reservation_data, HTTP_AUTHORIZATION=utils.generate_token(self.user) ) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual( response.data.get('errors').get('return_flight')['message'], 'Return Flight must land in same city as first flight.', ) self.assertEqual( response.data.get('errors').get('return_flight')['type'], 'invalid' ) self.assertEqual( response.data.get('errors').get('first_flight')['message'], 'Return Flight must land in same city as first flight.', ) self.assertEqual( response.data.get('errors').get('first_flight')['type'], 'invalid' )
def test_make_reservation_bad_permission(self): '''Make Reservation For self - Invalid :- When User does not have sufficient permission''' reservation_data = self.valid_reservation_data response = self.client.post(reverse('reservations-list', kwargs={ 'version': 'v1', }), data=reservation_data, HTTP_AUTHORIZATION=utils.generate_token( self.super_user)) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual( response.data.get('errors').get('global'), 'Insufficient Permission.') self.assertEqual(response.data.get('message'), 'An error has occured.')
def test_make_reservation_for_flight__flight_not_exist(self): '''Make Reservation for Flight - Invalid :- When Flight does not exist''' reservation_data = self.valid_reservation_data.copy() response = self.client.post(reverse('flights-reservations', kwargs={ 'version': 'v1', 'pk': uuid.uuid4() }), data=reservation_data, HTTP_AUTHORIZATION=utils.generate_token( self.user)) self.assertFalse(response.data.get('success')) self.assertEqual( response.data.get('errors').get('global'), 'No Flight matches the given query.') self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual(response.data.get('message'), 'An error has occured.')
def test_retrieve_reservation_by_email(self, mock_celery): '''Retrieve Reservation by Email - Valid : payload correct''' response = self.client.get( reverse('reservations-send-reservation-email', kwargs={ 'version': 'v1', 'pk': self.single_ticket_reservation.id, }), HTTP_AUTHORIZATION=utils.generate_token(self.user1)) payload = response.data.get('payload') self.assertTrue(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data.get('message'), 'Email Sent!.') self.assertEqual(payload.get('flight_class'), self.single_ticket_reservation.flight_class) self.assertTrue(mock_celery.assert_called_once, 1)
def test_schedule_airline_weekly_flights_bad_permission(self): '''Create Weekly Schedule Flight for Airline - Invalid :- When User does not have sufficient permission''' schedule_flight_data = self.flight_schedule response = self.client.post(reverse('airlines-weekly-schedule', kwargs={ 'version': 'v1', 'pk': 'BA' }), data=schedule_flight_data, HTTP_AUTHORIZATION=utils.generate_token( self.user)) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual( response.data.get('errors').get('global'), 'Insufficient Permission.') self.assertEqual(response.data.get('message'), 'An error has occured.')
def test_make_reservation_flight_not_exist(self): '''Make Reservation For self - Invalid :- When Flight does not exist''' reservation_data = self.valid_reservation_data.copy() del reservation_data['first_flight'] response = self.client.post(reverse('reservations-list', kwargs={ 'version': 'v1', }), data=reservation_data, HTTP_AUTHORIZATION=utils.generate_token( self.user)) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual( response.data.get('errors').get('first_flight')['message'], 'This field is required.') self.assertEqual( response.data.get('errors').get('first_flight')['type'], 'required')
def test_schedule_airline_weekly_flights_invalid_airline(self): '''Create Weekly Schedule Flight for Airline - Invalid :- When airline does not exist''' flight_data = self.flight_schedule.copy() del flight_data['time_of_flight'] response = self.client.post(reverse('airlines-weekly-schedule', kwargs={ 'version': 'v1', 'pk': 'BIH' }), data=flight_data, HTTP_AUTHORIZATION=utils.generate_token( self.super_user)) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual( response.data.get('errors').get('global'), 'No Airline matches the given query.') self.assertEqual(response.data.get('message'), 'An error has occured.')
def test_schedule_airline_weekly_flights_missing_fields(self): '''Create Weekly Schedule Flight for Airline - Invalid :- When Not all fields are sent in''' flight_data = self.flight_schedule.copy() del flight_data['period'] response = self.client.post(reverse('airlines-weekly-schedule', kwargs={ 'version': 'v1', 'pk': 'VA' }), data=flight_data, HTTP_AUTHORIZATION=utils.generate_token( self.super_user)) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual( response.data.get('errors').get('period')['message'], 'This field is required.') self.assertEqual( response.data.get('errors').get('period')['type'], 'required')
def test_make_reservation(self): '''Make Reservation For self - Valid :- When Information is Valid''' reservation_data = self.valid_reservation_data response = self.client.post(reverse('reservations-list', kwargs={ 'version': 'v1', }), data=reservation_data, HTTP_AUTHORIZATION=utils.generate_token( self.user)) self.assertTrue(response.data.get('success')) payload = response.data.get('payload') self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(payload.get('flight_class'), reservation_data.get('flight_class')) self.assertEqual( payload.get('reserved_by').get('full_name'), '{} {}'.format(self.user.first_name, self.user.last_name)) self.assertEqual(response.data.get('message'), 'Reservation made Successfully.')
def test_schedule_airline_single_flight(self): '''Schedule Single Flight for Airline - Valid :- When information provided okay''' flight_data = self.single_flight_schedule response = self.client.post(reverse('airlines-schedule', kwargs={ 'version': 'v1', 'pk': 'VS' }), data=flight_data, HTTP_AUTHORIZATION=utils.generate_token( self.super_user)) payload = response.data.get('payload') self.assertTrue(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(payload.get('flight_designation'), 'VS{}'.format(flight_data.get('flight_number'))) self.assertEqual(payload.get('departure_airport'), flight_data.get('departure_airport')) self.assertEqual(payload.get('arrival_airport'), flight_data.get('arrival_airport'))
def test_schedule_airline_weekly_flights_invalid_departure_airport(self): '''Create Weekly Schedule Flight for Airline - Invalid :- When departure airport does not exist''' flight_data = self.flight_schedule.copy() flight_data['departure_airport'] = 'USOSP' response = self.client.post(reverse('airlines-weekly-schedule', kwargs={ 'version': 'v1', 'pk': 'BA' }), data=flight_data, HTTP_AUTHORIZATION=utils.generate_token( self.super_user)) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual( response.data.get('errors').get('departure_airport')['message'], 'Invalid pk \"USOSP\" - object does not exist.') self.assertEqual( response.data.get('errors').get('departure_airport')['type'], 'does_not_exist')
def test_list_airlines_bad_permission(self): '''List/Filter Own Reservations - Invalid :- Insufficient Permissions''' response = self.client.get( reverse( 'account-reservations-reservations', kwargs={ 'version': 'v1', 'pk': self.super_user.account.id } ), HTTP_AUTHORIZATION=utils.generate_token(self.user) ) self.assertFalse(response.data.get('success')) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual( response.data.get('errors').get('global'), 'Insufficient Permission.' ) self.assertEqual( response.data.get('message'), 'An error has occured.' )