122 lines
4.4 KiB
Python
122 lines
4.4 KiB
Python
from django.test import TestCase
|
|
from trading.models import User, Commodity, TxRequest, BalanceError
|
|
|
|
|
|
class TestTransactions(TestCase):
|
|
def test_tx_requests(self):
|
|
# Create users
|
|
user1 = User.objects.create_user(username="test1", email="test1@test.test")
|
|
user2 = User.objects.create_user(username="test2", email="test2@test.test")
|
|
|
|
# Create test commodity for user1
|
|
com1 = Commodity(created_by=user1, in_circulation=1000, name="test1", symbol="TEST1")
|
|
com1.save()
|
|
|
|
# Create test commodity for user2
|
|
com2 = Commodity(created_by=user2, in_circulation=1000, name="test2", symbol="TEST2")
|
|
com2.save()
|
|
|
|
# Create TX request
|
|
req1 = TxRequest.open(user1, user2, com1, com2, 10, 10)
|
|
|
|
# Confirm balances
|
|
self.assertEqual(user1.balance_of(com1), 990)
|
|
self.assertEqual(user1.balance_of(com2), 0)
|
|
self.assertEqual(user2.balance_of(com1), 0)
|
|
self.assertEqual(user2.balance_of(com2), 1000)
|
|
|
|
# Accept TX request
|
|
req1.accept()
|
|
|
|
# Confirm balances
|
|
self.assertEqual(user1.balance_of(com1), 990)
|
|
self.assertEqual(user1.balance_of(com2), 10)
|
|
self.assertEqual(user2.balance_of(com1), 10)
|
|
self.assertEqual(user2.balance_of(com2), 990)
|
|
|
|
# Create TX request
|
|
req2 = TxRequest.open(user2, user1, com2, com1, 10, 10)
|
|
|
|
# Confirm balances
|
|
self.assertEqual(user1.balance_of(com1), 990)
|
|
self.assertEqual(user1.balance_of(com2), 10)
|
|
self.assertEqual(user2.balance_of(com1), 10)
|
|
self.assertEqual(user2.balance_of(com2), 980)
|
|
|
|
# Decline TX request
|
|
req2.decline()
|
|
|
|
# Confirm balances
|
|
self.assertEqual(user1.balance_of(com1), 990)
|
|
self.assertEqual(user1.balance_of(com2), 10)
|
|
self.assertEqual(user2.balance_of(com1), 10)
|
|
self.assertEqual(user2.balance_of(com2), 990)
|
|
|
|
# Ensure assertions on already created TXs
|
|
with self.assertRaises(AssertionError):
|
|
req1.accept()
|
|
with self.assertRaises(AssertionError):
|
|
req1.decline()
|
|
with self.assertRaises(AssertionError):
|
|
req2.accept()
|
|
with self.assertRaises(AssertionError):
|
|
req2.decline()
|
|
|
|
# Balance checking
|
|
# Ensure whoever opens the request has the balance available
|
|
with self.assertRaises(BalanceError):
|
|
TxRequest.open(user1, user2, com2, com1, 100, 100)
|
|
|
|
# Ensure whoever tries to accept the request has the balance available
|
|
req3 = TxRequest.open(user1, user2, com2, com1, 10, 100)
|
|
with self.assertRaises(BalanceError):
|
|
req3.accept()
|
|
|
|
# And make sure you can still decline it after failing to accept it.
|
|
req3.decline()
|
|
|
|
|
|
class TestCommodities(TestCase):
|
|
def test_commodity_stats(self):
|
|
# Create users
|
|
user1 = User.objects.create_user(username="test1", email="test1@test.test")
|
|
user2 = User.objects.create_user(username="test2", email="test2@test.test")
|
|
|
|
# Create test commodity for user1
|
|
com1 = Commodity(created_by=user1, in_circulation=1000, name="test1", symbol="TEST1")
|
|
com1.save()
|
|
|
|
# Create test commodity for user2
|
|
com2 = Commodity(created_by=user2, in_circulation=1000, name="test2", symbol="TEST2")
|
|
com2.save()
|
|
|
|
# Ensure stats are correct
|
|
self.assertEqual(com1.amount_pending, 0)
|
|
self.assertEqual(com2.amount_pending, 0)
|
|
self.assertEqual(com1.trading_volume(), 0)
|
|
self.assertEqual(com2.trading_volume(), 0)
|
|
self.assertEqual(com1.market_spread, 1)
|
|
self.assertEqual(com2.market_spread, 1)
|
|
|
|
# Create TX request
|
|
req1 = TxRequest.open(user1, user2, com1, com2, 10, 100)
|
|
|
|
# Ensure trading volume is correct
|
|
self.assertEqual(com1.amount_pending, 10)
|
|
self.assertEqual(com2.amount_pending, 0)
|
|
self.assertEqual(com1.trading_volume(), 0)
|
|
self.assertEqual(com2.trading_volume(), 0)
|
|
self.assertEqual(com1.market_spread, 1)
|
|
self.assertEqual(com2.market_spread, 1)
|
|
|
|
# Accept trade
|
|
req1.accept()
|
|
|
|
# Ensure amount pending is correct
|
|
self.assertEqual(com1.amount_pending, 0)
|
|
self.assertEqual(com2.amount_pending, 0)
|
|
self.assertEqual(com1.trading_volume(), 10)
|
|
self.assertEqual(com2.trading_volume(), 100)
|
|
self.assertEqual(com1.market_spread, 2)
|
|
self.assertEqual(com2.market_spread, 2)
|