import unittest
from unittest.mock import patch
import pump_execution as execution

class ProposalTests(unittest.TestCase):
    def test_invalid_mint_rejected_before_network(self):
        with patch.object(execution, 'fetch_new_coins') as fetch:
            result = execution.proposal_for_mint('bad OR query')
            self.assertFalse(result['eligible'])
            fetch.assert_not_called()

    def test_missing_checks_block_even_popular_coin(self):
        mint = '11111111111111111111111111111111'
        coin = {'mint': mint, 'symbol': 'TEST', 'risk_flags': []}
        with patch.object(execution, 'fetch_new_coins', return_value=[coin]), patch.object(execution, 'x_search', return_value={'configured': False, 'posts': [], 'message': 'Not configured'}):
            result = execution.proposal_for_mint(mint)
            self.assertFalse(result['eligible'])
            self.assertGreaterEqual(len(result['reasons']), 3)
            self.assertNotIn('transaction', result)

if __name__ == '__main__':
    unittest.main()
