# standard imports
import logging

# third-party imports
import pytest

# local imports
from cic_eth.db import Otx
from cic_eth.db.error import TxStateChangeError

logg = logging.getLogger()


# Check that invalid transitions throw exceptions
# sent
def test_db_queue_states(
        init_database,
        ):

    session = init_database

    # these values are completely arbitary
    tx_hash = '0xF182DFA3AD48723E7E222FE7B4C2C44C23CD4D7FF413E8999DFA15ECE53F'
    address = '0x38C5559D6EDDDA1F705D3AB1A664CA1B397EB119'
    signed_tx = '0xA5866A5383249AE843546BDA46235A1CA1614F538FB486140693C2EF1956FC53213F6AEF0F99F44D7103871AF3A12B126DCF9BFB7AF11143FAB3ECE2B452EE35D1320C4C7C6F999C8DF4EB09E729715B573F6672ED852547F552C4AE99D17DCD14C810'
    o = Otx(
            nonce=42,
            address=address[2:],
            tx_hash=tx_hash[2:],
            signed_tx=signed_tx[2:],
            )
    session.add(o)
    session.commit()

    o.sent(session=session)
    session.commit()

    # send after sent is ok
    o.sent(session=session)
    session.commit()

    o.sendfail(session=session)
    session.commit()

    with pytest.raises(TxStateChangeError):
        o.sendfail(session=session)

    o.sent(session=session)
    session.commit()

    o.minefail(1234, session=session)
    session.commit()

    with pytest.raises(TxStateChangeError):
        o.sent(session=session)