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)
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)
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)
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')
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)
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
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')
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')