mirror of https://github.com/GOSTSec/gostweb
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
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)
|
|
|