# standard imports

# third-party imports
import pytest

# local imports
from cic_ussd.chain import Chain
from cic_ussd.transactions import OutgoingTransactionProcessor, truncate


def test_outgoing_transaction_processor(load_config,
                                        create_valid_tx_recipient,
                                        create_valid_tx_sender,
                                        mock_outgoing_transactions):
    chain_str = Chain.spec.__str__()
    outgoing_tx_processor = OutgoingTransactionProcessor(
        chain_str=chain_str,
        from_address=create_valid_tx_sender.blockchain_address,
        to_address=create_valid_tx_recipient.blockchain_address
    )

    outgoing_tx_processor.process_outgoing_transfer_transaction(
        amount=120,
        token_symbol='SRF'
    )
    assert mock_outgoing_transactions[0].get('amount') == 120.0
    assert mock_outgoing_transactions[0].get('token_symbol') == 'SRF'


@pytest.mark.parametrize("decimals, value, expected_result",[
    (3, 1234.32875, 1234.328),
    (2, 98.998, 98.99)
])
def test_truncate(decimals, value, expected_result):
    assert truncate(value=value, decimals=decimals).__float__() == expected_result