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"]
Exemple #3
0
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"]
Exemple #5
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']
Exemple #6
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.schedule_update_ha_state(True)
        self.hass.block_till_done()
        assert sensor.state is None
Exemple #7
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.schedule_update_ha_state(True)
        self.hass.block_till_done()
        assert "Test from [email protected] with message Test Message" == \
            sensor.state
Exemple #8
0
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
Exemple #9
0
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"
Exemple #10
0
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"
Exemple #11
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']
Exemple #12
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")

        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']
Exemple #13
0
    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']