Exemple #1
0
    def test_transaction_status_propagation(self, db_session):

        task = BlockchainTask(uuid=str_uuid())

        assert task.status == 'UNSTARTED'

        transaction_1 = BlockchainTransaction()
        transaction_1.task = task
        transaction_1.status = 'PENDING'

        assert task.status == 'PENDING'

        transaction_2 = BlockchainTransaction()
        transaction_2.task = task
        transaction_2.status = 'SUCCESS'

        assert task.status == 'SUCCESS'
        assert task.status_code == 1

        db_session.add_all([task, transaction_1, transaction_2])
        db_session.commit()

        # Uses a custom expression so worth testing the filter
        queried_task = db_session.query(BlockchainTask).filter(
            BlockchainTask.status == 'SUCCESS').first()
        assert queried_task == task
Exemple #2
0
    def test_set_transaction_status(self, db_session):

        transaction = BlockchainTransaction()

        assert transaction.status == 'UNKNOWN'
        assert transaction.status_code == 99

        transaction.status = 'PENDING'

        assert transaction.status == 'PENDING'
        assert transaction.status_code == 2

        with pytest.raises(ValueError):
            transaction.status = 'NOT_A_STATUS'

        db_session.add(transaction)
        db_session.commit()

        # Uses a custom expression so worth testing the filter
        queried_transaction = db_session.query(BlockchainTransaction).filter(
            BlockchainTransaction.status_code == 2).first()
        assert queried_transaction == transaction
    def _claim_transaction_nonce(
        self,
        network_nonce: int,
        signing_wallet: BlockchainWallet,
        transaction: BlockchainTransaction,
    ) -> int:

        if transaction.nonce is not None:
            return transaction.nonce
        calculated_nonce = self._calculate_nonce(signing_wallet, network_nonce)
        transaction.signing_wallet = signing_wallet
        transaction.nonce = calculated_nonce
        transaction.status = 'PENDING'

        # TODO: can we shift this commit out?
        self.session.commit()

        return calculated_nonce