def test_sendmany_good_simple(self):
        with patch('neo.Prompt.Commands.Send.prompt',
                   side_effect=[
                       "neo", self.watch_addr_str, "1", "gas",
                       self.watch_addr_str, "1",
                       UserWalletTestCase.wallet_1_pass()
                   ]):

            wallet = self.GetWallet1(recreate=True)
            args = ["2"]

            framework = construct_send_many(wallet, args)
            res = process_transaction(wallet,
                                      contract_tx=framework[0],
                                      scripthash_from=framework[1],
                                      scripthash_change=framework[2],
                                      fee=framework[3],
                                      owners=framework[4],
                                      user_tx_attributes=framework[5])

            self.assertTrue(res)  # verify successful tx

            json_res = res.ToJson()
            self.assertEqual(
                self.watch_addr_str,
                json_res['vout'][0]['address'])  # verify correct address_to

            # check for 2 transfers
            transfers = 0
            for info in json_res['vout']:
                if info['address'] == self.watch_addr_str:
                    transfers += 1
            self.assertEqual(2, transfers)
    def test_sendmany_weird_outgoing(self):

        wallet = self.GetWallet1(recreate=True)
        args = ['0.5']  # weird number outgoing

        framework = construct_send_many(wallet, args)

        self.assertFalse(framework)
    def test_sendmany_bad_outgoing(self):

        wallet = self.GetWallet1(recreate=True)
        args = ['0']  # too few outgoing

        framework = construct_send_many(wallet, args)

        self.assertFalse(framework)
    def test_sendmany_no_wallet(self):

        wallet = None
        args = ['2']

        framework = construct_send_many(wallet, args)

        self.assertFalse(framework)
    def test_sendmany_negative_fee(self):
        with patch('neo.Prompt.Commands.Send.prompt',
                   side_effect=[
                       "neo", self.watch_addr_str, "1", "gas",
                       self.watch_addr_str, "1"
                   ]):
            wallet = self.GetWallet1(recreate=True)
            args = ['2', '--fee=-0.005']

            framework = construct_send_many(wallet, args)

            self.assertFalse(framework)
    def test_sendmany_bad_precision_amount(self):
        with patch('neo.Prompt.Commands.Send.prompt',
                   side_effect=[
                       "gas", self.watch_addr_str, "1", "neo",
                       self.watch_addr_str, "5.01"
                   ]):
            wallet = self.GetWallet1(recreate=True)
            args = ['2']

            framework = construct_send_many(wallet, args)

            self.assertFalse(framework)
    def test_sendmany_bad_change_address(self):
        with patch('neo.Prompt.Commands.Send.prompt',
                   side_effect=[
                       "neo", self.watch_addr_str, "1", "gas",
                       self.watch_addr_str, "1"
                   ]):
            wallet = self.GetWallet1(recreate=True)
            change_address = '--change-addr=AGYaEi3W6ndHPUmW7T12FFfsbQ6DWymkE'  # change address is too short causing ToScriptHash to fail
            args = ['2', change_address]

            framework = construct_send_many(wallet, args)

            self.assertFalse(framework)
    def test_sendmany_bad_address_from(self):
        with patch('neo.Prompt.Commands.Send.prompt',
                   side_effect=[
                       "neo", self.watch_addr_str, "1", "gas",
                       self.watch_addr_str, "1"
                   ]):
            wallet = self.GetWallet1(recreate=True)
            address_from = '--from-addr=AJQ6FoaSXDFzA6wLnyZ1nFN7SGSN2oNTc'  # address_from is too short causing ToScriptHash to fail
            args = ['2', address_from]

            framework = construct_send_many(wallet, args)

            self.assertFalse(framework)
    def test_sendmany_bad_address_to(self):
        with patch('neo.Prompt.Commands.Send.prompt',
                   side_effect=[
                       "neo", self.watch_addr_str, "1", "gas",
                       "AGYaEi3W6ndHPUmW7T12FFfsbQ6DWymkE", "1"
                   ]):  # address is too short

            wallet = self.GetWallet1(recreate=True)
            args = ['2']

            framework = construct_send_many(wallet, args)

            self.assertFalse(framework)
    def test_sendmany_token(self):
        with patch('neo.Prompt.Commands.Send.prompt',
                   side_effect=[
                       "neo", self.watch_addr_str, "1", "NXT4",
                       self.watch_addr_str, "32"
                   ]):
            wallet = self.GetWallet1(recreate=True)

            token_hash = '31730cc9a1844891a3bafd1aa929a4142860d8d3'
            ImportToken(wallet, token_hash)

            args = ["2", '--from-addr=%s' % self.wallet_1_addr]

            framework = construct_send_many(wallet, args)

            self.assertFalse(framework)
    def test_sendmany_good_complex(self):
        with patch('neo.Prompt.Commands.Send.prompt',
                   side_effect=[
                       "neo", "AXjaFSP23Jkbe6Pk9pPGT6NBDs1HVdqaXK", "1", "gas",
                       "AXjaFSP23Jkbe6Pk9pPGT6NBDs1HVdqaXK", "1",
                       UserWalletTestCase.wallet_1_pass()
                   ]):
            wallet = self.GetWallet1(recreate=True)
            args = [
                "2",
                '--from-addr=%s' % self.wallet_1_addr,
                '--change-addr=%s' % self.watch_addr_str, '--fee=0.005'
            ]

            address_from_account_state = Blockchain.Default().GetAccountState(
                self.wallet_1_addr).ToJson()
            address_from_gas_bal = address_from_account_state['balances'][
                '0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7']

            framework = construct_send_many(wallet, args)
            res = process_transaction(wallet,
                                      contract_tx=framework[0],
                                      scripthash_from=framework[1],
                                      scripthash_change=framework[2],
                                      fee=framework[3],
                                      owners=framework[4],
                                      user_tx_attributes=framework[5])

            self.assertTrue(res)  # verify successful tx

            json_res = res.ToJson()
            self.assertEqual(
                "AXjaFSP23Jkbe6Pk9pPGT6NBDs1HVdqaXK",
                json_res['vout'][0]['address'])  # verify correct address_to
            self.assertEqual(self.watch_addr_str, json_res['vout'][2]
                             ['address'])  # verify correct change address
            self.assertEqual(
                float(address_from_gas_bal) - 1 - 0.005,
                float(json_res['vout'][3]['value']))
            self.assertEqual('0.005', json_res['net_fee'])