def setUp():

    # Setup the state
        # Deploy contract
        # Mint token
        # Call accept() from the minter
        
    # Setup web3 and state
    url = "HTTP://127.0.0.1"
    port = 8545
    w3 = Web3(Web3.HTTPProvider(url+":"+str(port)))

    abi, bytecode = readContractData(contract_path)

    contract_minter = w3.eth.accounts[0]
    bob = w3.eth.accounts[1]

    token_instance = create_contract(w3, abi, bytecode, contract_minter)

    # Create a token
    tokenId = 123
    tokenURI = "weapons/"
    assetId = w3.toBytes(text="Vorpal Sword")

    tx_hash = token_instance.functions.mint(bob, tokenId, tokenURI, assetId).transact({'from': contract_minter})
    w3.eth.waitForTransactionReceipt(tx_hash)

    t = Transfer()
    t.data = dict()
    t.data["assetId"] = tokenId

    return (contract_minter, token_instance, url, port, t)
async def test_interledger_run_with_restore_sent():

    base = "sofie_asset_transfer"
    package = base + ".interledger.StateInterledger"

    # Create a transfer already half processed
    # for protocol PoW, it should have state (TransferOut | NotHere)
    t = Transfer()
    t.data = {}
    t.data["assetId"] = 123
    t.state = State.RESPONDED
    t.future = asyncio.Future()
    t.future.set_result({"status": True})
    t.result = {"status": True}

    with patch(package + ".restore_pending_transfers_ready",
               return_value=[]) as mock_ready:
        with patch(package + ".restore_pending_transfers_sent",
                   return_value=[t]) as mock_sent:

            interledger = StateInterledger(StateInitiator(), StateResponder())

            init = base + ".state_interfaces.StateInitiator"
            resp = base + ".state_interfaces.StateResponder"
            get_future = asyncio.Future()
            receive_future = asyncio.Future()
            commit_future = asyncio.Future()
            get_future.set_result([])
            receive_future.set_result({"status": True})
            commit_future.set_result(True)

            with patch(init + ".get_transfers",
                       return_value=get_future) as mock_get_transfers:
                with patch(
                        resp + ".receive_transfer",
                        return_value=receive_future) as mock_receive_transfer:
                    with patch(init + ".commit_transfer",
                               return_value=commit_future) as mock_commit:
                        with patch(base + ".interledger.Interledger.cleanup"
                                   ) as mock_cleanup:
                            # mock cleanup to check the transfer reaches the end

                            time = 1
                            task = asyncio.ensure_future(interledger.run())
                            await asyncio.sleep(time)
                            interledger.stop()
                            await task

                            assert len(interledger.transfers_sent) == 1
                            assert len(interledger.results_commit) == 1
                            assert interledger.pending == 0