# standard imports import json from io import StringIO # third-party imports import pytest # local imports from cic_ussd.translation import translation_for from cic_ussd.transactions import truncate @pytest.fixture(scope='function') def mock_meta_post_response(): return { 'name': 'cic', 'version': '1', 'ext': { 'network': { 'name': 'pgp', 'version': '2' }, 'engine': { 'name': 'automerge', 'version': '0.14.1' } }, 'payload': '["~#iL",[["~#iM",["ops",["^0",[["^1",["action","set","obj","00000000-0000-0000-0000-000000000000",' '"key","id","value","7e2f58335a69ac82f9a965a8fc35403c8585ea601946d858ee97684a285bf857"]],["^1",' '["action","set","obj","00000000-0000-0000-0000-000000000000","key","timestamp","value",' '1613487781]], ' '["^1",["action","set","obj","00000000-0000-0000-0000-000000000000","key","data","value",' '"{\\"foo\\": ' '\\"bar\\", \\"xyzzy\\": 42}"]]]],"actor","2b738a75-2aad-4ac8-ae8d-294a5ea4afad","seq",1,"deps",' '["^1", ' '[]],"message","Initialization","undoable",false]],["^1",["ops",["^0",[["^1",["action","makeMap",' '"obj","a921a5ae-0554-497a-ac2e-4e829d8a12b6"]],["^1",["action","set","obj",' '"a921a5ae-0554-497a-ac2e-4e829d8a12b6","key","digest","value","W10="]],["^1",["action","link",' '"obj", ' '"00000000-0000-0000-0000-000000000000","key","signature","value",' '"a921a5ae-0554-497a-ac2e-4e829d8a12b6"]]]],"actor","2b738a75-2aad-4ac8-ae8d-294a5ea4afad","seq",2,' '"deps",["^1",[]],"message","sign"]]]]', 'digest': 'W10=' } @pytest.fixture(scope='function') def mock_meta_get_response(): return { "foo": "bar", "xyzzy": 42 } @pytest.fixture(scope='function') def mock_notifier_api(mocker): messages = [] def mock_sms_api(self, message: str, recipient: str): pass def mock_send_sms_notification(self, key: str, phone_number: str, preferred_language: str, **kwargs): message = translation_for(key=key, preferred_language=preferred_language, **kwargs) messages.append({'message': message, 'recipient': phone_number}) mocker.patch('cic_notify.api.Api.sms', mock_sms_api) mocker.patch('cic_ussd.notifications.Notifier.send_sms_notification', mock_send_sms_notification) return messages @pytest.fixture(scope='function') def mock_outgoing_transactions(mocker): transactions = [] def mock_process_outgoing_transfer_transaction(self, amount: int, token_symbol: str = 'SRF'): transactions.append({ 'amount': amount, 'token_symbol': token_symbol }) mocker.patch( 'cic_ussd.transactions.OutgoingTransactionProcessor.process_outgoing_transfer_transaction', mock_process_outgoing_transfer_transaction ) return transactions @pytest.fixture(scope='function') def mock_balance(mocker): mocked_operational_balance = mocker.patch('cic_ussd.accounts.BalanceManager.get_balances') def _mock_operational_balance(balance: int): mocked_operational_balance.return_value = truncate(value=balance, decimals=2) return _mock_operational_balance