Unflake folder watcher test (#13569)

* Unflake folder watcher test

* Fix tests

* Lint
This commit is contained in:
Paulus Schoutsen 2018-04-01 08:30:14 -07:00 committed by GitHub
parent 0c0e0c36af
commit ff9f500c51
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 44 additions and 56 deletions

View File

@ -202,8 +202,5 @@ wakeonlan==1.0.0
# homeassistant.components.cloud # homeassistant.components.cloud
warrant==0.6.1 warrant==0.6.1
# homeassistant.components.folder_watcher
watchdog==0.8.3
# homeassistant.components.sensor.yahoo_finance # homeassistant.components.sensor.yahoo_finance
yahoo-finance==1.4.0 yahoo-finance==1.4.0

View File

@ -91,7 +91,6 @@ TEST_REQUIREMENTS = (
'yahoo-finance', 'yahoo-finance',
'pythonwhois', 'pythonwhois',
'wakeonlan', 'wakeonlan',
'watchdog',
'vultr' 'vultr'
) )

View File

@ -1,64 +1,56 @@
"""The tests for the folder_watcher component.""" """The tests for the folder_watcher component."""
import unittest from unittest.mock import Mock, patch
from unittest.mock import MagicMock
import os import os
from homeassistant.components import folder_watcher from homeassistant.components import folder_watcher
from homeassistant.setup import setup_component from homeassistant.setup import async_setup_component
from tests.common import get_test_home_assistant from tests.common import MockDependency
CWD = os.path.join(os.path.dirname(__file__))
FILE = 'file.txt'
class TestFolderWatcher(unittest.TestCase): async def test_invalid_path_setup(hass):
"""Test the file_watcher component."""
def setup_method(self, method):
"""Set up things to be run when tests are started."""
self.hass = get_test_home_assistant()
self.hass.config.whitelist_external_dirs = set((CWD))
def teardown_method(self, method):
"""Stop everything that was started."""
self.hass.stop()
def test_invalid_path_setup(self):
"""Test that a invalid path is not setup.""" """Test that a invalid path is not setup."""
config = { assert not await async_setup_component(
folder_watcher.DOMAIN: [{ hass, folder_watcher.DOMAIN, {
folder_watcher.DOMAIN: {
folder_watcher.CONF_FOLDER: 'invalid_path' folder_watcher.CONF_FOLDER: 'invalid_path'
}]
} }
self.assertFalse( })
setup_component(self.hass, folder_watcher.DOMAIN, config))
def test_valid_path_setup(self):
async def test_valid_path_setup(hass):
"""Test that a valid path is setup.""" """Test that a valid path is setup."""
config = { cwd = os.path.join(os.path.dirname(__file__))
folder_watcher.DOMAIN: [{folder_watcher.CONF_FOLDER: CWD}] hass.config.whitelist_external_dirs = set((cwd))
} with patch.object(folder_watcher, 'Watcher'):
assert await async_setup_component(
hass, folder_watcher.DOMAIN, {
folder_watcher.DOMAIN: {folder_watcher.CONF_FOLDER: cwd}
})
self.assertTrue(setup_component(
self.hass, folder_watcher.DOMAIN, config))
def test_event(self): @MockDependency('watchdog', 'events')
def test_event(mock_watchdog):
"""Check that HASS events are fired correctly on watchdog event.""" """Check that HASS events are fired correctly on watchdog event."""
from watchdog.events import FileModifiedEvent class MockPatternMatchingEventHandler:
"""Mock base class for the pattern matcher event handler."""
# Cant use setup_component as need to retrieve Watcher object. def __init__(self, patterns):
w = folder_watcher.Watcher(CWD, pass
folder_watcher.DEFAULT_PATTERN,
self.hass)
w.startup(None)
self.hass.bus.fire = MagicMock() mock_watchdog.events.PatternMatchingEventHandler = \
MockPatternMatchingEventHandler
# Trigger a fake filesystem event through the Watcher Observer emitter. hass = Mock()
(emitter,) = w._observer.emitters handler = folder_watcher.create_event_handler(['*'], hass)
emitter.queue_event(FileModifiedEvent(FILE)) handler.on_created(Mock(
is_directory=False,
# Wait for the event to propagate. src_path='/hello/world.txt',
self.hass.block_till_done() event_type='created'
))
assert self.hass.bus.fire.called assert hass.bus.fire.called
assert hass.bus.fire.mock_calls[0][1][0] == folder_watcher.DOMAIN
assert hass.bus.fire.mock_calls[0][1][1] == {
'event_type': 'created',
'path': '/hello/world.txt',
'file': 'world.txt',
'folder': '/hello',
}