diff --git a/src/_cutecoin_test/models/account/test_account.py b/src/_cutecoin_test/models/account/test_account.py index 88327b4a6a19948c7929073596ad1569b3d56887..aa3f06a6fd6d102bd04e34cd519dc50352fe8ad9 100644 --- a/src/_cutecoin_test/models/account/test_account.py +++ b/src/_cutecoin_test/models/account/test_account.py @@ -1,33 +1,266 @@ import pytest import ucoinpy as ucoin +import gnupg +from mock import Mock from cutecoin.models.account import Account +from cutecoin.models.account.communities import Communities +from cutecoin.models.community import Community, CommunityNetwork +user_keys = { + "0x31A6302161AC8F5938969E85399EB3415C237F93" : { + "keys": [ + { + "signature": "-----BEGIN PGP SIGNATURE----- ... -----END PGP SIGNATURE-----", + "key": + { + "email":"mistertest@testmail.com", + "comment":"", + "name":"Mister test", + "fingerprint":"31A6302161AC8F5938969E85399EB3415C237F93", + "raw":"-----BEGIN PGP PUBLIC KEY BLOCK----- ... -----END PGP PUBLIC KEY BLOCK-----\r\n" + } + } + ] + }, + "0x2E69197FAB029D8669EF85E82457A1587CA0ED9C" : { + "keys": [ + { + "signature": "-----BEGIN PGP SIGNATURE----- ... -----END PGP SIGNATURE-----", + "key": + { + "email":"mistertest2@testmail.com", + "comment":"", + "name":"Mister test2", + "fingerprint":"2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "raw":"-----BEGIN PGP PUBLIC KEY BLOCK----- ... -----END PGP PUBLIC KEY BLOCK-----\r\n" + } + } + ] + } +} + +def patch_transactions_recipient_get(*arg, **kwargs): + return iter([{ + "hash": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "value": { + "signature": "-----BEGIN PGP SIGNATURE----- ... -----END PGP SIGNATURE-----", + "transaction": + { + "version": 1, + "currency": "beta_brousouf", + "sender": "31A6302161AC8F5938969E85399EB3415C237F93", + "number": 15, + "previousHash": "BE522363749E62BA1034C7B1358B01C75289DA48", + "recipient": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "type": "TRANSFER", + "coins": [ + { + "id": "31A6302161AC8F5938969E85399EB3415C237F93-10-1-2-F-14", + "transaction_id": "31A6302161AC8F5938969E85399EB3415C237F93-1" + },{ + "id": "31A6302161AC8F5938969E85399EB3415C237F93-2-4-1-A-1", + "transaction_id": "31A6302161AC8F5938969E85399EB3415C237F93-1" + },{ + "id": "31A6302161AC8F5938969E85399EB3415C237F93-3-6-1-A-1", + "transaction_id": "31A6302161AC8F5938969E85399EB3415C237F93-1" + } + ], + "comment": "Too much coins ! Making big one." + } + } + }]) + + +def patch_transactions_sent_get(*arg, **kwargs): + return iter([{ + "hash": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "value": { + "signature": "-----BEGIN PGP SIGNATURE----- ... -----END PGP SIGNATURE-----", + "transaction": + { + "version": 1, + "currency": "beta_brousouf", + "sender": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "number": 15, + "previousHash": "BE522363749E62BA1034C7B1358B01C75289DA48", + "recipient": "31A6302161AC8F5938969E85399EB3415C237F93", + "type": "TRANSFER", + "coins": [ + { + "id": "31A6302161AC8F5938969E85399EB3415C237F93-10-1-2-F-14", + "transaction_id": "2E69197FAB029D8669EF85E82457A1587CA0ED9C-1" + },{ + "id": "31A6302161AC8F5938969E85399EB3415C237F93-2-4-1-A-1", + "transaction_id": "2E69197FAB029D8669EF85E82457A1587CA0ED9C-1" + },{ + "id": "31A6302161AC8F5938969E85399EB3415C237F93-3-6-1-A-1", + "transaction_id": "2E69197FAB029D8669EF85E82457A1587CA0ED9C-1" + } + ], + "comment": "Too much coins ! Making big one." + } + } + }]) + + +def patch_transactions_view_get(*arg, **kwargs): + return { + "signature": "-----BEGIN PGP SIGNATURE----- ... -----END PGP SIGNATURE-----", + "transaction": + { + "version": 1, + "currency": "beta_brousouf", + "sender": "31A6302161AC8F5938969E85399EB3415C237F93", + "number": 15, + "previousHash": "BE522363749E62BA1034C7B1358B01C75289DA48", + "recipient": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "type": "TRANSFER", + "coins": [ + { + "id": "31A6302161AC8F5938969E85399EB3415C237F93-10-1-2-F-14", + "transaction_id": "31A6302161AC8F5938969E85399EB3415C237F93-1" + },{ + "id": "31A6302161AC8F5938969E85399EB3415C237F93-2-4-1-A-1", + "transaction_id": "31A6302161AC8F5938969E85399EB3415C237F93-1" + },{ + "id": "31A6302161AC8F5938969E85399EB3415C237F93-3-6-1-A-1", + "transaction_id": "31A6302161AC8F5938969E85399EB3415C237F93-1" + } + ], + "comment": "Too much coins ! Making big one." + } + } + +def patch_transactions_issuances_get(*arg, **kwargs): + return iter([{ + "hash": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "value": { + "signature": "-----BEGIN PGP SIGNATURE----- ... -----END PGP SIGNATURE-----", + "transaction": + { + "version": 1, + "currency": "beta_brousouf", + "sender": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "number": 1, + "previousHash": "BE522363749E62BA1034C7B1358B01C75289DA48", + "recipient": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "type": "ISSUANCE", + "coins": [ + { + "id": "2E69197FAB029D8669EF85E82457A1587CA0ED9C-2-4-1-A-1", + "transaction_id": "2E69197FAB029D8669EF85E82457A1587CA0ED9C-1" + },{ + "id": "2E69197FAB029D8669EF85E82457A1587CA0ED9C-3-6-1-A-1", + "transaction_id": "2E69197FAB029D8669EF85E82457A1587CA0ED9C-1" + } + ], + "comment": "Too much coins ! Making big one." + } + } + } + ]) + +def mock_gpg(): + def gpg_list_keys(): + return [{ + 'keyid': u'25500A07', + 'fingerprint': '2E69197FAB029D8669EF85E82457A1587CA0ED9C', + 'uids': [u'Mister Test <mister_test@testmail.com>'], + 'expires': u'', + 'length': u'1024', + 'algo': u'17', + 'date': u'1221156445', + 'type': u'pub' + }] + + mock = Mock(spec=gnupg.GPG) + instance = mock.return_value + instance.list_keys = gpg_list_keys + return instance + + +@pytest.fixture +def mock_community(): + def community_request(request, get_args={}): + if type(request) is ucoin.hdc.transactions.Recipient: + return patch_transactions_recipient_get() + elif type(request) is ucoin.hdc.transactions.sender.Last: + return patch_transactions_sent_get() + elif type(request) is ucoin.hdc.transactions.View: + return patch_transactions_view_get() + elif type(request) is ucoin.hdc.transactions.sender.Issuance: + return patch_transactions_issuances_get() + elif type(request) is ucoin.hdc.coins.List: + return { + "owner": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "coins": [{ + "issuer": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "ids": ["1-5-2-A-1", "2-4-1-A-1"] + }, + { + "issuer": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "ids": ["10-1-2-F-14"] + }] + } + elif type(request) == ucoin.pks.Lookup: + return user_keys[ get_args['search'] ] + else: + assert 0 + + mock_network = Mock(spec=CommunityNetwork, request=community_request) + mock = Mock(spec=Community, network=mock_network, currency="test_currency") + return mock + + +@pytest.fixture +def mock_communities(): + mock = Mock(spec=Communities, communities_list=[]) + return mock + + #TODO: Test account class Test_Account: - def test_account_create(self): - pass + def test_account_create1(self, mock_communities): + account = Account.create("25500A07", "TestUser", mock_communities) + assert account is not None + + def test_account_create2(self, monkeypatch, mock_communities, mock_community): + monkeypatch.setattr(gnupg, 'GPG', mock_gpg) + mock_communities.communities_list=[mock_community] + account = Account.create("25500A07", "TestUser", mock_communities) + assert account is not None def test_account_load(self): pass - def test_account_add_wallet(self): - pass - def test_account_add_contact(self): pass - def test_account_fingerprint(self): - pass + def test_account_fingerprint(self, monkeypatch, mock_communities): + monkeypatch.setattr(gnupg, 'GPG', mock_gpg) + account = Account.create("25500A07", "TestUser", mock_communities) + assert account.fingerprint() == "2E69197FAB029D8669EF85E82457A1587CA0ED9C" - def test_account_transactions_received(self): - pass + def test_account_transactions_received(self, monkeypatch, mock_community, mock_communities): + monkeypatch.setattr(gnupg, 'GPG', mock_gpg) + mock_communities.communities_list=[mock_community] + account = Account.create("25500A07", "TestUser", mock_communities) + assert len(account.transactions_received()) == 1 + assert sum( trx.value() for trx in account.transactions_received()) == 200 - def test_account_transactions_sent(self): - pass + def test_account_transactions_sent(self, monkeypatch, mock_community, mock_communities): + monkeypatch.setattr(gnupg, 'GPG', mock_gpg) + mock_communities.communities_list=[mock_community] + account = Account.create("25500A07", "TestUser", mock_communities) + assert len(account.transactions_sent()) == 1 + assert sum( trx.value() for trx in account.transactions_sent()) == 200 - def test_account_last_issuances(self): - pass + def test_account_last_issuances(self, monkeypatch, mock_community, mock_communities): + monkeypatch.setattr(gnupg, 'GPG', mock_gpg) + mock_communities.communities_list=[mock_community] + account = Account.create("25500A07", "TestUser", mock_communities) + assert len(account.last_issuances(mock_community)) == 1 def test_account_issued_last_dividend(self): pass @@ -44,5 +277,3 @@ class Test_Account: def test_account_pull_tht(self): pass - def test_account_quality(self): - pass diff --git a/src/_cutecoin_test/models/account/test_communities.py b/src/_cutecoin_test/models/account/test_communities.py index dbde89db18d0a40b61babdbb61dd787b06cf3ce3..eedf10425d303d77fc76596505848b11aa666998 100644 --- a/src/_cutecoin_test/models/account/test_communities.py +++ b/src/_cutecoin_test/models/account/test_communities.py @@ -5,9 +5,6 @@ from cutecoin.models.account.communities import Communities #TODO: Test communities class Test_Communities: - def test_communities_add_community(self): - pass - def test_communities_jsonify(self): pass diff --git a/src/_cutecoin_test/models/account/test_wallets.py b/src/_cutecoin_test/models/account/test_wallets.py index ce8ac5aa91bedfd3757e2a20290bbf90ec14dba3..a3435296e15889e369c204d7900dc6825ddd3cc1 100644 --- a/src/_cutecoin_test/models/account/test_wallets.py +++ b/src/_cutecoin_test/models/account/test_wallets.py @@ -1,19 +1,75 @@ import pytest import ucoinpy as ucoin -from mock import Mock +from mock import Mock, MagicMock +from cutecoin.models.wallet import Wallet from cutecoin.models.account.wallets import Wallets +from cutecoin.models.community import Community, CommunityNetwork + +def mock_community(): + def community_request(request): + if type(request) is ucoin.hdc.coins.List: + return { + "owner": "86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8", + "coins": [{ + "issuer": "86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8", + "ids": ["1-5-2-A-1", "2-4-1-A-1"] + }, + { + "issuer": "31A6302161AC8F5938969E85399EB3415C237F93", + "ids": ["10-1-2-F-14"] + }] + } + else: + assert 0 + + mock_network = Mock(spec=CommunityNetwork, request=community_request) + community = MagicMock(spec=Community, network=mock_network) + + return community + + +def mock_wallet(): + def wallet_eq(mock1, mock2): + return mock1.community == mock2.community + mock_wallet = MagicMock(spec=Wallet, __eq__=wallet_eq) + + #TODO: Test wallets class Test_Wallets: def test_wallets_add_wallet(self): - pass + wallets = Wallets() + wallet = wallets.add_wallet(mock_community()) + assert wallet is not None def test_wallets_get_wallet(self): - pass + mock1 = mock_community() + mock2 = mock_community() + mock3 = mock_community() + mock_wallet1 = Mock(spec=Wallet, community=mock1) + mock_wallet2 = Mock(spec=Wallet, community=mock2) + mock_wallet3 = Mock(spec=Wallet, community=mock3) + wallets = Wallets() + wallets.wallets_list.append(mock_wallet1) + wallets.wallets_list.append(mock_wallet2) + + assert wallets.get_wallet(mock_wallet1) is not None + assert wallets.get_wallet(mock_wallet2) is not None + assert wallets.get_wallet(mock_wallet3) is None def test_wallets_remove_all_wallets_of(self): - pass + mock1 = mock_community() + mock2 = mock_community() + mock_wallet1 = Mock(spec=Wallet, community=mock1) + mock_wallet2 = Mock(spec=Wallet, community=mock2) + wallets = Wallets() + wallets.wallets_list.append(mock_wallet1) + wallets.wallets_list.append(mock_wallet2) + + wallets.remove_all_wallets_of(mock1) + assert wallets.get_wallet(mock_wallet1) is None + assert wallets.get_wallet(mock_wallet2) is not None def test_wallets_jsonify(self): pass diff --git a/src/_cutecoin_test/models/test_community.py b/src/_cutecoin_test/models/test_community.py index ccdd069a31cab8e8403a5cd8fe71718d6d4331ba..d5d6a589aa358bafbf5b9a121e2a102504c04775 100644 --- a/src/_cutecoin_test/models/test_community.py +++ b/src/_cutecoin_test/models/test_community.py @@ -5,6 +5,9 @@ from cutecoin.models.community import Community from cutecoin.models.community import Node + +amendment_hash = "3682F828EFB1A1AFF45ACC6DDBB2BAD100DCD605" + def patch_amendment_current_get(*args, **kwargs): return { "version": "1", @@ -23,9 +26,23 @@ def patch_amendment_current_get(*args, **kwargs): "membersChanges": [ "+31A6302161AC8F5938969E85399EB3415C237F93" ], - "raw": "Version: 1\r\n...+31A6302161AC8F5938969E85399EB3415C237F93\r\n" + "raw": """Version: 1 +Currency: beta_brousouf +Number: 2 +Dividend: 100 +CoinMinimalPower: 0 +PreviousHash: 0F45DFDA214005250D4D2CBE4C7B91E60227B0E5 +MembersRoot: F92B6F81C85200250EE51783F5F9F6ACA57A9AFF +MembersCount: 4 +MembersChanges: ++31A6302161AC8F5938969E85399EB3415C237F93 +VotersRoot: DC7A9229DFDABFB9769789B7BFAE08048BCB856F +VotersCount: 2 +VotersChanges: +-C73882B64B7E72237A2F460CE9CAB76D19A8651E +""" } - + def patch_amendments_members_get(*args, **kwargs): return iter([{ @@ -60,7 +77,7 @@ def mock_node(): mock = Mock(spec=Node, trust=True, hoster=True, server="192.168.100.10", port=3800) - mock.getText.return_value = "Mock node" + mock.get_text.return_value = "Mock node" mock.use = node_use return mock @@ -84,8 +101,11 @@ class Test_Community(): community = Community.create(mock_node) assert community.coin_minimal_power() == 0 - def test_community_amendment_id(self, monkeypatch): - pass + def test_community_amendment_id(self, monkeypatch, mock_node): + monkeypatch.setattr(ucoin.hdc.amendments.Current, + '__get__', patch_amendment_current_get) + community = Community.create(mock_node) + assert community.amendment_id() == "2-"+amendment_hash.upper() def test_community_amendment_number(self, monkeypatch, mock_node): monkeypatch.setattr(ucoin.hdc.amendments.Current, diff --git a/src/_cutecoin_test/models/test_node.py b/src/_cutecoin_test/models/test_node.py index bd232b53953c16b08e4b7e1c5999e007c39ba6fd..0e6538a08f5ce3066f4d001ad812eba1555d3d9c 100644 --- a/src/_cutecoin_test/models/test_node.py +++ b/src/_cutecoin_test/models/test_node.py @@ -58,5 +58,5 @@ class Test_Node(): assert peering["port"] == str(3800) #TODO: Test node json - def test_node_jsonify(self, monkeypatch): + def test_node_jsonify(self): pass diff --git a/src/_cutecoin_test/models/test_person.py b/src/_cutecoin_test/models/test_person.py index 4c285cd553cd06f6d7bfa616182d567bd81a4cd0..f329ef38fe024dd6c6903ac5096b12ed7e1e3843 100644 --- a/src/_cutecoin_test/models/test_person.py +++ b/src/_cutecoin_test/models/test_person.py @@ -1,43 +1,59 @@ import pytest import ucoinpy as ucoin -from mock import Mock +from mock import Mock, MagicMock from cutecoin.models.person import Person -from cutecoin.models.community import Community +from cutecoin.models.community import Community, CommunityNetwork -@pytest.fixture -def mock_lookup_get(): - mock_get = Mock(spec=ucoin.pks.Lookup.__get__) - mock_get.return_value = [ +user_keys = { + "0x31A6302161AC8F5938969E85399EB3415C237F93" : { + "keys": [ { "signature": "-----BEGIN PGP SIGNATURE----- ... -----END PGP SIGNATURE-----", "key": { - "email":"misterk@supermail.com", - "comment":"udid2;c;CAT;LOL;2000-04-19;e+43.70-079.42;0;", - "name":"LoL Cat", - "fingerprint":"C73882B64B7E72237A2F460CE9CAB76D19A8651E", + "email":"mistertest@testmail.com", + "comment":"", + "name":"Mister test", + "fingerprint":"31A6302161AC8F5938969E85399EB3415C237F93", "raw":"-----BEGIN PGP PUBLIC KEY BLOCK----- ... -----END PGP PUBLIC KEY BLOCK-----\r\n" } - }, + } + ] + }, + "0x2E69197FAB029D8669EF85E82457A1587CA0ED9C" : { + "keys": [ { "signature": "-----BEGIN PGP SIGNATURE----- ... -----END PGP SIGNATURE-----", "key": { - "email":"mistery@undermail.com", - "comment":"udid2;c;CAT;LOL;2000-04-19;e+43.70-079.42;0;", - "name":"LoL Cat", - "fingerprint":"C73882B64B7E72237A2F460CE9CAB76D19A8651E", + "email":"mistertest2@testmail.com", + "comment":"", + "name":"Mister test2", + "fingerprint":"2E69197FAB029D8669EF85E82457A1587CA0ED9C", "raw":"-----BEGIN PGP PUBLIC KEY BLOCK----- ... -----END PGP PUBLIC KEY BLOCK-----\r\n" } - }] - return mock_get + } + ] + } +} +@pytest.fixture +def mock_community(): + def community_request(request, get_args={}): + return user_keys[ get_args['search'] ] + mock_network = Mock(spec=CommunityNetwork, request=community_request) + community = MagicMock(spec=Community, network=mock_network) + return community + #TODO: Lookup for person after community was tested class Test_Person(): - def test_person_lookup(self, monkeypatch): - pass + def test_person_lookup(self, monkeypatch, mock_community): + person = Person.lookup("2E69197FAB029D8669EF85E82457A1587CA0ED9C", mock_community) + assert person.name == "Mister test2" + assert person.fingerprint == "2E69197FAB029D8669EF85E82457A1587CA0ED9C" + assert person.email == "mistertest2@testmail.com" def test_person_jsonify(self): pass diff --git a/src/_cutecoin_test/models/test_transaction.py b/src/_cutecoin_test/models/test_transaction.py index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..bdb83aeeeed4384643cc3bb7128c4ad2cbd9458a 100644 --- a/src/_cutecoin_test/models/test_transaction.py +++ b/src/_cutecoin_test/models/test_transaction.py @@ -0,0 +1,139 @@ +import pytest +import re +import ucoinpy as ucoin +from mock import Mock, MagicMock +from cutecoin.models.transaction import Transaction, Transfer, Issuance +from cutecoin.models.transaction import factory +from cutecoin.models.community import Community, CommunityNetwork + + + +user_keys = { + "0x31A6302161AC8F5938969E85399EB3415C237F93" : { + "keys": [ + { + "signature": "-----BEGIN PGP SIGNATURE----- ... -----END PGP SIGNATURE-----", + "key": + { + "email":"mistertest@testmail.com", + "comment":"", + "name":"Mister test", + "fingerprint":"31A6302161AC8F5938969E85399EB3415C237F93", + "raw":"-----BEGIN PGP PUBLIC KEY BLOCK----- ... -----END PGP PUBLIC KEY BLOCK-----\r\n" + } + } + ] + }, + "0x2E69197FAB029D8669EF85E82457A1587CA0ED9C" : { + "keys": [ + { + "signature": "-----BEGIN PGP SIGNATURE----- ... -----END PGP SIGNATURE-----", + "key": + { + "email":"mistertest2@testmail.com", + "comment":"", + "name":"Mister test2", + "fingerprint":"2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "raw":"-----BEGIN PGP PUBLIC KEY BLOCK----- ... -----END PGP PUBLIC KEY BLOCK-----\r\n" + } + } + ] + } +} + +def community_request_issuance(request, get_args={}): + if type(request) == ucoin.hdc.transactions.View: + return { + "signature": "-----BEGIN PGP SIGNATURE----- ... -----END PGP SIGNATURE-----", + "raw": "Version: 1\r\n...\r\n", + "transaction": + { + "version": 1, + "currency": "beta_brousouf", + "sender": "31A6302161AC8F5938969E85399EB3415C237F93", + "number": 1, + "previousHash": "BE522363749E62BA1034C7B1358B01C75289DA48", + "recipient": "31A6302161AC8F5938969E85399EB3415C237F93", + "type": "ISSUANCE", + "coins": [ + { + "id": "31A6302161AC8F5938969E85399EB3415C237F93-2-4-1-A-1", + "transaction_id": "31A6302161AC8F5938969E85399EB3415C237F93-1" + },{ + "id": "31A6302161AC8F5938969E85399EB3415C237F93-3-6-1-A-1", + "transaction_id": "31A6302161AC8F5938969E85399EB3415C237F93-1" + } + ], + "comment": "Too much coins ! Making big one." + } + } + elif type(request) == ucoin.pks.Lookup: + return user_keys[ get_args['search'] ] + else: + assert 0 + + +def community_request_transfer(request, get_args={}): + if type(request) == ucoin.hdc.transactions.View: + return { + "signature": "-----BEGIN PGP SIGNATURE----- ... -----END PGP SIGNATURE-----", + "raw": "Version: 1\r\n...\r\n", + "transaction": + { + "version": 1, + "currency": "beta_brousouf", + "sender": "31A6302161AC8F5938969E85399EB3415C237F93", + "number": 15, + "previousHash": "BE522363749E62BA1034C7B1358B01C75289DA48", + "recipient": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "type": "TRANSFER", + "coins": [ + { + "id": "31A6302161AC8F5938969E85399EB3415C237F93-10-1-2-F-14", + "transaction_id": "31A6302161AC8F5938969E85399EB3415C237F93-1" + },{ + "id": "31A6302161AC8F5938969E85399EB3415C237F93-2-4-1-A-1", + "transaction_id": "31A6302161AC8F5938969E85399EB3415C237F93-1" + },{ + "id": "31A6302161AC8F5938969E85399EB3415C237F93-3-6-1-A-1", + "transaction_id": "31A6302161AC8F5938969E85399EB3415C237F93-1" + } + ], + "comment": "Too much coins ! Making big one." + } + } + elif type(request) == ucoin.pks.Lookup: + return user_keys[ get_args['search'] ] + else: + assert 0 + + +def mock_community(community_request): + mock_network = Mock(spec=CommunityNetwork, request=community_request) + community = MagicMock(spec=Community, network=mock_network) + + return community + + +class Test_Transaction: + def test_create_transaction_issuance(self): + community = mock_community( community_request_issuance ) + trx = factory.create_transaction("31A6302161AC8F5938969E85399EB3415C237F93", 1, community) + assert trx is not None + assert type(trx) is Issuance + + def test_create_transaction_transfer(self): + community = mock_community( community_request_transfer ) + trx = factory.create_transaction("31A6302161AC8F5938969E85399EB3415C237F93", 15, community) + assert trx is not None + assert type(trx) is Transfer + + def test_transaction_value(self): + community = mock_community( community_request_issuance ) + trx = factory.create_transaction("31A6302161AC8F5938969E85399EB3415C237F93", 1, community) + assert trx.value() == 100 + + def test_transaction_currency(self): + community = mock_community( community_request_issuance ) + trx = factory.create_transaction("31A6302161AC8F5938969E85399EB3415C237F93", 1, community) + assert trx.currency() == "beta_brousouf" diff --git a/src/_cutecoin_test/models/test_wallet.py b/src/_cutecoin_test/models/test_wallet.py index e61e32a5442a15956e58fd2545225260235b95b2..2c4e45737f0329a7fdb3b38b9dd295dc6543cfe0 100644 --- a/src/_cutecoin_test/models/test_wallet.py +++ b/src/_cutecoin_test/models/test_wallet.py @@ -1,11 +1,10 @@ import pytest import ucoinpy as ucoin -from mock import Mock, patch +from mock import Mock, MagicMock, patch from cutecoin.models.wallet import Wallet from cutecoin.models.community import Community, CommunityNetwork -@pytest.fixture def mock_community(): def community_request(request): if type(request) is ucoin.hdc.coins.List: @@ -22,23 +21,27 @@ def mock_community(): } else: assert 0 + + def community_eq(mock1, mock2): + return mock1.amendment_id() == mock2.amendment_id() + mock_network = Mock(spec=CommunityNetwork, request=community_request) - community = Mock(spec=Community, network=mock_network) + community = MagicMock(spec=Community, network=mock_network, __eq__=community_eq) return community class Test_Wallet: - def test_wallet_create(self, mock_community): - wallet = Wallet([], mock_community) + def test_wallet_create(self,): + wallet = Wallet([], mock_community()) assert wallet is not None #TODO: Test json def test_wallet_load(self): pass - def test_wallet_value(self, mock_community): - wallet = Wallet([], mock_community) + def test_wallet_value(self): + wallet = Wallet([], mock_community()) assert wallet.value() == 0 wallet.refresh_coins("86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8") assert wallet.value() == 640 @@ -46,6 +49,27 @@ class Test_Wallet: def test_wallet_get_text(self): pass + + def test_eq(self): + mock1 = mock_community() + mock1.amendment_id.return_value = "2-AMENDMENTTEST" + mock2 = mock_community() + mock2.amendment_id.return_value = "2-AMENDMENTTEST" + wallet1 = Wallet([], mock1) + wallet2 = Wallet([], mock2) + + assert wallet1 == wallet2 + + def test_not_eq(self): + mock1 = mock_community() + mock1.amendment_id.return_value = "2-AMENDMENTTEST" + mock2 = mock_community() + mock2.amendment_id.return_value = "1-AMENDMENTTEST" + wallet1 = Wallet([], mock1) + wallet2 = Wallet([], mock2) + + assert wallet1 != wallet2 + def test_wallet_jsonify(self): pass diff --git a/src/cutecoin/models/account/__init__.py b/src/cutecoin/models/account/__init__.py index 07dc6eb58f29ea7ebf50d16cb34fa43929f0c1f7..9228e18efc2b9b3fea9657222b3408970f9f96e0 100644 --- a/src/cutecoin/models/account/__init__.py +++ b/src/cutecoin/models/account/__init__.py @@ -42,8 +42,8 @@ class Account(object): wallets = Wallets() account = cls(keyid, name, communities, wallets, []) for community in account.communities.communities_list: - wallet = account.wallets.add_wallet(community.currency) - wallet.refresh_coins(community, account.fingerprint()) + wallet = account.wallets.add_wallet(community) + wallet.refresh_coins(account.fingerprint()) return account @classmethod @@ -73,9 +73,6 @@ class Account(object): else: return False - def add_wallet(self, name, currency): - self.wallets.add_wallet(name, currency) - def add_contact(self, person): self.contacts.append(person) @@ -95,11 +92,11 @@ class Account(object): transactions_data = community.network.request( ucoin.hdc.transactions.Recipient( self.fingerprint())) - for trxData in transactions_data: + for trx_data in transactions_data: received.append( factory.create_transaction( - trxData['value']['transaction']['sender'], - trxData['value']['transaction']['number'], + trx_data['value']['transaction']['sender'], + trx_data['value']['transaction']['number'], community)) return received @@ -115,8 +112,8 @@ class Account(object): if not isinstance(trx_data, str): sent.append( factory.create_transaction( - trxData['value']['transaction']['sender'], - trxData['value']['transaction']['number'], + trx_data['value']['transaction']['sender'], + trx_data['value']['transaction']['number'], community)) return sent diff --git a/src/cutecoin/models/account/wallets/__init__.py b/src/cutecoin/models/account/wallets/__init__.py index a544f23d87fb5280467986596b9b345d64ddf25e..f6804f781966acb41d6ade61e017d16fcfeb0b1f 100644 --- a/src/cutecoin/models/account/wallets/__init__.py +++ b/src/cutecoin/models/account/wallets/__init__.py @@ -19,15 +19,16 @@ class Wallets(object): ''' self.wallets_list = [] - def add_wallet(self, currency): + def add_wallet(self, community): ''' Create a new wallet of a specific currency. This wallet must not already be present in the account, it means the wallet must have a different name or a different currency. ''' - wallet = Wallet.create(currency) + wallet = Wallet.create(community) if wallet not in self.wallets_list: self.wallets_list.append(wallet) + return wallet else: return self.wallets_list.get(wallet) @@ -35,7 +36,7 @@ class Wallets(object): ''' Look for a wallet in the wallets list. ''' - for w in self.walletsLists: + for w in self.wallets_list: if w == wallet: return w return None diff --git a/src/cutecoin/models/community/__init__.py b/src/cutecoin/models/community/__init__.py index 875329cdc88eee817e7b908e32157dbd45d60b54..ed9a30c362908c23c5c9478d65cd7cf7b22ec525 100644 --- a/src/cutecoin/models/community/__init__.py +++ b/src/cutecoin/models/community/__init__.py @@ -26,9 +26,6 @@ class Community(object): An account is a member of a community if he is a member of the current amendment. ''' self.network = network - print(self.network) - print(self.network.request) - print(self.network.request(ucoin.hdc.amendments.Current())) current_amendment = self.network.request(ucoin.hdc.amendments.Current()) self.currency = current_amendment['currency'] diff --git a/src/cutecoin/models/community/network.py b/src/cutecoin/models/community/network.py index 697e94a88a0bbfbe137dd05959d41b3357bfd135..e8425b969528a0e56df44706596faca92204a576 100644 --- a/src/cutecoin/models/community/network.py +++ b/src/cutecoin/models/community/network.py @@ -21,14 +21,14 @@ class CommunityNetwork(object): def request(self, request, get_args={}): for node in self.trusts(): - logging.debug("Trying to connect to : " + node.getText()) + logging.debug("Trying to connect to : " + node.get_text()) node.use(request) return request.get(**get_args) raise RuntimeError("Cannot connect to any node") def post(self, request, get_args={}): for node in self.hosters(): - logging.debug("Trying to connect to : " + node.getText()) + logging.debug("Trying to connect to : " + node.get_text()) node.use(request) return request.post(**get_args) raise RuntimeError("Cannot connect to any node") diff --git a/src/cutecoin/models/node/__init__.py b/src/cutecoin/models/node/__init__.py index 505d2f64bdc7d0dd81670106f036bdad42b0a2ba..fdac61d8dd5390d16c0887717439614e3193da7b 100644 --- a/src/cutecoin/models/node/__init__.py +++ b/src/cutecoin/models/node/__init__.py @@ -25,7 +25,7 @@ class Node(object): def __eq__(self, other): return (self.server == other.server and self.port == other.port) - def getText(self): + def get_text(self): return self.server + ":" + str(self.port) ''' diff --git a/src/cutecoin/models/transaction/__init__.py b/src/cutecoin/models/transaction/__init__.py index 47dd790e8a1f6d0c8b84ce410f9b75fa632d37bb..43f173d0c1c59a45803b014ea916d9a6724f47a4 100644 --- a/src/cutecoin/models/transaction/__init__.py +++ b/src/cutecoin/models/transaction/__init__.py @@ -35,7 +35,7 @@ class Transaction(object): currency = trx_data['transaction']['currency'] return currency - def transactionID(self): + def transaction_id(self): return self.sender_fingerprint + "-" + self.increment @@ -48,7 +48,7 @@ class Transfer(Transaction): def __init__(self): super(Transfer).__init__() - def getText(self): + def get_text(self): return str(self.value()) + " " + self.currency() + \ " from " + self.sender.name @@ -62,9 +62,9 @@ class Issuance(Transaction): def __init__(self): super(Issuance).__init__() - def amendmentNumber(self): + def amendment_number(self): self.community.network.request( ucoin.hdc.transactions.View(self.sender.fingerprint + "-" + str(self.increment))) - def getText(self): + def get_text(self): return str(self.value()) + " " + self.currency() diff --git a/src/cutecoin/models/wallet/__init__.py b/src/cutecoin/models/wallet/__init__.py index 45b4af45c9e5bdcbf890665ac83d1bbcce512f7b..20da778f787bf0421a66efd41b5ecb19e667b629 100644 --- a/src/cutecoin/models/wallet/__init__.py +++ b/src/cutecoin/models/wallet/__init__.py @@ -48,9 +48,9 @@ class Wallet(object): def refresh_coins(self, fingerprint): data_list = self.community.network.request( ucoin.hdc.coins.List({'pgp_fingerprint': fingerprint})) - for issaunces in data_list['coins']: - issuer = issaunces['issuer'] - for coins_ids in issaunces['ids']: + for issuances in data_list['coins']: + issuer = issuances['issuer'] + for coins_ids in issuances['ids']: shortened_id = coins_ids coin = Coin.from_id(issuer + "-" + shortened_id) self.coins.append(coin)