def test_multi_part_with_text(self): """Test multi part emails.""" msg = MIMEMultipart('alternative') msg['Subject'] = 'Link' msg['From'] = '*****@*****.**' text = "Test Message" html = "<html><head></head><body>Test Message</body></html>" textPart = MIMEText(text, 'plain') htmlPart = MIMEText(html, 'html') msg.attach(textPart) msg.attach(htmlPart) sensor = imap_email_content.EmailContentSensor( self.hass, FakeEMailReader(deque([msg])), 'test_emails_sensor', ['*****@*****.**'], None) sensor.entity_id = "sensor.emailtest" sensor.schedule_update_ha_state(True) self.hass.block_till_done() assert 'Link' == sensor.state assert "Test Message" == \ sensor.device_state_attributes['body']
def test_multi_part_only_html(self): """Test multi part emails with only HTML.""" msg = MIMEMultipart('alternative') msg['Subject'] = 'Link' msg['From'] = '*****@*****.**' html = "<html><head></head><body>Test Message</body></html>" htmlPart = MIMEText(html, 'html') msg.attach(htmlPart) sensor = imap_email_content.EmailContentSensor( self.hass, FakeEMailReader(deque([msg])), 'test_emails_sensor', ['*****@*****.**'], None) sensor.entity_id = 'sensor.emailtest' sensor.schedule_update_ha_state(True) self.hass.block_till_done() self.assertEqual('Link', sensor.state) self.assertEqual( "<html><head></head><body>Test Message</body></html>", sensor.device_state_attributes['body'])
def test_allowed_sender(self): """Test emails from allowed sender.""" test_message = email.message.Message() test_message['From'] = '*****@*****.**' test_message['Subject'] = 'Test' test_message['Date'] = datetime.datetime(2016, 1, 1, 12, 44, 57) test_message.set_payload("Test Message") sensor = imap_email_content.EmailContentSensor( self.hass, FakeEMailReader(deque([test_message])), "test_emails_sensor", ["*****@*****.**"], None) sensor.entity_id = 'sensor.emailtest' sensor.schedule_update_ha_state(True) self.hass.block_till_done() self.assertEqual('Test', sensor.state) self.assertEqual("Test Message", sensor.device_state_attributes['body']) self.assertEqual('*****@*****.**', sensor.device_state_attributes['from']) self.assertEqual('Test', sensor.device_state_attributes['subject']) self.assertEqual(datetime.datetime(2016, 1, 1, 12, 44, 57), sensor.device_state_attributes['date'])
def test_sender_not_allowed(self): """Test not whitelisted emails.""" test_message = email.message.Message() test_message['From'] = '*****@*****.**' test_message['Subject'] = 'Test' test_message['Date'] = datetime.datetime(2016, 1, 1, 12, 44, 57) test_message.set_payload("Test Message") sensor = imap_email_content.EmailContentSensor( self.hass, FakeEMailReader(deque([test_message])), 'test_emails_sensor', ['*****@*****.**'], None) sensor.entity_id = 'sensor.emailtest' sensor.update() self.assertEqual(None, sensor.state)
def test_template(self): """Test value template.""" test_message = email.message.Message() test_message['From'] = '*****@*****.**' test_message['Subject'] = 'Test' test_message['Date'] = datetime.datetime(2016, 1, 1, 12, 44, 57) test_message.set_payload("Test Message") sensor = imap_email_content.EmailContentSensor( self.hass, FakeEMailReader(deque([test_message])), 'test_emails_sensor', ['*****@*****.**'], Template("{{ subject }} from {{ from }} with message {{ body }}", self.hass)) sensor.entity_id = 'sensor.emailtest' sensor.update() self.assertEqual("Test from [email protected] with message Test Message", sensor.state)
def test_multi_part_only_other_text(self): """Test multi part emails with only other text.""" msg = MIMEMultipart('alternative') msg['Subject'] = 'Link' msg['From'] = '*****@*****.**' other = "Test Message" htmlPart = MIMEText(other, 'other') msg.attach(htmlPart) sensor = imap_email_content.EmailContentSensor( self.hass, FakeEMailReader(deque([msg])), 'test_emails_sensor', ['*****@*****.**'], None) sensor.entity_id = 'sensor.emailtest' sensor.update() self.assertEqual("Test Message", sensor.state)
def test_allowed_sender(self): """Test emails from allowed sender.""" test_message = email.message.Message() test_message['From'] = "*****@*****.**" test_message['Subject'] = "Test" test_message['Date'] = datetime.datetime(2016, 1, 1, 12, 44, 57) test_message.set_payload("Test Message") sensor = imap_email_content.EmailContentSensor( self.hass, FakeEMailReader(deque([test_message])), "test_emails_sensor", ["*****@*****.**"], None) sensor.entity_id = "sensor.emailtest" sensor.update() self.assertEqual("Test Message", sensor.state) self.assertEqual("*****@*****.**", sensor.state_attributes["from"]) self.assertEqual("Test", sensor.state_attributes["subject"]) self.assertEqual(datetime.datetime(2016, 1, 1, 12, 44, 57), sensor.state_attributes["date"])
def test_multi_part_only_html(self): """Test multi part emails with only HTML.""" msg = MIMEMultipart('alternative') msg['Subject'] = "Link" msg['From'] = "*****@*****.**" html = "<html><head></head><body>Test Message</body></html>" htmlPart = MIMEText(html, 'html') msg.attach(htmlPart) sensor = imap_email_content.EmailContentSensor( self.hass, FakeEMailReader(deque([msg])), 'test_emails_sensor', ['*****@*****.**'], None) sensor.entity_id = 'sensor.emailtest' sensor.update() self.assertEqual("<html><head></head><body>Test Message</body></html>", sensor.state)
def test_multiple_emails(self): """Test multiple emails.""" states = [] test_message1 = email.message.Message() test_message1['From'] = '*****@*****.**' test_message1['Subject'] = 'Test' test_message1['Date'] = datetime.datetime(2016, 1, 1, 12, 44, 57) test_message1.set_payload("Test Message") test_message2 = email.message.Message() test_message2['From'] = '*****@*****.**' test_message2['Subject'] = 'Test 2' test_message2['Date'] = datetime.datetime(2016, 1, 1, 12, 44, 57) test_message2.set_payload("Test Message 2") states_received = Event() def state_changed_listener(entity_id, from_s, to_s): states.append(to_s) if len(states) == 2: states_received.set() track_state_change(self.hass, ['sensor.emailtest'], state_changed_listener) sensor = imap_email_content.EmailContentSensor( self.hass, FakeEMailReader(deque([test_message1, test_message2])), 'test_emails_sensor', ['*****@*****.**'], None) sensor.entity_id = 'sensor.emailtest' sensor.update() self.hass.block_till_done() states_received.wait(5) self.assertEqual("Test Message", states[0].state) self.assertEqual("Test Message 2", states[1].state) self.assertEqual("Test Message 2", sensor.state)
def test_multi_part_only_other_text(self): """Test multi part emails with only other text.""" msg = MIMEMultipart('alternative') msg['Subject'] = 'Link' msg['From'] = '*****@*****.**' other = "Test Message" htmlPart = MIMEText(other, 'other') msg.attach(htmlPart) sensor = imap_email_content.EmailContentSensor( self.hass, FakeEMailReader(deque([msg])), 'test_emails_sensor', ['*****@*****.**'], None) sensor.entity_id = 'sensor.emailtest' sensor.schedule_update_ha_state(True) self.hass.block_till_done() assert 'Link' == sensor.state assert "Test Message" == \ sensor.device_state_attributes['body']
def test_multi_part_with_text(self): """Test multi part emails.""" msg = MIMEMultipart('alternative') msg['Subject'] = 'Link' msg['From'] = '*****@*****.**' text = "Test Message" html = "<html><head></head><body>Test Message</body></html>" textPart = MIMEText(text, 'plain') htmlPart = MIMEText(html, 'html') msg.attach(textPart) msg.attach(htmlPart) sensor = imap_email_content.EmailContentSensor( self.hass, FakeEMailReader(deque([msg])), 'test_emails_sensor', ['*****@*****.**'], None) sensor.entity_id = "sensor.emailtest" sensor.update() self.assertEqual("Test Message", sensor.state)
def test_multiple_emails(self): """Test multiple emails.""" states = [] test_message1 = email.message.Message() test_message1['From'] = '*****@*****.**' test_message1['Subject'] = 'Test' test_message1['Date'] = datetime.datetime(2016, 1, 1, 12, 44, 57) test_message1.set_payload("Test Message") test_message2 = email.message.Message() test_message2['From'] = '*****@*****.**' test_message2['Subject'] = 'Test 2' test_message2['Date'] = datetime.datetime(2016, 1, 1, 12, 44, 57) test_message2.set_payload("Test Message 2") def state_changed_listener(entity_id, from_s, to_s): states.append(to_s) track_state_change( self.hass, ['sensor.emailtest'], state_changed_listener) sensor = imap_email_content.EmailContentSensor( self.hass, FakeEMailReader(deque([test_message1, test_message2])), 'test_emails_sensor', ['*****@*****.**'], None) sensor.entity_id = 'sensor.emailtest' sensor.schedule_update_ha_state(True) self.hass.block_till_done() sensor.schedule_update_ha_state(True) self.hass.block_till_done() self.assertEqual("Test", states[0].state) self.assertEqual("Test 2", states[1].state) self.assertEqual("Test Message 2", sensor.device_state_attributes['body'])