GOSTCoin Web Wallet
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

191 lines
7.7 KiB

from django.test import TestCase, SimpleTestCase
from unittest.mock import MagicMock
from django.contrib.auth.models import User
from django.conf import settings
from decimal import Decimal
from wallet.models import Account, Address, DepositTransaction
from wallet.forms import SendCoins
from wallet.tasks import check_received_transactions, check_confirmed_transactions
from wallet.tests.fake_data import DEMO_TRANSACTIONS, DEMO_UNSPENT, DEMO_DATA_1
from wallet import gostcoin
from integral_auth.utils import rand_string
class SendCoinsFormTests(TestCase):
def setUp(self):
self.user = User.objects.create_user("tester", password="asdasdasd")
Account.objects.create(user=self.user, name="A2aac03D5F5Adae0")
def test_valid_data(self):
form = SendCoins({"recipient": "GPem1MVc49r7dxsUDL4sKFvq79rCtqs5Sx",
"amount": "0.1"})
self.assertTrue(form.is_valid())
form = SendCoins({"recipient": self.user.account.name, "amount": "1"})
self.assertTrue(form.is_valid())
def test_invalid_data(self):
form = SendCoins({})
self.assertFalse(form.is_valid())
form = SendCoins({"recipient": self.user.account.name})
self.assertFalse(form.is_valid())
form = SendCoins({"recipient": self.user.account.name, "amount": ""})
self.assertFalse(form.is_valid())
form = SendCoins({"amount": "1"})
self.assertFalse(form.is_valid())
form = SendCoins({"recipient": "GPem1MVc49r7dxsUDL4sKFvq79rCtqs5Sx",
"amount": "aaaa"})
self.assertFalse(form.is_valid())
form = SendCoins({"recipient": "GPem1MVc49r7dxsUDL4sKFvq79rCtqs5Sx",
"amount": "0.000000001"})
self.assertFalse(form.is_valid())
form = SendCoins({"recipient": "GPem1MVc49r7dxsUDL4sKFvq79rCtqs5Sx",
"amount": "0.0099"})
self.assertFalse(form.is_valid())
form = SendCoins({"recipient": "GPem1MVc49r7dxsUDL4sKFvq79rCtqs5Sx",
"amount": "-0.1"})
self.assertFalse(form.is_valid())
form = SendCoins({"recipient": "GPem1MVc49r7dxsUDL4sKFvq79rCtqs5Sx00",
"amount": "0.1"})
self.assertFalse(form.is_valid())
form = SendCoins({"recipient": "aaa",
"amount": "0.1"})
self.assertFalse(form.is_valid())
form = SendCoins({"recipient": ")%$#",
"amount": "0.1"})
self.assertFalse(form.is_valid())
form = SendCoins({"recipient": "abcdEFGH123456780", "amount": "1"})
self.assertFalse(form.is_valid())
form = SendCoins({"recipient": "APem1MVc49r7dxsUDL4sKFvq79rCtqs5Sx",
"amount": "0.1"})
self.assertFalse(form.is_valid())
def test_valid_cleaned_data(self):
form = SendCoins({"recipient": "GPem1MVc49r7dxsUDL4sKFvq79rCtqs5Sx",
"amount": "0.1"})
form.is_valid()
self.assertEqual(form.cleaned_data["amount"], Decimal("0.1"))
def test_with_balance(self):
self.user.account.balance = 100
self.user.account.save()
form = SendCoins({"recipient": "GPem1MVc49r7dxsUDL4sKFvq79rCtqs5Sx",
"amount": "1"}, user=self.user)
self.assertTrue(form.is_valid())
def test_without_balance(self):
self.user.account.balance = 1
self.user.account.save()
form = SendCoins({"recipient": "GPem1MVc49r7dxsUDL4sKFvq79rCtqs5Sx",
"amount": "100"}, user=self.user)
self.assertFalse(form.is_valid())
def test_without_fee_balance(self):
with self.settings(GST_NETWORK_FEE=Decimal('0.02'),
SERVICE_FEE=Decimal('0.0')):
self.user.account.balance = 100
self.user.account.save()
form = SendCoins({"recipient": "GPem1MVc49r7dxsUDL4sKFvq79rCtqs5Sx",
"amount": "100"}, user=self.user)
self.assertFalse(form.is_valid())
class AccountModelTests(TestCase):
def setUp(self):
self.user = User.objects.create_user("tester", password="asdasdasd")
Account.objects.create(user=self.user, name="A2aac03D5F5Adae0")
self.user2 = User.objects.create_user("tester2", password="asdasdasd")
Account.objects.create(user=self.user2, name="B6cac03D5F5Adae0")
class GostcoinTests(TestCase):
def test_select_inputs(self):
conn = MagicMock()
conn.listunspent.return_value = DEMO_UNSPENT
inputs, total = gostcoin.select_inputs(conn, Decimal("212"))
self.assertEquals(total, Decimal("233.06"))
self.assertEquals(len(inputs), 3)
def test_create_raw_tx(self):
conn = MagicMock()
conn.listunspent.return_value = DEMO_DATA_1["listunspent"]
conn.createrawtransaction.return_value = DEMO_DATA_1["createrawtransaction"]
rawtx = gostcoin.create_raw_tx(conn,
"GXaNvzURu4fRAkjSodybjcXnwwUPKxB6rQ", Decimal("212"))
self.assertEquals(rawtx, DEMO_DATA_1["createrawtransaction"])
class CeleryTaskTests(TestCase):
def setUp(self):
self.user = User.objects.create_user("tester", password="asdasdasd")
Account.objects.create(user=self.user, name="A2aac03D5F5Adae0")
self.user2 = User.objects.create_user("tester2", password="asdasdasd")
Account.objects.create(user=self.user2, name="B6cac03D5F5Adae0")
def test_check_received_transactions(self):
Address.objects.create(account=self.user.account, used=False,
address="GXaNvzURu4fRAkjSodybjcXnwwUPKxB6rQ")
Address.objects.create(account=self.user2.account, used=False,
address="GHwVSdza9QB5zPa9kZWjFdByynTAtDb6M9")
conn = MagicMock()
conn.listtransactions.return_value = DEMO_TRANSACTIONS
conn.getnewaddress = lambda: "G" + rand_string(33)
result = check_received_transactions(conn)
tx = DepositTransaction.objects.get(
txid='3c03439fab4f53c97185e66217fe5fe61cdc4e80b25dfe5a0d19bf0b8c77f994')
self.assertEqual(tx.account, self.user.account)
self.assertEqual(tx.address.used, True)
self.assertEqual(self.user.account.address_set.filter(used=True).first().used, True)
tx = DepositTransaction.objects.get(
txid='a94b83eec4f267aa503cc9ec65a229350cae60799ff73c28283a7aa5dad15435')
self.assertEqual(tx.account, self.user2.account)
self.assertEqual(tx.address.used, True)
def test_check_confirmed_transactions(self):
Address.objects.create(account=self.user.account, used=False,
address="GXaNvzURu4fRAkjSodybjcXnwwUPKxB6rQ")
conn = MagicMock()
conn.listtransactions.return_value = DEMO_TRANSACTIONS
conn.gettransaction.return_value = {'time': 1491951811, 'blocktime': 1491951914, 'txid': '3c03439fab4f53c97185e66217fe5fe61cdc4e80b25dfe5a0d19bf0b8c77f994', 'amount': Decimal('616.00000000'), 'confirmations': 7430, 'blockindex': 1, 'blockhash': '0000004d184d3df898180937bd22c2717543706443b33ec7e16e369fa9d8c334', 'timereceived': 1491951811, 'details': [{'account': '', 'amount': Decimal('616.00000000'), 'address': 'GXaNvzURu4fRAkjSodybjcXnwwUPKxB6rQ', 'category': 'receive'}]}
conn.getreceivedbyaddress.return_value = Decimal('616.00000000')
conn.getnewaddress = lambda: "G" + rand_string(33)
check_received_transactions(conn)
check_confirmed_transactions(conn)
tx = DepositTransaction.objects.get(
txid='3c03439fab4f53c97185e66217fe5fe61cdc4e80b25dfe5a0d19bf0b8c77f994')
self.assertEqual(tx.confirmed, True)
self.assertEqual(tx.account.balance, 616)
check_confirmed_transactions(conn)
tx = DepositTransaction.objects.get(
txid='3c03439fab4f53c97185e66217fe5fe61cdc4e80b25dfe5a0d19bf0b8c77f994')
self.assertEqual(tx.account.balance, 616)