diff --git a/src/sakia/data/connectors/bma.py b/src/sakia/data/connectors/bma.py index 25e8ec205d51584af986985f53382a07732db7c9..2076a781d0da0578a126d276eeb99aabe919da86 100644 --- a/src/sakia/data/connectors/bma.py +++ b/src/sakia/data/connectors/bma.py @@ -282,7 +282,7 @@ class BmaConnector: replies = [] if len(endpoints) > 0: - with aiohttp.ClientSession() as session: + async with aiohttp.ClientSession() as session: for endpoint in endpoints: self._logger.debug("Trying to connect to : " + str(endpoint)) reply = asyncio.ensure_future(request(next(endpoint.conn_handler(session, diff --git a/src/sakia/gui/sub/transfer/model.py b/src/sakia/gui/sub/transfer/model.py index 86b758590837d9161d2ead704c2c399b31c52ab6..ee19bcba550bcffc32aaaa35e941c51cfca9538e 100644 --- a/src/sakia/gui/sub/transfer/model.py +++ b/src/sakia/gui/sub/transfer/model.py @@ -99,7 +99,9 @@ class TransferModel(QObject): if conn.pubkey == recipient: self.app.sources_service.parse_transaction(recipient, transaction) new_tx = self.app.transactions_service.parse_sent_transaction(recipient, transaction) - self.app.new_transfer.emit(conn, new_tx) + # Not all connections are concerned by chained tx + if new_tx: + self.app.new_transfer.emit(conn, new_tx) self.app.sources_refreshed.emit() self.app.db.commit() return result, transactions diff --git a/tests/conftest.py b/tests/conftest.py index 4a82164b4d090507e95ea4297088455f17cb33f7..0f0fdd73f905f52403c9edf4b69b507596c0e227 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -147,7 +147,7 @@ def simple_blockchain_forge(simple_forge, alice, bob): simple_forge.forge_block() simple_forge.set_member(alice.key.pubkey, True) simple_forge.set_member(bob.key.pubkey, True) - for i in range(0, 10): + for i in range(0, 100): new_user = mirage.User.create("test_currency", "user{0}".format(i), "salt{0}".format(i), "password{0}".format(i), simple_forge.blocks[-1].blockUID) @@ -228,6 +228,18 @@ def application_with_one_connection(application, simple_blockchain_forge, bob): return application + +@pytest.fixture +def application_with_two_connections(application_with_one_connection, simple_blockchain_forge, john): + connection = Connection(currency="test_currency", + pubkey=john.key.pubkey, uid="", + scrypt_N=mirage.User.SCRYPT_PARAMS.N, + scrypt_r=mirage.User.SCRYPT_PARAMS.r, + scrypt_p=mirage.User.SCRYPT_PARAMS.p, + blockstamp=str(BlockUID.empty())) + application_with_one_connection.db.connections_repo.insert(connection) + return application_with_one_connection + def unitttest_exception_handler(exceptions, loop, context): """ An exception handler which exists the program if the exception diff --git a/tests/functional/test_transfer_dialog.py b/tests/functional/test_transfer_dialog.py index 29f2aa1ea74a843bc95ed7d14108a25eb36ec4c6..bc098c34576456b0216a2d1e56e581baf1674484 100644 --- a/tests/functional/test_transfer_dialog.py +++ b/tests/functional/test_transfer_dialog.py @@ -32,5 +32,32 @@ async def test_transfer(application_with_one_connection, fake_server_with_blockc application_with_one_connection.loop.call_later(10, close_dialog) transfer_dialog.view.show() await exec_test() - #close_dialog() - #await fake_server_with_blockchain.close() + + +@pytest.mark.asyncio +async def test_transfer_chained_tx(application_with_two_connections, fake_server_with_blockchain, bob, john): + transfer_dialog = TransferController.create(None, application_with_two_connections) + + def close_dialog(): + if transfer_dialog.view.isVisible(): + transfer_dialog.view.hide() + + async def exec_test(): + QTest.mouseClick(transfer_dialog.view.radio_pubkey, Qt.LeftButton) + QTest.keyClicks(transfer_dialog.view.edit_pubkey, john.key.pubkey) + transfer_dialog.view.spinbox_amount.setValue(1000) + await asyncio.sleep(0.1) + assert not transfer_dialog.view.button_box.button(QDialogButtonBox.Ok).isEnabled() + await asyncio.sleep(0.1) + QTest.keyClicks(transfer_dialog.view.password_input.edit_secret_key, bob.salt) + QTest.keyClicks(transfer_dialog.view.password_input.edit_password, bob.password) + assert transfer_dialog.view.button_box.button(QDialogButtonBox.Ok).isEnabled() + QTest.mouseClick(transfer_dialog.view.button_box.button(QDialogButtonBox.Ok), Qt.LeftButton) + await asyncio.sleep(0.2) + assert isinstance(fake_server_with_blockchain.forge.pool[0], Transaction) + assert fake_server_with_blockchain.forge.pool[0].comment == "[CHAINED]" + assert isinstance(fake_server_with_blockchain.forge.pool[1], Transaction) + + application_with_two_connections.loop.call_later(10, close_dialog) + transfer_dialog.view.show() + await exec_test()