示例#1
0
    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'])
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
    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"])
示例#8
0
    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)
示例#9
0
    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)
示例#10
0
    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']
示例#11
0
    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'])