Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
self.assertEqual(order.quantity, 3) # Should be 15 - (8 + 4)
self.assertEqual(order.unit_price, 650) # Unchanged
# Get the filled orders.
order_1 = Order.objects.get(pk=9) # The 325 S
order_2 = Order.objects.get(pk=3) # The 650 S
self.assertEqual(order_1.filled, True)
self.assertEqual(order_2.filled, True)
self.assertEqual(order_1.filled_by, user)
self.assertEqual(order_2.filled_by, user)
# Fetch new updated future.
future = Future.objects.get(pk=4)
self.assertEqual(future.last_buy, 600)
self.assertEqual(future.bid, 650)
self.assertEqual(future.ask, None)
self.assertEqual(future.volume, 12)
history = FutureHistory.objects.filter(future=future)
logger.debug(history)
self.assertEqual(history.count(), 2)
self.assertEqual(history[0].price, 325)
self.assertEqual(history[1].price, 600)
transactions = SuccessfulTransaction.objects.filter(future=future)
self.assertEqual(transactions.count(), 2)
self.assertTrue(self.compare_transactions(
transactions[0], SuccessfulTransaction(
buyer=user, seller=order_1.creator, future=future,
quantity=4, unit_price=325)))
self.assertTrue(self.compare_transactions(
transactions[1], SuccessfulTransaction(
buyer=user, seller=order_2.creator, future=future,
quantity=8, unit_price=600)))
# Wallets.
order = Order.objects.all().order_by('-pk')[0] # My sell.
order_1 = Order.objects.get(pk=11) # 15@275
order_2 = Order.objects.get(pk=5) # 75@100
self.assertEqual(order_1.filled, True)
self.assertEqual(order_2.filled, True)
self.assertEqual(order.filled, False)
self.assertEqual(order.quantity, 3)
self.assertEqual(order_1.filled_by, user)
self.assertEqual(order_2.filled_by, user)
future = Future.objects.get(pk=4)
self.assertEqual(future.last_buy, 100)
self.assertEqual(future.ask, 95) # Lowest sale order, my own
self.assertEqual(future.bid, None) # Highest buy order
self.assertEqual(future.volume, 90)
# History
history = FutureHistory.objects.filter(future=future)
self.assertEqual(history.count(), 2)
self.assertEqual(history[0].price, 275)
self.assertEqual(history[1].price, 100) # Got the highest then lowest.
transactions = SuccessfulTransaction.objects.filter(future=future)
self.assertEqual(transactions.count(), 2)
self.assertTrue(self.compare_transactions(
transactions[0], SuccessfulTransaction(
buyer=order_1.creator, seller=user, future=future,
quantity=15, unit_price=275)))
self.assertTrue(self.compare_transactions(
transactions[1], SuccessfulTransaction(
buyer=order_2.creator, seller=user, future=future,
quantity=75, unit_price=100)))
# Wallets
wallet = Wallet.objects.get(user=user)
wallet_1 = Wallet.objects.get(user=order_1.creator)
wallet.points = 11000
wallet.save()
response = process_order(11, 140, wallet, 'sell', future)
order = Order.objects.all().order_by('-pk')[0]
order_1 = Order.objects.get(pk=1) # Buy 10@155
self.assertEqual(order_1.filled, True)
self.assertEqual(order.filled, False)
self.assertEqual(order.quantity, 1)
self.assertEqual(order_1.filled_by, user)
### Future
future = Future.objects.get(pk=1)
self.assertEqual(future.last_buy, 155)
self.assertEqual(future.ask, 140)
self.assertEqual(future.bid, None)
self.assertEqual(future.volume, 10)
history = FutureHistory.objects.filter(future=future)
logger.debug(history)
self.assertEqual(history.count(), 1)
self.assertEqual(history[0].price, 155)
transactions = SuccessfulTransaction.objects.filter(future=future)
self.assertEqual(transactions.count(), 1)
self.assertTrue(self.compare_transactions(
transactions[0], SuccessfulTransaction(
buyer=order_1.creator, seller=user, future=future,
quantity=10, unit_price=155)))
# Wallets.
wallet = Wallet.objects.get(user=user)
wallet_1 = Wallet.objects.get(user=order_1.creator)
key = '%s' % future.pk
self.assertEqual(json.loads(wallet_1.shares_owned)[key], 10)
self.assertEqual(wallet.points, 11000 + (10 * 155))
self.assertEqual(wallet_1.points, 10000 - (10 * 155))
order_1 = Order.objects.get(pk=9) # 4@325
order_2 = Order.objects.get(pk=3) # 8@600
self.assertEqual(order_1.filled, True)
self.assertEqual(order_2.filled, False)
self.assertEqual(order.filled, True)
self.assertEqual(order.filled_by, order_2.creator)
self.assertEqual(order_2.quantity, 5) # 3 got bought
self.assertEqual(order_1.filled_by, user)
self.assertEqual(order_2.filled_by, None)
future = Future.objects.get(pk=4)
self.assertEqual(future.last_buy, 600)
self.assertEqual(future.ask, 600) # Lowest sale order
self.assertEqual(future.bid, 275) # Highest buy order
self.assertEqual(future.volume, 7)
# History
history = FutureHistory.objects.filter(future=future)
self.assertEqual(history.count(), 2)
# Lowest then highest.
self.assertEqual(history[0].price, 325)
self.assertEqual(history[1].price, 600)
transactions = SuccessfulTransaction.objects.filter(future=future)
self.assertEqual(transactions.count(), 2)
self.assertTrue(self.compare_transactions(
transactions[0], SuccessfulTransaction(
buyer=user, seller=order_1.creator, future=future,
quantity=4, unit_price=325)))
self.assertTrue(self.compare_transactions(
transactions[1], SuccessfulTransaction(
buyer=user, seller=order_2.creator, future=future,
quantity=3, unit_price=600)))
# Wallets
wallet = Wallet.objects.get(user=user)
wallet.shares_owned = """{"1": 7, "4": 10}"""
future = Future.objects.get(pk=1)
response = process_order(4, 150, wallet, 'sell', future)
# Someone wants to buy 10@155
order = Order.objects.all().order_by('-pk')[0]
order_1 = Order.objects.get(pk=1) # Buy 10@155
self.assertEqual(order_1.filled, False)
self.assertEqual(order.filled, True)
self.assertEqual(order_1.quantity, 6)
self.assertEqual(order.filled_by, order_1.creator)
future = Future.objects.get(pk=1)
self.assertEqual(future.last_buy, 155)
self.assertEqual(future.ask, 600)
self.assertEqual(future.bid, 155)
self.assertEqual(future.volume, 4)
history = FutureHistory.objects.filter(future=future)
self.assertEqual(history.count(), 1)
self.assertEqual(history[0].price, 155)
transactions = SuccessfulTransaction.objects.filter(future=future)
self.assertEqual(transactions.count(), 1)
self.assertTrue(self.compare_transactions(
transactions[0], SuccessfulTransaction(
buyer=order_1.creator, seller=user, future=future,
quantity=4, unit_price=155)))
# Wallets
wallet = Wallet.objects.get(user=user)
wallet_1 = Wallet.objects.get(user=order_1.creator)
key = '%s' % future.pk
self.assertEqual(json.loads(wallet.shares_owned)[key], 3)
self.assertEqual(json.loads(wallet_1.shares_owned)[key], 4)
self.assertEqual(json.loads(wallet.shares_owned)['4'], 10) # Unchanged.
self.assertEqual(wallet_1.points, 10000 - (4 * 155))