예제 #1
0
    def test_list_orders_date_range_ok_response(
        self,
        mock_get_user_by_email_or_id,
        mock_get,
        mock_get_range_paginated_options_all,
        mock_get_location
    ):
        '''Test list_orders_date
        '''
        # Arrange
        with self.app.app_context():
            mock_get_location.return_value = 1
            mock_get_range_paginated_options_all.return_value.items = [
                self.mock_order,
            ]
            mock_get.return_value.meal_item_orders = [self.mock_meal_item, ]
            mock_get_user_by_email_or_id.return_value = {
                'id': 1,
                'mail': '*****@*****.**',
                'first_name': 'Joseph',
                'last_name': 'Serunjogi'
            }
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.list_orders_date_range(
                '2019-02-11', '2019-02-12'
            )

            # Assert
            assert result.status_code == 200
            assert result.get_json()['msg'] == 'OK'
예제 #2
0
    def test_create_order_ok_response(
        self,
        mock_order_controller_datetime,
        mock_create_order,
        mock_get_meals_by_ids,
        mock_datetime,
        mock_check_date_current_vs_date_for,
        mock_location_repo_get,
        mock_user_has_order,
        mock_request_params,
        mock_get_location,
        mock_auth_user
    ):
        '''Test create_order OK response.
        '''
        # Arrange
        with self.app.app_context():
            mock_order_controller_datetime.now = Mock(
                return_value=datetime(2019, 2, 13, 15, 0, 0)
            )
            mock_order_controller_datetime.strptime = Mock(
                return_value=datetime(2019, 2, 14, 13, 0, 0)
            )
            mock_datetime.utcnow = Mock(
                return_value=datetime(2019, 2, 13, 9, 0, 0)
            )
            mock_auth_user.return_value = {
                'id': 1,
                'mail': '*****@*****.**',
                'first_name': 'Joseph',
                'last_name': 'Serunjogi'
            }
            mock_get_location.return_value = 1
            mock_date_booked = Mock()
            mock_request_params.return_value = (
                mock_date_booked, 'web', 'lunch', [self.mock_meal_item, ], 1
            )
            mock_user_has_order.return_value = False
            mock_location_repo_get.return_value = Location(
                id=1,
                created_at=datetime.now,
                updated_at=datetime.now(),
                is_deleted=False,
                name='mock',
                zone='+3'
            )
            mock_check_date_current_vs_date_for.return_value = False
            mock_get_meals_by_ids.return_value = [self.mock_meal_item, ]
            mock_create_order.return_value = self.mock_order
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.create_order()

            # Assert
            assert result.status_code == 201
            assert result.get_json()['msg'] == 'OK'
예제 #3
0
    def test_create_order_when_booked_late(
        self,
        mock_order_controller_datetime,
        mock_datetime,
        mock_check_date_current_vs_date_for,
        mock_location_repo_get,
        mock_user_has_order,
        mock_request_params,
        mock_get_location,
        mock_auth_user
    ):
        '''Testing create_order when booked late.
        '''
        # Arrange
        with self.app.app_context():
            mock_order_controller_datetime.now = Mock(
                return_value=datetime(2019, 2, 13, 15, 0, 0)
            )
            mock_order_controller_datetime.strptime = Mock(
                return_value=datetime(2019, 2, 14, 13, 0, 0)
            )
            mock_datetime.utcnow = Mock(
                return_value=datetime(2019, 2, 13, 16, 0, 0)
            )
            mock_auth_user.return_value = {
                'id': 1,
                'mail': '*****@*****.**',
                'first_name': 'Joseph',
                'last_name': 'Serunjogi'
            }
            mock_get_location.return_value = 1
            mock_request_params.return_value = (
                Mock(), 'web', 'lunch', [self.mock_meal_item, ], 1
            )
            mock_user_has_order.return_value = False
            mock_location_repo_get.return_value = Location(
                id=1,
                created_at=datetime.now,
                updated_at=datetime.now(),
                is_deleted=False,
                name='mock',
                zone='+3'
            )
            mock_check_date_current_vs_date_for.return_value = True
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.create_order()

            # Assert
            assert result.status_code == 400
            assert result.get_json()['msg'] == 'It is too late to book a ' \
                'meal for the selected date '
예제 #4
0
    def test_get_order_when_order_doesnot_exist(self, mock_get):
        '''Test get_order when order doesnot exist.
        '''
        # Arrange
        with self.app.app_context():
            mock_get.return_value = None
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.get_order(1)

            # Assert
            assert result.status_code == 400
            assert result.get_json()['msg'] == 'Order not found'
예제 #5
0
    def test_delete_order_when_order_doesnot_exist(self, mock_order_repo_get):
        '''Test delete_order when the order doesnot exist.
        '''
        # Arrange
        with self.app.app_context():
            mock_order_repo_get.return_value = None
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.delete_order(1)

            # Assert
            assert result.status_code == 400
            assert result.get_json()['msg'] == 'Invalid or incorrect ' \
                'order_id provided'
예제 #6
0
    def test_check_order_ok_response(self, mock_find_first,
                                     mock_request_params):
        '''Test check_order OK response.
        '''
        # Arrange
        with self.app.app_context():
            mock_find_first.return_value = self.mock_order
            mock_request_params.return_value = (1, 'mock', '2019-02-13')
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.check_order()

            # Assert
            assert result.status_code == 200
            assert result.get_json()['msg'] == 'OK'
예제 #7
0
    def test_delete_order_when_order_is_already_deleted(
            self, mock_order_repo_get):
        '''Test delete_order when the order is already deleted.
        '''
        # Arrange
        with self.app.app_context():
            mock_order_repo_get.return_value = self.mock_deleted_order
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.delete_order(1)

            # Assert
            assert result.status_code == 400
            assert result.get_json()['msg'] == 'Order has already been' \
                ' deleted'
예제 #8
0
    def test_collect_order_when_order_already_collected(
            self, mock_find_first, mock_request_params):
        '''Test collect_order when order is already collected.
        '''
        # Arrange
        with self.app.app_context():
            mock_find_first.return_value = self.mock_collected_order
            mock_request_params.return_value = (1, 'mock', '2019-02-13')
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.collect_order()

            # Assert
            assert result.status_code == 400
            assert result.get_json()['msg'] == 'Order already collected'
예제 #9
0
    def test_check_order_when_order_doesnot_exist(self, mock_find_first,
                                                  mock_request_params):
        '''Test check_order when the order doesnot exist.
        '''
        # Arrange
        with self.app.app_context():
            mock_find_first.return_value = None
            mock_request_params.return_value = (1, 'breakfast', '2019-02-13')
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.check_order()

            # Assert
            assert result.status_code == 200
            assert result.get_json(
            )['msg'] == 'User has no breakfast order for this date'
예제 #10
0
    def test_collect_order_ok_response(self, mock_order_repo_update,
                                       mock_find_first, mock_request_params):
        '''Test collect_order OK response.
        '''
        # Arrange
        with self.app.app_context():
            mock_find_first.return_value = self.mock_order
            mock_request_params.return_value = (1, 'mock', '2029-02-13')
            mock_order_repo_update.return_value = self.mock_order
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.collect_order()

            # Assert
            assert result.status_code == 200
            assert result.get_json()['msg'] == 'Order successfully collected'
예제 #11
0
    def test_delete_order_ok_response(self, mock_order_repo_update,
                                      mock_order_repo_get, mock_auth_user):
        '''Test delete_order when the user deleting the order is not
        the owner.
        '''
        # Arrange
        with self.app.app_context():
            mock_auth_user.return_value = 1
            mock_order_repo_get.return_value = self.mock_order
            mock_order_repo_update.return_value = self.mock_order
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.delete_order(1)

            # Assert
            assert result.status_code == 200
            assert result.get_json()['msg'] == 'Order deleted'
예제 #12
0
    def test_delete_order_when_user_deleting_order_is_not_the_owner(
            self, mock_order_repo_get, mock_auth_user):
        '''Test delete_order when the user deleting the order is not
        the owner.
        '''
        # Arrange
        with self.app.app_context():
            mock_auth_user.return_value = 2
            mock_order_repo_get.return_value = self.mock_order
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.delete_order(1)

            # Assert
            assert result.status_code == 403
            assert result.get_json()['msg'] == 'You cannot delete an order' \
                ' that is not yours'
예제 #13
0
    def test_update_order_when_order_doesnot_exist(self, mock_order_repo_get,
                                                   mock_meal_item_repo_get,
                                                   mock_request_params):
        '''Test update_order when the order doesnot exists.
        '''
        # Arrange
        with self.app.app_context():
            mock_request_params.return_value = ('2019-02-12', 'web', [], None)
            mock_meal_item_repo_get.return_value = Mock()
            mock_order_repo_get.return_value = None
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.update_order(1)

            # Assert
            assert result.status_code == 400
            assert result.get_json()['msg'] == 'Invalid or incorrect order_id ' \
                'provided'
예제 #14
0
    def test_update_order_when_order_has_been_deleted(self,
                                                      mock_order_repo_get,
                                                      mock_meal_item_repo_get,
                                                      mock_request_params):
        '''Test update_order when the order has been deleted.
        '''
        # Arrange
        with self.app.app_context():
            mock_request_params.return_value = ('2019-02-12', 'web', [], None)
            mock_meal_item_repo_get.return_value = Mock()
            mock_order_repo_get.return_value.is_deleted = True
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.update_order(1)

            # Assert
            assert result.status_code == 400
            assert result.get_json()['msg'] == 'Order has already been deleted'
예제 #15
0
    def test_collect_order_when_user_has_no_order_for_date(
            self, mock_find_first, mock_request_params):
        '''Test collect_order when user has no order for date.
        '''
        # Arrange
        with self.app.app_context():
            mock_find_first.return_value = None
            mock_user_id = Mock(return_value=1)
            fake_order_id = Mock(return_value=1)
            mock_request_params.return_value = (mock_user_id, fake_order_id,
                                                '2019-02-13')
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.collect_order()

            # Assert
            assert result.status_code == 400
            assert result.get_json()['msg'] == f'User has no {fake_order_id}' \
                ' order for the date.'
예제 #16
0
    def test_get_order_ok_response(self, mock_get_user_by_email_or_id,
                                   mock_get):
        '''Test get_order OK response.
        '''
        # Arrange
        with self.app.app_context():
            mock_get.return_value = self.mock_order
            mock_get_user_by_email_or_id.return_value = {
                'id': '1',
                'mail': '*****@*****.**',
                'first_name': 'Joseph',
                'last_name': 'Serunjogi'
            }
            order_controller = OrderController(self.request_context)

            # Act
            result = order_controller.get_order(1)

            # Assert
            assert result.status_code == 200
            assert result.get_json()['msg'] == 'OK'
예제 #17
0
    def test_create_order_when_date_booked_is_in_past(
        self,
        mock_current_time_by_zone,
        mock_get,
        mock_user_has_order,
        mock_request_params,
        mock_get_location,
        mock_user
    ):
        '''Test create_date when the date booked is in the past.
        '''
        mock_user.return_value = {
            'id': 1,
            'mail': '*****@*****.**',
            'first_name': 'Joseph',
            'last_name': 'Serunjogi'
        }
        mock_get_location.return_value = Mock()
        mock_request_params.return_value = (
            '2019-02-01', 'web', 'lunch', [self.mock_meal_item, ], 1
        )
        mock_user_has_order.return_value = False
        mock_get.return_value = Location(
            id=1,
            created_at=datetime.now,
            updated_at=datetime.now(),
            is_deleted=False,
            name='mock',
            zone='+3'
        )
        mock_current_time_by_zone.return_value = Mock()
        order_controller = OrderController(self.request_context)

        # Act
        result = order_controller.create_order()

        # Assert
        assert result.status_code == 400
        assert result.get_json()['msg'] == 'You are not allowed to book for ' \
            'a date in the past'
예제 #18
0
def admin_orders(*args, **kwargs):
    user = kwargs['user']
    if user.role_id != ROLE['admin']:
        return Response(json.dumps({'message': 'unauthorized'}), status=401, mimetype='application/json')
    order_user = request.json['order_user'] if 'order_user' in request.json else None
    user = db.session.query(
            User).filter(or_(User.username.like(order_user), User.email.like(order_user))).first()
    if user is None:
        return json.dumps({
            'data': None,
            'meta': {
                'success': False,
                'message': 'User with specified email or username not found'
            }
        })
    return OrderController.create(request, user.as_dict())
예제 #19
0
from app.blueprints.base_blueprint import Blueprint, BaseBlueprint, Security, request
from app.controllers.order_controller import OrderController
from app.utils.auth import Auth
from flasgger import swag_from

url_prefix = '{}/orders'.format(BaseBlueprint.base_url_prefix)
order_blueprint = Blueprint('order', __name__, url_prefix=url_prefix)
order_controller = OrderController(request)


@order_blueprint.route('/', methods=['GET'])
@Auth.has_permission('view_orders')
@swag_from('documentation/get_all_orders.yml')
def list_order():
    return order_controller.list_orders()


@order_blueprint.route('/<date:start_date>', methods=['GET'])
@Auth.has_permission('view_orders')
@swag_from('documentation/get_orders_by_date.yml')
def list_orders_date(start_date):
    return order_controller.list_orders_date(start_date)


@order_blueprint.route('/<date:start_date>/<date:end_date>', methods=['GET'])
@Auth.has_permission('view_orders')
@swag_from('documentation/get_orders_by_date_range.yml')
def list_orders_date_range(start_date, end_date):
    return order_controller.list_orders_date_range(start_date, end_date)

예제 #20
0
def ban_order(id, *args, **kwargs):
    return OrderController.ban(id)
예제 #21
0
def orders_id(id, *args, **kwargs):
    if(request.method == 'GET'):
        return OrderController.show(id)
    elif(request.method == 'DELETE'):
        return OrderController.delete(id)
예제 #22
0
def admin_verify_order(id, *args, **kwargs):
    return OrderController.verify_order(id, request)
예제 #23
0
def admin_verifyorders(*args, **kwargs):
    return OrderController.unverified_order()
예제 #24
0
파일: api.py 프로젝트: devsummit/backend
def orders(*args, **kwargs):
    user_id = kwargs['user'].id
    if(request.method == 'GET'):
        return OrderController.index(user_id)
    elif(request.method == 'POST'):
        return OrderController.create(request, user_id)