diff --git a/src/_cutecoin_test/models/test_coin.py b/src/_cutecoin_test/models/test_coin.py index b7340891e9b3f186c53e71f85193f8efe6a553b0..5c33f8dac4b3d0323c3466cbaaa1e89e10be9d86 100644 --- a/src/_cutecoin_test/models/test_coin.py +++ b/src/_cutecoin_test/models/test_coin.py @@ -12,23 +12,23 @@ origin = "A-2" @pytest.fixture def coin_id_regex(): - return re.compile("^([A-Z\d]{40})-(\d+)-(\d)-(\d+)-((A|F|D)-\d+)$") + return re.compile("^([A-Z\d]{40})-(\d+)-(\d)-(\d+)-((A|F|D)-\d+)$") @pytest.mark.order1 class Test_Coin: - def test_coin_init(self, coin_id_regex): - coin = Coin(issuer, number, base, power, origin) - assert coin_id_regex.match(coin.get_id()) is not None + def test_coin_init(self, coin_id_regex): + coin = Coin(issuer, number, base, power, origin) + assert coin_id_regex.match(coin.get_id()) is not None - def test_coin_from_id(self, coin_id_regex): - coin_id = issuer + "-" + number + "-" + base + "-" + power + "-" + origin - coin = Coin.from_id(coin_id) - assert coin is not None - assert coin_id_regex.match(coin.get_id()) is not None + def test_coin_from_id(self, coin_id_regex): + coin_id = issuer + "-" + number + "-" + base + "-" + power + "-" + origin + coin = Coin.from_id(coin_id) + assert coin is not None + assert coin_id_regex.match(coin.get_id()) is not None - def test_coin_value(self): - coin = Coin(issuer, number, base, power, origin) - assert coin.value() == 300 \ No newline at end of file + def test_coin_value(self): + coin = Coin(issuer, number, base, power, origin) + assert coin.value() == 300 \ No newline at end of file diff --git a/src/_cutecoin_test/models/test_community.py b/src/_cutecoin_test/models/test_community.py index 31286c314cef0ec5ce07e8b689ef554b858ec589..505bfaf47473d4f73e4348017cceff8920a55448 100644 --- a/src/_cutecoin_test/models/test_community.py +++ b/src/_cutecoin_test/models/test_community.py @@ -5,96 +5,132 @@ from cutecoin.models.community import Community from cutecoin.models.community import Node -@pytest.fixture -def mock_amendment_current_get(): - mock_get = Mock(spec=ucoin.hdc.amendments.Current.__get__) - mock_get.return_value = { - "version": "1", - "currency": "beta_brousouf", - "number": "2", - "previousHash": "0F45DFDA214005250D4D2CBE4C7B91E60227B0E5", - "dividend": "100", - "coinMinimalPower": "0", - "votersRoot": "DC7A9229DFDABFB9769789B7BFAE08048BCB856F", - "votersCount": "2", - "votersChanges": [ - "-C73882B64B7E72237A2F460CE9CAB76D19A8651E" - ], - "membersRoot": "F92B6F81C85200250EE51783F5F9F6ACA57A9AFF", - "membersCount": "4", - "membersChanges": [ - "+31A6302161AC8F5938969E85399EB3415C237F93" - ], - "raw": "Version: 1\r\n...+31A6302161AC8F5938969E85399EB3415C237F93\r\n" - } - return mock_get - +def patch_amendment_current_get(*args, **kwargs): + return { + "version": "1", + "currency": "beta_brousouf", + "number": "2", + "previousHash": "0F45DFDA214005250D4D2CBE4C7B91E60227B0E5", + "dividend": "100", + "coinMinimalPower": "0", + "votersRoot": "DC7A9229DFDABFB9769789B7BFAE08048BCB856F", + "votersCount": "2", + "votersChanges": [ + "-C73882B64B7E72237A2F460CE9CAB76D19A8651E" + ], + "membersRoot": "F92B6F81C85200250EE51783F5F9F6ACA57A9AFF", + "membersCount": "4", + "membersChanges": [ + "+31A6302161AC8F5938969E85399EB3415C237F93" + ], + "raw": "Version: 1\r\n...+31A6302161AC8F5938969E85399EB3415C237F93\r\n" + } + + + +def patch_amendments_members_get(*args, **kwargs): + return iter([{ + "hash": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "value": "2E69197FAB029D8669EF85E82457A1587CA0ED9C" + }, + { + "hash": "3F870197FAB029D8669EF85E82457A1587CA0ED9C", + "value": "3F870197FAB029D8669EF85E82457A1587CA0ED9C" + }, + { + "hash": "3F69197FAB029D8669EF85E82457A1587CA0ED9C", + "value": "3F69197FAB029D8669EF85E82457A1587CA0ED9C" + }]) + + + +def patch_amendments_voters_get(*args, **kwargs): + return iter([{ + "hash": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", + "value": "2E69197FAB029D8669EF85E82457A1587CA0ED9C" + }, + { + "hash": "3F870197FAB029D8669EF85E82457A1587CA0ED9C", + "value": "3F870197FAB029D8669EF85E82457A1587CA0ED9C" + }]) + + @pytest.fixture -def mock_amendments_members_get(): - mock_get = Mock(spec=ucoin.hdc.amendments.Current.__get__) - mock_get.return_value = [{ - "hash": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", - "value": "2E69197FAB029D8669EF85E82457A1587CA0ED9C" - }, - { - "hash": "3F69197FAB029D8669EF85E82457A1587CA0ED9C", - "value": "3F69197FAB029D8669EF85E82457A1587CA0ED9C" - }] - return mock_get - - -@pytest.fixture -def mock_amendments_voters_get(): - mock_get = Mock(spec=ucoin.hdc.amendments.Current.__get__) - mock_get.return_value = [{ - "hash": "2E69197FAB029D8669EF85E82457A1587CA0ED9C", - "value": "2E69197FAB029D8669EF85E82457A1587CA0ED9C" - }, - { - "hash": "3F69197FAB029D8669EF85E82457A1587CA0ED9C", - "value": "3F69197FAB029D8669EF85E82457A1587CA0ED9C" - }] - return mock_get - - +def mock_node(): + def node_use(request): + return request + + mock = Mock(spec=Node, trust=True, hoster=True, server = "192.168.100.10", port = 3800) + mock.getText.return_value = "Mock node" + mock.use = node_use + return mock + class Test_Community(): - def test_community_create(self, monkeypatch, mock_amendment_current_get): - pass - - - def test_community_dividend(self, monkeypatch): - pass - - - def test_community_coin_minimal_power(self, monkeypatch): - pass - - - def test_community_amendment_id(self, monkeypatch): - pass - - - def test_community_amendment_number(self, monkeypatch): - pass - - - def test_community_person_quality(self, monkeypatch): - pass - - - def test_community_members_fingerprint(self, monkeypatch): - pass - - - def test_community_voters_fingerprint(self, monkeypatch): - pass - - - def test_community_to_json(self): - pass - - - def test_community_from_json(self): - pass + def test_community_create(self, monkeypatch, mock_node): + monkeypatch.setattr(ucoin.hdc.amendments.Current, '__get__', patch_amendment_current_get) + community = Community.create(mock_node) + assert community is not None + + + def test_community_dividend(self, monkeypatch, mock_node): + monkeypatch.setattr(ucoin.hdc.amendments.Current, '__get__', patch_amendment_current_get) + community = Community.create(mock_node) + assert community.dividend() == 100 + + def test_community_coin_minimal_power(self, monkeypatch, mock_node): + monkeypatch.setattr(ucoin.hdc.amendments.Current, '__get__', patch_amendment_current_get) + community = Community.create(mock_node) + assert community.coin_minimal_power() == 0 + + + def test_community_amendment_id(self, monkeypatch): + pass + + + def test_community_amendment_number(self, monkeypatch, mock_node): + monkeypatch.setattr(ucoin.hdc.amendments.Current, '__get__', patch_amendment_current_get) + community = Community.create(mock_node) + assert community.amendment_number() == 2 + + + def test_community_person_quality(self, monkeypatch, mock_node): + monkeypatch.setattr(ucoin.hdc.amendments.Current, '__get__', patch_amendment_current_get) + monkeypatch.setattr(ucoin.hdc.amendments.view.Members, '__get__', patch_amendments_members_get) + monkeypatch.setattr(ucoin.hdc.amendments.view.Voters, '__get__', patch_amendments_voters_get) + community = Community.create(mock_node) + assert community.person_quality("2E69197FAB029D8669EF85E82457A1587CA0ED9C") == "voter" + assert community.person_quality("3F69197FAB029D8669EF85E82457A1587CA0ED9C") == "member" + assert community.person_quality("3F870197FAB029D8669EF85E82457A1587CA0ED9C") == "voter" + assert community.person_quality("3F871197FAB029D8669EF85E82457A1587CA0ED9C") == "nothing" + + + def test_community_members_fingerprint(self, monkeypatch, mock_node): + monkeypatch.setattr(ucoin.hdc.amendments.Current, '__get__', patch_amendment_current_get) + monkeypatch.setattr(ucoin.hdc.amendments.view.Members, '__get__', patch_amendments_members_get) + monkeypatch.setattr(ucoin.hdc.amendments.view.Voters, '__get__', patch_amendments_voters_get) + community = Community.create(mock_node) + + assert "2E69197FAB029D8669EF85E82457A1587CA0ED9C" in community.members_fingerprints() + assert "3F69197FAB029D8669EF85E82457A1587CA0ED9C" in community.members_fingerprints() + assert "3F870197FAB029D8669EF85E82457A1587CA0ED9C" in community.members_fingerprints() + assert "3F871197FAB029D8669EF85E82457A1587CA0ED9C" not in community.members_fingerprints() + + def test_community_voters_fingerprint(self, monkeypatch, mock_node): + monkeypatch.setattr(ucoin.hdc.amendments.Current, '__get__', patch_amendment_current_get) + monkeypatch.setattr(ucoin.hdc.amendments.view.Members, '__get__', patch_amendments_members_get) + monkeypatch.setattr(ucoin.hdc.amendments.view.Voters, '__get__', patch_amendments_voters_get) + community = Community.create(mock_node) + + assert "2E69197FAB029D8669EF85E82457A1587CA0ED9C" in community.voters_fingerprints() + assert "3F870197FAB029D8669EF85E82457A1587CA0ED9C" in community.voters_fingerprints() + assert "3F871197FAB029D8669EF85E82457A1587CA0ED9C" not in community.voters_fingerprints() + + + def test_community_to_json(self): + pass + + + def test_community_from_json(self): + pass diff --git a/src/_cutecoin_test/models/test_node.py b/src/_cutecoin_test/models/test_node.py index 8db527f4ed140d84782e785889f3a1d1882317d2..719bd4fa0b6c92843ee34681e791b90b56c3a0a4 100644 --- a/src/_cutecoin_test/models/test_node.py +++ b/src/_cutecoin_test/models/test_node.py @@ -3,10 +3,9 @@ import ucoinpy as ucoin from mock import Mock from cutecoin.models.node import Node -@pytest.fixture -def mock_peers_get(): - mock_get = Mock(spec=ucoin.ucg.peering.Peers.__get__) - mock_get.return_value = [{ + +def patch_peers_get(*args, **kwargs): + return iter([{ "version": "1", "currency": "beta_brousouf", "fingerprint": "A70B8E8E16F91909B6A06DFB7EEF1651D9CCF468", @@ -25,14 +24,12 @@ def mock_peers_get(): "ipv6": "", "port": "3801", "signature": "-----BEGIN PGP SIGNATURE----- ... -----END PGP SIGNATURE-----" - }] - return mock_get + }]) -@pytest.fixture -def mock_peer_get(): - mock_get = Mock(spec=ucoin.ucg.peering.Peer.__get__) - mock_get.return_value = { + +def patch_peer_get(*args, **kwargs): + return { "version": "1", "currency": "beta_brousouf", "fingerprint": "A70B8E8E16F91909B6A06DFB7EEF1651D9CCF468", @@ -42,21 +39,20 @@ def mock_peer_get(): "port": "3800", "signature": "-----BEGIN PGP SIGNATURE----- ... -----END PGP SIGNATURE-----" } - return mock_get class Test_Node(): - def test_peers(self, monkeypatch, mock_peers_get): + def test_peers(self, monkeypatch): - monkeypatch.setattr(ucoin.ucg.peering.Peers, '__get__', mock_peers_get) + monkeypatch.setattr(ucoin.ucg.peering.Peers, '__get__', patch_peers_get) node = Node("192.168.100.12", 3800) - peers = node.peers() - assert peers[0]["ipv4"] == "192.168.100.10" - assert peers[1]["ipv4"] == "192.168.100.11" + + assert (peer for peer in node.peers() if peer["ipv4"] == "192.168.100.10") + assert (peer for peer in node.peers() if peer["ipv4"] == "192.168.100.11") - def test_peering(self, monkeypatch, mock_peer_get): - monkeypatch.setattr(ucoin.ucg.peering.Peer, '__get__', mock_peer_get) + def test_peering(self, monkeypatch): + monkeypatch.setattr(ucoin.ucg.peering.Peer, '__get__', patch_peer_get) node = Node("192.168.100.12", 3800) peering = node.peering() diff --git a/src/_cutecoin_test/models/test_person.py b/src/_cutecoin_test/models/test_person.py index 2d76715c8e14dcd5529c57693b137f59294d63b0..8924d9be8975bef32de4e3941396c9e50d9ad09c 100644 --- a/src/_cutecoin_test/models/test_person.py +++ b/src/_cutecoin_test/models/test_person.py @@ -7,41 +7,41 @@ from cutecoin.models.community import Community @pytest.fixture def mock_lookup_get(): - mock_get = Mock(spec = ucoin.pks.Lookup.__get__) - mock_get.return_value = [ - { - "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", - "raw":"-----BEGIN PGP PUBLIC KEY BLOCK----- ... -----END PGP PUBLIC KEY BLOCK-----\r\n" - } - }, - { - "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", - "raw":"-----BEGIN PGP PUBLIC KEY BLOCK----- ... -----END PGP PUBLIC KEY BLOCK-----\r\n" - } - }] - return mock_get + mock_get = Mock(spec = ucoin.pks.Lookup.__get__) + mock_get.return_value = [ + { + "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", + "raw":"-----BEGIN PGP PUBLIC KEY BLOCK----- ... -----END PGP PUBLIC KEY BLOCK-----\r\n" + } + }, + { + "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", + "raw":"-----BEGIN PGP PUBLIC KEY BLOCK----- ... -----END PGP PUBLIC KEY BLOCK-----\r\n" + } + }] + return mock_get #TODO: Lookup for person after community was tested class Test_Person(): - def test_person_lookup(self, monkeypatch): - pass - + def test_person_lookup(self, monkeypatch): + pass + - def test_person_jsonify(self): - pass + def test_person_jsonify(self): + pass - def test_person_from_json(self): - pass + def test_person_from_json(self): + pass diff --git a/src/_cutecoin_test/models/test_wallet.py b/src/_cutecoin_test/models/test_wallet.py index 37374c3202c9b4d4980062bb21d0d327454e5f29..cc4d0f50c73b2267d2b5f104c4278727cc5125f0 100644 --- a/src/_cutecoin_test/models/test_wallet.py +++ b/src/_cutecoin_test/models/test_wallet.py @@ -1,65 +1,52 @@ import pytest import ucoinpy as ucoin -from mock import Mock +from mock import Mock, patch from cutecoin.models.wallet import Wallet -from cutecoin.models.community import Community +from cutecoin.models.community import Community, CommunityNetwork @pytest.fixture -def mock_coins_list_get(): - mock_get = Mock(spec=ucoin.hdc.coins.List.__get__) - mock_get.return_value = { - "owner": "86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8", - "coins": [{ - "issuer": "86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8", - "ids": ["1-5-2-A-1", "2-4-1-A-1"] - },{ - "issuer": "31A6302161AC8F5938969E85399EB3415C237F93", - "ids": ["10-1-2-F-14"] - }] - } - return mock_get - - -@pytest.fixture -def mock_community_request(request, mock_coins_list_get): - if request == ucoin.hdc.coins.List.get: - return mock_coins_list_get() - else: - return "Failed !" - - -@pytest.fixture -def mock_community(mock_community_request): - community = Mock(spec=Community) - instance = community.return_value - instance.network.request.return_value = mock_community_request - return community +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 = Mock(spec=Community, network=mock_network) + + return community class Test_Wallet: - def test_wallet_create(self, mock_community): - wallet = Wallet([], mock_community) - assert wallet is not None - - - def test_wallet_load(self): - pass - + def test_wallet_create(self, mock_community): + wallet = Wallet([], mock_community) + assert wallet is not None - def test_wallet_value(self, mock_community): - wallet = Wallet([], mock_community) - assert wallet.value() == 640 - - pass + + def test_wallet_load(self): + pass - def test_wallet_refresh_coins(self): - pass + def test_wallet_value(self, mock_community): + wallet = Wallet([], mock_community) + assert wallet.value() == 0 + wallet.refresh_coins("86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8") + assert wallet.value() == 640 + pass - def test_wallet_get_text(self): - pass + def test_wallet_get_text(self): + pass - def test_wallet_jsonify(self): - pass + def test_wallet_jsonify(self): + pass diff --git a/src/cutecoin/models/community/__init__.py b/src/cutecoin/models/community/__init__.py index f7d488cee4d4eab322924b3e1703d7c948b6c756..875329cdc88eee817e7b908e32157dbd45d60b54 100644 --- a/src/cutecoin/models/community/__init__.py +++ b/src/cutecoin/models/community/__init__.py @@ -26,6 +26,9 @@ 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'] @@ -70,12 +73,12 @@ class Community(object): def dividend(self): current_amendment = self.network.request(ucoin.hdc.amendments.Current()) - return current_amendment['dividend'] + return int(current_amendment['dividend']) def coin_minimal_power(self): current_amendment = self.network.request(ucoin.hdc.amendments.Current()) if 'coinMinimalPower' in current_amendment.keys(): - return current_amendment['coinMinimalPower'] + return int(current_amendment['coinMinimalPower']) else: return 0 @@ -90,7 +93,7 @@ class Community(object): def amendment_number(self): current_amendment = self.network.request(ucoin.hdc.amendments.Current()) - return current_amendment['number'] + return int(current_amendment['number']) def person_quality(self, fingerprint): if (fingerprint in self.voters_fingerprints()): @@ -106,7 +109,7 @@ class Community(object): ''' fingerprints = self.network.request( ucoin.hdc.amendments.view.Members( - self.amendment_id())) + amendment_id=self.amendment_id())) members = [] for f in fingerprints: members.append(f['value']) @@ -118,7 +121,7 @@ class Community(object): ''' fingerprints = self.network.request( ucoin.hdc.amendments.view.Voters( - self.amendment_id())) + amendment_id=self.amendment_id())) voters = [] for f in fingerprints: voters.append(f['value']) diff --git a/src/cutecoin/models/community/network.py b/src/cutecoin/models/community/network.py index 93a855c40f0b94a71330c0ad1aaff12d67b6d232..697e94a88a0bbfbe137dd05959d41b3357bfd135 100644 --- a/src/cutecoin/models/community/network.py +++ b/src/cutecoin/models/community/network.py @@ -22,14 +22,14 @@ class CommunityNetwork(object): def request(self, request, get_args={}): for node in self.trusts(): logging.debug("Trying to connect to : " + node.getText()) - request = node.use(request) + 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()) - request = node.use(request) + node.use(request) return request.post(**get_args) raise RuntimeError("Cannot connect to any node")