Exemplo n.º 1
0
 def test_user_stocks(self):
     self.create_user(username='******', password='******')
     token = Helper.token(1, 'newuser')
     headers = dict(Token=token)
     response = self.client.get('/users/stocks', headers=headers)
     self.assertEqual(response.status_code, 200)
     self.assertTrue('stocks' in response.json)
Exemplo n.º 2
0
        def wrapper(*args, **kwargs):
            symbol = request.view_args.get('symbol')
            volume = request.view_args.get('volume')
            stock = Stock.query.filter_by(symbol=symbol).first()

            if not stock:
                return jsonify(
                    dict(error='Symbol provided not yet support')), 404

            price = IEXCloud.price(symbol)
            if not price:
                return jsonify(
                    dict(error='Stock price could not be fetched')), 500

            if volume > stock.volume:
                return jsonify(
                    dict(
                        error='Shares volume is more than available stock volume'
                    )), 400

            total = Helper.amount(volume * price)
            amount = request.user.wallet.amount
            if total > amount:
                return jsonify(
                    dict(
                        error=
                        f'Wallet amount {amount} is less than the total price {total}'
                    )), 400

            request.symbol = symbol
            request.volume = volume
            request.stock = stock
            request.price = price
            request.total = total
            return func(*args, **kwargs)
Exemplo n.º 3
0
        def wrapper(*args, **kwargs):
            user_id = request.user.id
            symbol = request.view_args.get('symbol')
            volume = request.view_args.get('volume')
            stock = Stock.query.filter_by(symbol=symbol).first()

            if not stock:
                return jsonify(
                    dict(error='Symbol provided not yet support')), 404

            user_stock = UserStock.query.filter_by(user_id=user_id,
                                                   symbol=symbol).first()
            if not user_stock:
                return jsonify(
                    dict(error='No shares has been acquired for symbol')), 400

            price = IEXCloud.price(symbol)
            if not price:
                return jsonify(
                    dict(error='Stock price could not be fetched')), 500

            if volume > user_stock.volume:
                return jsonify(
                    dict(
                        error='Shares volume is more than available stock volume'
                    )), 400

            request.symbol = symbol
            request.volume = volume
            request.stock = stock
            request.user_stock = user_stock
            request.price = price
            request.total = Helper.amount(volume * price)
            return func(*args, **kwargs)
Exemplo n.º 4
0
 def test_verify_token(self):
     token = Helper.token(1, 'newuser')  # not user with token created using 'newuser'
     headers = dict(Token=token)
     data = dict(amount=10)
     response = self.client.post('/wallets/deposit', data=data, headers=headers)
     self.assertEqual(response.status_code, 401)
     self.assertTrue('error' in response.json)
     self.assertEqual(response.json['error'], 'Expects a valid token to be provided')
Exemplo n.º 5
0
 def test_deposit(self):
     self.create_user(username='******', password='******')
     token = Helper.token(1, 'newuser')
     headers = dict(Token=token)
     data = dict(amount=1000)
     response = self.client.post('/wallets/deposit', data=data, headers=headers)
     self.assertEqual(response.status_code, 200)
     self.assertTrue('total' in response.json)
     self.assertEqual(response.json['total'], 1000)
Exemplo n.º 6
0
        def wrapper(*args, **kwargs):
            token = request.headers.get('Token')
            payload = Helper.payload(token)
            if type(payload) is dict and 'username' in payload and 'id' in payload:
                user = User.query.filter_by(username=payload['username'], id=payload['id']).first()
                if user:
                    request.user = user
                    return func(*args, **kwargs)

            return jsonify(dict(error='Expects a valid token to be provided')), 401
Exemplo n.º 7
0
    def finalize_purchase(cls, request):
        user = request.user
        stock = request.stock
        symbol = request.symbol
        volume = request.volume
        price = request.price
        total = request.total

        request.user.wallet.amount = Helper.amount(user.wallet.amount - total)
        request.stock.volume = stock.volume - volume
        db.session.commit()
        cls.update_user_stock(user.id, symbol, volume)
        cls.update_transaction(user.id, symbol, volume, price, total,
                               'purchase')
Exemplo n.º 8
0
    def finalize_sell(cls, request):
        user = request.user
        stock = request.stock
        price = request.price
        total = request.total
        symbol = request.symbol
        volume = request.volume
        user_stock = request.user_stock

        request.user.wallet.amount = Helper.amount(user.wallet.amount + total)
        request.stock.volume = stock.volume + volume
        request.user_stock.volume = user_stock.volume - volume
        db.session.commit()
        cls.update_transaction(user.id, symbol, volume, price, total, 'sell')