def test_creating_a_client(mock_SMTP): """Test creating a client""" client = shawk.Client(username, password) assert (type(client) == shawk.Client) assert (str(client) == 'A Shawk SMS Client for [email protected]')
def test_remove_contact_by_name(mock_SMTP): """Test removing a contact by specifying its name""" client = shawk.Client(username, password) client.add_contact(number=1234567890, carrier='Verizon', name='Somebody') contacts_before = deepcopy(client.contacts) client.remove_contact(name='Somebody') contacts_after = client.contacts assert (contacts_before != contacts_after) assert (contacts_after == {})
def test_add_contact_with_name(mock_SMTP): """Test adding a contact with a name""" client = shawk.Client(username, password) contacts_before = deepcopy(client.contacts) client.add_contact(number=1234567890, carrier='Verizon', name='Somebody') contacts_after = client.contacts assert (contacts_before != contacts_after) assert ( str(contacts_after) == "{'1234567890': <shawk.Contact('1234567890', 'Verizon', 'Somebody')>}")
def test_send_message_by_address(mock_SMTP): """Test sending a message to an address""" client = shawk.Client(username, password) contact = client.add_contact(number=1234567890, carrier='Verizon', name='Somebody') address = contact.get_address() message = 'Testing' client.send(message, address=address) instance = mock_SMTP.return_value assert (instance.sendmail.call_count == 1) assert (instance.sendmail.mock_calls == [call('0', address, message)])
def test_sending_message_without_translating_emoji(mock_SMTP): """Test sending a message with emoji code but without emojizing it""" client = shawk.Client(username, password) client.disable_emojize() contact = client.add_contact(number=1234567890, carrier='Verizon', name='Somebody') smtp_instance = mock_SMTP.return_value address = contact.get_address() message = 'Testing :thumbs_up_sign:' client.send(message, contact=contact) assert (smtp_instance.sendmail.call_count == 1) assert (smtp_instance.sendmail.mock_calls == [call('0', address, message)])
def test_sending_emoji_message_via_send_emojize(mock_SMTP): """Test sending a message with emoji by passing emojize=True to send""" client = shawk.Client(username, password) client.disable_emojize() contact = client.add_contact(number=1234567890, carrier='Verizon', name='Somebody') smtp_instance = mock_SMTP.return_value address = contact.get_address() message = 'Testing :thumbs_up_sign:' client.send(message, contact=contact, emojize=True) assert (smtp_instance.sendmail.call_count == 1) assert (smtp_instance.sendmail.mock_calls == [ call('0', address, emoji.emojize(message)) ])
def test_receiving_messages_manually(mock_IMAP, mock_SMTP): """Test receiving a simple text message""" client = shawk.Client(username, password) client.setup_inbox(password) imap_instance = client.imap spoof_contact = client.add_contact(number=1234567890, carrier='Verizon', name='Spoof') spoof_phone = SpoofPhone(imap_instance, spoof_contact) message_time = datetime.utcnow() spoof_phone.send('Testing', message_time) client.refresh() assert (imap_instance.copy.call_count == 1) assert (str(client.inbox) == str( [shawk.Message('Testing', spoof_phone.sender, message_time)]))
def test_receiving_emoji_message_demojized(mock_IMAP, mock_SMTP): """Test receiving a message with emoji translated back to text""" client = shawk.Client(username, password) client.setup_inbox(password) spoof_contact = client.add_contact(number=1234567890, carrier='Verizon', name='Spoof') spoof_phone = SpoofPhone(client.imap, spoof_contact) message_time = datetime.utcnow() original = 'Testing :thumbs_up_sign:' emojized = emoji.emojize(original, use_aliases=True) spoof_phone.send(original, time=message_time, emojize=True) client.refresh() assert (client.imap.copy.call_count == 1) assert (str(client.inbox) == str( [shawk.Message(original, spoof_phone.sender, message_time)]))
def test_adding_contact_handler_via_function(mock_IMAP, mock_SMTP): """Test adding a contact handler via function""" client = shawk.Client(username, password) client.setup_inbox(password) spoof_contact = client.add_contact(number=1234567890, carrier='Verizon', name='Spoof') spoof_phone = SpoofPhone(client.imap, spoof_contact) context = {} def contact_handler(client, message): context['did_call_contact_handler'] = True client.add_contact_handler(spoof_contact, contact_handler) spoof_phone.send('Testing') client.refresh() assert (context['did_call_contact_handler'])
def test_adding_text_handler_via_decorator_with_flags(mock_IMAP, mock_SMTP): """Test adding a text handler with regex via decorator with flags""" client = shawk.Client(username, password) client.setup_inbox(password) spoof_contact = client.add_contact(number=1234567890, carrier='Verizon', name='Spoof') spoof_phone = SpoofPhone(client.imap, spoof_contact) context = {} @client.text_handler('testing', 'i') def text_handler(client, message, match, regex): context['did_call_text_handler'] = True spoof_phone.send('Testing') client.refresh() assert (context['did_call_text_handler'])
def test_adding_default_text_handler_via_function(mock_IMAP, mock_SMTP): """Test adding a default text handler and verify that it replaces the stock handler""" client = shawk.Client(username, password) client.setup_inbox(password) spoof_contact = client.add_contact(number=1234567890, carrier='Verizon', name='Spoof') spoof_phone = SpoofPhone(client.imap, spoof_contact) context = {} def default_text_handler(client, message): context['did_call_default_text_handler'] = True client.set_default_text_handler(default_text_handler) spoof_phone.send('Testing') client.refresh() assert (context['did_call_default_text_handler'])
def test_receiving_messages_automatically(mock_IMAP, mock_SMTP): """Test receiving a simple text message automatically""" client = shawk.Client(username, password) client.setup_inbox(password, auto=True) imap_instance = client.imap spoof_contact = client.add_contact(number=1234567890, carrier='Verizon', name='Spoof') spoof_phone = SpoofPhone(imap_instance, spoof_contact) message_time = datetime.utcnow() spoof_phone.send('Testing', message_time) # TODO: How best should we wait for this? sleep(max(3, 2 * client.refresh_interval)) assert (imap_instance.copy.call_count == 1) assert (str(client.inbox) == str( [shawk.Message('Testing', spoof_phone.sender, message_time)]))
def test_adding_default_text_handler_via_decorator(mock_IMAP, mock_SMTP): """Test adding a default text handler and verify that it replaces the stock handler""" client = shawk.Client(username, password) client.setup_inbox(password) spoof_contact = client.add_contact(number=1234567890, carrier='Verizon', name='Spoof') spoof_phone = SpoofPhone(client.imap, spoof_contact) context = { } # HACK: Ugly way to avoid closure non-local scope issues in Python 2 @client.text_handler() def decorated_default_text_handler(client, message): context['did_call_decorated_default_text_handler'] = True spoof_phone.send('Testing') client.refresh() assert (context['did_call_decorated_default_text_handler'])
def test_removing_contact_handler(mock_IMAP, mock_SMTP): """Test removing a contact handler""" client = shawk.Client(username, password) client.setup_inbox(password) spoof_contact = client.add_contact(number=1234567890, carrier='Verizon', name='Spoof') spoof_phone = SpoofPhone(client.imap, spoof_contact) context = {} def contact_handler(client, message): context['did_call_text_handler'] = True client.add_contact_handler(spoof_contact, contact_handler) client.remove_text_handler(spoof_contact, contact_handler) spoof_phone.send('Testing') client.refresh() assert (not context.get('did_call_contact_handler', False))