def test_create_order_rating_when_engagement_doesnot_exist( self, mock_vendor_engagement_repo_get, mock_meal_item_repo_get, mock_auth_user, mock_vendor_rating_controller_request_params): '''Test create order rating when engagement does not exist. ''' # Arrange with self.app.app_context(): mock_meal_item = MealItem(id=1, created_at=datetime.now(), updated_at=datetime.now(), meal_type='main', name='Mock meal', image='', location_id=1) mock_vendor_rating_controller_request_params.return_value = (None, None, None, None, 3, None, None) mock_auth_user.return_value = 1 mock_meal_item_repo_get.return_value = mock_meal_item mock_vendor_engagement_repo_get.return_value = None vendor_rating_controller = VendorRatingController( self.request_context) # Act result = vendor_rating_controller.create_order_rating() # Assert assert result.status_code == 400 assert result.get_json()['msg'] == 'Engagement with this id is' \ ' not found'
def test_update_vendor_rating_ok_response( self, mock_auth_user, mock_vendor_rating_controller_get_json, mock_vendor_rating_repo_get, mock_vendor_rating_repo_update): '''Test update_vendor_rating when rating is forbidden. ''' # Arrange with self.app.app_context(): mock_auth_user.return_value = 1 mock_vendor_rating_controller_get_json.return_value = { 'comment': 'Mock comment' } mock_vendor_rating = VendorRating(id=1, created_at=datetime.now(), updated_at=datetime.now(), vendor_id=1, user_id=1, comment='Mock comment', service_date=datetime.now(), rating=3.0, channel='web', rating_type='meal', type_id=1, engagement_id=1, main_meal_id=1) mock_vendor_rating_repo_get.return_value = mock_vendor_rating mock_vendor_rating_repo_update.return_value = mock_vendor_rating vendor_rating_controller = VendorRatingController( self.request_context) # Act result = vendor_rating_controller.update_vendor_rating(1) # Assert assert result.status_code == 200 assert result.get_json()['msg'] == 'OK'
def test_create_vendor_rating_when_vendor_doesnot_exist( self, mock_vendor_repo_get, mock_auth_user, mock_vendor_rating_controller_request_params, mock_vendor_engagement_repo_get): '''Test create_vendor_rating when vendor doesnot exist. ''' # Arrange with self.app.app_context(): mock_vendor_repo_get.return_value = None mock_vendor_rating_controller_request_params.return_value = (None, None, None, None, None) mock_auth_user.return_value = None mock_vendor_repo_get.return_value = None mock_vendor_engagement_repo_get.return_value.vendor_id = None vendor_rating_controller = VendorRatingController( self.request_context) # Act result = vendor_rating_controller.create_vendor_rating() # Assert assert result.status_code == 400 assert result.get_json()['msg'] == 'Invalid vendor_id provided'
def test_create_order_rating_when_meal_item_doesnot_exist( self, mock_meal_item_repo_get, mock_auth_user, mock_vendor_rating_controller_request_params): '''Test create_order_rating when meal item does not exist. ''' # Arrange with self.app.app_context(): mock_vendor_rating_controller_request_params.return_value = (None, None, None, None, 3, None, None) mock_auth_user.return_value = 1 mock_meal_item_repo_get.return_value = None vendor_rating_controller = VendorRatingController( self.request_context) # Act result = vendor_rating_controller.create_order_rating() # Assert assert result.status_code == 400 assert result.get_json()['msg'] == 'Meal item with this id not ' \ 'found'
def test_update_vendor_rating_when_rating_is_invalid( self, mock_vendor_rating_repo_get, mock_vendor_rating_controller_get_json ): '''Test update_vendor_rating when rating is invalid. ''' # Arrange with self.app.app_context(): mock_rating_id = 1 mock_vendor_rating_controller_get_json.return_value = { 'comment': 'Mock comment' } mock_vendor_rating_repo_get.return_value = None vendor_rating_controller = VendorRatingController( self.request_context ) # Act result = vendor_rating_controller.update_vendor_rating( mock_rating_id ) # Assert assert result.status_code == 404 assert result.get_json()['msg'] == 'Invalid or incorrect ' \ 'rating_id provided'
def test_get_vendor_rating_ok_response(self, mock_vendor_rating_repo_get): '''Test get_vendor_rating OK response. ''' # Arrange with self.app.app_context(): mock_vendor_rating = VendorRating(vendor_id=1, user_id=1, comment='Mock comment', service_date=datetime.now(), rating=1.0, channel='Mock channel', rating_type='engagement', type_id=0, engagement_id=1, id=1, created_at=datetime.now(), updated_at=datetime.now(), main_meal_id=1) mock_vendor_rating_repo_get.return_value = mock_vendor_rating vendor_rating_controller = VendorRatingController( self.request_context) # Act result = vendor_rating_controller.get_vendor_rating(1) # Assert assert result.status_code == 200 assert result.get_json()['msg'] == 'OK'
def test_create_order_rating_when_meal_already_rated( self, mock_vendor_engagement_repo_get, mock_meal_item_repo_get, mock_auth_user, mock_vendor_rating_controller_request_params, mock_vendor_rating_repo_get_unpaginated): '''Test create_order_rating when order has already been rated. ''' # Arrange with self.app.app_context(): mock_meal_item = MealItem(id=1, created_at=datetime.now(), updated_at=datetime.now(), meal_type='main', name='Mock meal', image='', location_id=1) mock_vendor_engagement = VendorEngagement( id=1, created_at=datetime.now(), updated_at=datetime.now(), vendor_id=1, location_id=1, start_date=datetime.now(), end_date=(datetime.now() + timedelta(days=5)), status=1, termination_reason='Mock reason') mock_vendor_rating = VendorRating(id=1, created_at=datetime.now(), updated_at=datetime.now(), vendor_id=1, user_id='user_id', comment='Mock comment', service_date=datetime.now(), rating=3.0, channel='web', rating_type='meal', type_id=1, engagement_id=1, main_meal_id=1) service_date = datetime.strftime( (datetime.now() - timedelta(1)).date(), '%Y-%m-%d') mock_vendor_rating_controller_request_params.return_value = ( None, None, None, None, 3, service_date, None) mock_auth_user.return_value = 1 mock_meal_item_repo_get.return_value = mock_meal_item mock_vendor_engagement_repo_get.return_value = \ mock_vendor_engagement mock_vendor_rating_repo_get_unpaginated.return_value = [ mock_vendor_rating, ] vendor_rating_controller = VendorRatingController( self.request_context) # Act result = vendor_rating_controller.create_order_rating() # Assert assert result.status_code == 400 assert result.get_json()['msg'] == 'You have already rated' \ ' this meal'
def test_create_order_rating_when_order_already_rated( self, mock_vendor_engagement_repo_get, mock_meal_item_repo_get, mock_auth_user, mock_vendor_rating_controller_request_params, mock_order_repo_get): '''Test create_order_rating when order has already been rated. ''' # Arrange with self.app.app_context(): mock_meal_item = MealItem(id=1, created_at=datetime.now(), updated_at=datetime.now(), meal_type='main', name='Mock meal', image='', location_id=1) mock_vendor_engagement = VendorEngagement( id=1, created_at=datetime.now(), updated_at=datetime.now(), vendor_id=1, location_id=1, start_date=datetime.now(), end_date=(datetime.now() + timedelta(days=5)), status=1, termination_reason='Mock reason') mock_order = Order(id=1, created_at=datetime.now(), updated_at=datetime.now(), user_id='user_id', date_booked_for=datetime.now(), date_booked=datetime.now(), channel='web', meal_period='lunch', order_status='booked', has_rated=True, menu_id=1, location_id=1) mock_vendor_rating_controller_request_params.return_value = (1, None, None, None, 3, None, None) mock_auth_user.return_value = 1 mock_meal_item_repo_get.return_value = mock_meal_item mock_vendor_engagement_repo_get.return_value = \ mock_vendor_engagement mock_order_repo_get.return_value = mock_order vendor_rating_controller = VendorRatingController( self.request_context) # Act result = vendor_rating_controller.create_order_rating() # Assert assert result.status_code == 400 assert result.get_json()['msg'] == 'This order has been rated'
def test_list_ratings_with_missing_main_meal_id_succeeds( self, mock_vendor_rating_repo_meal_average, mock_meal_item_repo_get, mock_vendor_repo_get, mock_vendor_rating_repo_filter_by, mock_vendor_rating_controler_get_params_dict): '''Test list_ratings OK response. ''' # Arrange with self.app.app_context(): mock_vendor_rating_1 = VendorRating(vendor_id=1, user_id=1, comment='Mock comment', service_date=datetime.now(), rating=1.0, channel='Mock channel', rating_type='engagement', type_id=0, engagement_id=1, id=1, created_at=datetime.now(), updated_at=datetime.now(), main_meal_id=1) mock_vendor_rating_2 = VendorRating(vendor_id=1, user_id=1, comment='Mock comment', service_date=datetime.now(), rating=1.0, channel='Mock channel', rating_type='engagement', type_id=0, engagement_id=1, id=1, created_at=datetime.now(), updated_at=datetime.now(), main_meal_id=None) mock_vendor_rating_repo_filter_by.return_value.items = [ mock_vendor_rating_1, mock_vendor_rating_2 ] mock_vendor_rating_controler_get_params_dict.return_value = {} mock_vendor_repo_get.return_value.name = 'Mock vender' mock_meal_item_repo_get.return_value.name = 'Mock meal name' mock_vendor_rating_repo_meal_average.return_value = 2.0 vendor_rating_controller = VendorRatingController( self.request_context) # Act result = vendor_rating_controller.list_ratings('2019-02-06') # Assert assert result.status_code == 200 assert result.get_json()['msg'] == 'OK' assert len(result.get_json()['payload']['result'][0]['items']) == 1
def test_create_order_rating_when_order_doesnot_exist( self, mock_vendor_engagement_repo_get, mock_meal_item_repo_get, mock_auth_user, mock_vendor_rating_controller_request_params, mock_order_repo_get ): '''Test create_order_rating when order doesnot exist. ''' # Arrange with self.app.app_context(): mock_meal_item = MealItem( id=1, created_at=datetime.now(), updated_at=datetime.now(), meal_type='main', name='Mock meal', image='', location_id=1 ) mock_vendor_engagement = VendorEngagement( id=1, created_at=datetime.now(), updated_at=datetime.now(), vendor_id=1, location_id=1, start_date=datetime.now(), end_date=(datetime.now() + timedelta(days=5)), status=1, termination_reason='Mock reason' ) mock_vendor_rating_controller_request_params.return_value = ( 1, None, None, None, 3, None, None ) mock_auth_user.return_value = 1 mock_meal_item_repo_get.return_value = mock_meal_item mock_vendor_engagement_repo_get.return_value = \ mock_vendor_engagement mock_order_repo_get.return_value = None vendor_rating_controller = VendorRatingController( self.request_context ) # Act result = vendor_rating_controller.create_order_rating() # Assert assert result.status_code == 400 assert result.get_json()['msg'] == 'Order with this id is not' \ ' found'
def test_create_vendor_rating_ok_response( self, mock_vendor_repo_get, mock_auth_user, mock_vendor_rating_controller_request_params, mock_vendor_engagement_repo_get, mock_vendor_rating_repo_new_rating, mock_vendor_rating_repo_update_vendor_average_rating): '''Test create_vendor_rating OK response. ''' # Arrange with self.app.app_context(): mock_vendor = Vendor(id=1, created_at=datetime.now(), updated_at=datetime.now(), name='Mock vendor', address='Mock address', tel='', contact_person='Mock contact person', is_active=True, location_id=1) mock_vendor_rating = VendorRating(vendor_id=1, user_id=1, comment='Mock comment', service_date=datetime.now(), rating=1.0, channel='Mock channel', rating_type='engagement', type_id=0, engagement_id=1, id=1, created_at=datetime.now(), updated_at=datetime.now(), main_meal_id=1) mock_vendor_repo_get.return_value = mock_vendor mock_auth_user.return_value = 1 mock_vendor_rating_controller_request_params.return_value = ( 'Mock comment', 2.0, '2019-02-01', 'Mock channel', 1) mock_vendor_engagement_repo_get.return_value.vendor_id = 1 mock_vendor_rating_repo_new_rating \ .return_value = mock_vendor_rating vendor_rating_controller = VendorRatingController( self.request_context) mock_vendor_rating_repo_update_vendor_average_rating.return_value = None # Act result = vendor_rating_controller.create_vendor_rating() # Assert assert result.status_code == 201 assert result.get_json()['msg'] == 'Rating created'
def test_get_vendor_rating_when_rating_doesnot_exist( self, mock_vendor_rating_repo_get): '''Test get_vendor_rating when the rating does not exist. ''' # Arrange with self.app.app_context(): mock_vendor_rating_repo_get.return_value = None vendor_rating_controller = VendorRatingController( self.request_context) # Act result = vendor_rating_controller.get_vendor_rating(1) # Assert assert result.status_code == 400 assert result.get_json()['msg'] == 'Bad Request'
def test_list_ratings_no_ratings_for_date( self, mock_vendor_rating_repo_filter_by, mock_vendor_rating_controler_get_params_dict): '''Test list_ratings response when there are no ratings for the given date. ''' # Arrange with self.app.app_context(): mock_vendor_rating_repo_filter_by.return_value.items = None mock_vendor_rating_controler_get_params_dict.return_value = {} mock_date = '2019-02-05' vendor_rating_controller = VendorRatingController( self.request_context) # Act result = vendor_rating_controller.list_ratings(mock_date) # Assert assert result.status_code == 404 assert result.get_json()['msg'] == 'No ratings for this date'
def test_create_order_rating_when_rating_invalid( self, mock_vendor_rating_controller_request_params ): '''Test create_order_rating when rating is invalid. ''' # Arrange with self.app.app_context(): mock_vendor_rating_controller_request_params.return_value = ( None, None, None, None, 6, None, None ) vendor_rating_controller = VendorRatingController( self.request_context ) # Act result = vendor_rating_controller.create_order_rating() # Assert result.status_code == 400 result.get_json()['msg'] == 'Rating must be between 1 and 5' \ ', inclusive'
from flasgger import swag_from from app.blueprints.base_blueprint import Blueprint, BaseBlueprint, request, Security, Auth from app.controllers.vendor_rating_controller import VendorRatingController from app.utils.auth import Auth rating_blueprint = Blueprint('rating', __name__, url_prefix='{}/ratings'.format( BaseBlueprint.base_url_prefix)) vendor_rating_controller = VendorRatingController(request) @rating_blueprint.route('/vendor/<int:vendor_id>', methods=['GET']) @Auth.has_permission('view_ratings') @swag_from('documentation/get_vendor_ratings.yml') def list_ratings(vendor_id): '''Gets all the ratings for a given vendor''' return vendor_rating_controller.list_ratings(vendor_id) @rating_blueprint.route('/<int:rating_id>', methods=['GET']) @Auth.has_permission('view_ratings') @swag_from('documentation/get_vendor_rating_by_id.yml') def get_vendor_rating(rating_id): return vendor_rating_controller.get_vendor_rating(rating_id) @rating_blueprint.route('/', methods=['POST']) @Security.validator([
def test_create_order_rating_ok_response( self, mock_vendor_engagement_repo_get, mock_meal_item_repo_get, mock_auth_user, mock_vendor_rating_controller_request_params, mock_order_repo_get, mock_vendor_repo_update_average_rating ): '''Test create_order_rating when order has already been rated. ''' # Arrange vendor = VendorFactory() location = LocationFactory() vendor_engagement = VendorEngagementFactory() meal_item = MealItemFactory() menu = MenuFactory() with self.app.app_context(): mock_meal_item = MealItem( id=1, created_at=datetime.now(), updated_at=datetime.now(), meal_type='main', name='Mock meal', image='', location_id=location.id ) mock_vendor_engagement = VendorEngagement( id=1, created_at=datetime.now(), updated_at=datetime.now(), vendor_id=vendor.id, location_id=location.id, start_date=datetime.now(), end_date=(datetime.now() + timedelta(days=5)), status=1, termination_reason='Mock reason' ) mock_order = Order( id=1, created_at=datetime.now(), updated_at=datetime.now(), user_id='user_id', date_booked_for=datetime.now(), date_booked=datetime.now(), channel='web', meal_period='lunch', order_status='booked', has_rated=False, menu_id=menu.id, location_id=location.id ) mock_vendor_rating_controller_request_params.return_value = ( 2, meal_item.id, vendor_engagement.id, 'Mock comment', 3, '2019-02-06', 'web' ) mock_auth_user.return_value = 1 mock_meal_item_repo_get.return_value = mock_meal_item mock_vendor_engagement_repo_get.return_value = \ mock_vendor_engagement mock_order_repo_get.return_value = mock_order vendor_rating_controller = VendorRatingController( self.request_context ) mock_vendor_repo_update_average_rating.return_value = None # Act result = vendor_rating_controller.create_order_rating() # Assert assert result.status_code == 201 assert result.get_json()['msg'] == 'Rating successful'