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() assert "Test" == sensor.state assert "Test Message" == sensor.device_state_attributes["body"] assert "*****@*****.**" == sensor.device_state_attributes["from"] assert "Test" == sensor.device_state_attributes["subject"] assert ( datetime.datetime(2016, 1, 1, 12, 44, 57) == sensor.device_state_attributes["date"] )
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"]
async def test_multi_part_only_html(hass): """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( hass, FakeEMailReader(deque([msg])), "test_emails_sensor", ["*****@*****.**"], None, ) sensor.entity_id = "sensor.emailtest" sensor.async_schedule_update_ha_state(True) await hass.async_block_till_done() assert sensor.state == "Link" assert (sensor.extra_state_attributes["body"] == "<html><head></head><body>Test Message</body></html>")
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.schedule_update_ha_state(True) self.hass.block_till_done() assert 'Link' == sensor.state assert "Test Message" == \ sensor.device_state_attributes['body']
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.schedule_update_ha_state(True) self.hass.block_till_done() assert sensor.state is None
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.schedule_update_ha_state(True) self.hass.block_till_done() assert "Test from [email protected] with message Test Message" == \ sensor.state
async def test_sender_not_allowed(hass): """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( hass, FakeEMailReader(deque([test_message])), "test_emails_sensor", ["*****@*****.**"], None, ) sensor.entity_id = "sensor.emailtest" sensor.async_schedule_update_ha_state(True) await hass.async_block_till_done() assert sensor.state is None
async def test_multiple_emails(hass): """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) async_track_state_change(hass, ["sensor.emailtest"], state_changed_listener) sensor = imap_email_content.EmailContentSensor( hass, FakeEMailReader(deque([test_message1, test_message2])), "test_emails_sensor", ["*****@*****.**"], None, ) sensor.entity_id = "sensor.emailtest" sensor.async_schedule_update_ha_state(True) await hass.async_block_till_done() sensor.async_schedule_update_ha_state(True) await hass.async_block_till_done() assert states[0].state == "Test" assert states[1].state == "Test 2" assert sensor.extra_state_attributes["body"] == "Test Message 2"
async def test_template(hass): """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( hass, FakeEMailReader(deque([test_message])), "test_emails_sensor", ["*****@*****.**"], Template("{{ subject }} from {{ from }} with message {{ body }}", hass), ) sensor.entity_id = "sensor.emailtest" sensor.async_schedule_update_ha_state(True) await hass.async_block_till_done() assert sensor.state == "Test from [email protected] with message Test Message"
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_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() assert "Test" == states[0].state assert "Test 2" == states[1].state assert "Test Message 2" == \ 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() assert 'Test' == sensor.state assert "Test Message" == \ sensor.device_state_attributes['body'] assert '*****@*****.**' == \ sensor.device_state_attributes['from'] assert 'Test' == sensor.device_state_attributes['subject'] assert datetime.datetime(2016, 1, 1, 12, 44, 57) == \ sensor.device_state_attributes['date']