rest_command component should support PATCH method (#27989)

Without PATCH the rest_command component lacks full RESTful API
support.
pull/28054/head
Matthew Turney 2019-10-21 04:20:18 -05:00 committed by Fabian Affolter
parent 1e832dc9ec
commit 6c48abcaa5
2 changed files with 28 additions and 11 deletions

View File

@ -28,7 +28,7 @@ DEFAULT_TIMEOUT = 10
DEFAULT_METHOD = "get"
DEFAULT_VERIFY_SSL = True
SUPPORT_REST_METHODS = ["get", "post", "put", "delete"]
SUPPORT_REST_METHODS = ["get", "patch", "post", "put", "delete"]
CONF_CONTENT_TYPE = "content_type"

View File

@ -51,6 +51,7 @@ class TestRestCommandComponent:
self.config = {
rc.DOMAIN: {
"get_test": {"url": self.url, "method": "get"},
"patch_test": {"url": self.url, "method": "patch"},
"post_test": {"url": self.url, "method": "post"},
"put_test": {"url": self.url, "method": "put"},
"delete_test": {"url": self.url, "method": "delete"},
@ -65,7 +66,7 @@ class TestRestCommandComponent:
def test_setup_tests(self):
"""Set up test config and test it."""
with assert_setup_component(4):
with assert_setup_component(5):
setup_component(self.hass, rc.DOMAIN, self.config)
assert self.hass.services.has_service(rc.DOMAIN, "get_test")
@ -75,7 +76,7 @@ class TestRestCommandComponent:
def test_rest_command_timeout(self, aioclient_mock):
"""Call a rest command with timeout."""
with assert_setup_component(4):
with assert_setup_component(5):
setup_component(self.hass, rc.DOMAIN, self.config)
aioclient_mock.get(self.url, exc=asyncio.TimeoutError())
@ -87,7 +88,7 @@ class TestRestCommandComponent:
def test_rest_command_aiohttp_error(self, aioclient_mock):
"""Call a rest command with aiohttp exception."""
with assert_setup_component(4):
with assert_setup_component(5):
setup_component(self.hass, rc.DOMAIN, self.config)
aioclient_mock.get(self.url, exc=aiohttp.ClientError())
@ -99,7 +100,7 @@ class TestRestCommandComponent:
def test_rest_command_http_error(self, aioclient_mock):
"""Call a rest command with status code 400."""
with assert_setup_component(4):
with assert_setup_component(5):
setup_component(self.hass, rc.DOMAIN, self.config)
aioclient_mock.get(self.url, status=400)
@ -114,7 +115,7 @@ class TestRestCommandComponent:
data = {"username": "test", "password": "123456"}
self.config[rc.DOMAIN]["get_test"].update(data)
with assert_setup_component(4):
with assert_setup_component(5):
setup_component(self.hass, rc.DOMAIN, self.config)
aioclient_mock.get(self.url, content=b"success")
@ -129,7 +130,7 @@ class TestRestCommandComponent:
data = {"payload": "test"}
self.config[rc.DOMAIN]["post_test"].update(data)
with assert_setup_component(4):
with assert_setup_component(5):
setup_component(self.hass, rc.DOMAIN, self.config)
aioclient_mock.post(self.url, content=b"success")
@ -142,7 +143,7 @@ class TestRestCommandComponent:
def test_rest_command_get(self, aioclient_mock):
"""Call a rest command with get."""
with assert_setup_component(4):
with assert_setup_component(5):
setup_component(self.hass, rc.DOMAIN, self.config)
aioclient_mock.get(self.url, content=b"success")
@ -154,7 +155,7 @@ class TestRestCommandComponent:
def test_rest_command_delete(self, aioclient_mock):
"""Call a rest command with delete."""
with assert_setup_component(4):
with assert_setup_component(5):
setup_component(self.hass, rc.DOMAIN, self.config)
aioclient_mock.delete(self.url, content=b"success")
@ -164,12 +165,28 @@ class TestRestCommandComponent:
assert len(aioclient_mock.mock_calls) == 1
def test_rest_command_patch(self, aioclient_mock):
"""Call a rest command with patch."""
data = {"payload": "data"}
self.config[rc.DOMAIN]["patch_test"].update(data)
with assert_setup_component(5):
setup_component(self.hass, rc.DOMAIN, self.config)
aioclient_mock.patch(self.url, content=b"success")
self.hass.services.call(rc.DOMAIN, "patch_test", {})
self.hass.block_till_done()
assert len(aioclient_mock.mock_calls) == 1
assert aioclient_mock.mock_calls[0][2] == b"data"
def test_rest_command_post(self, aioclient_mock):
"""Call a rest command with post."""
data = {"payload": "data"}
self.config[rc.DOMAIN]["post_test"].update(data)
with assert_setup_component(4):
with assert_setup_component(5):
setup_component(self.hass, rc.DOMAIN, self.config)
aioclient_mock.post(self.url, content=b"success")
@ -185,7 +202,7 @@ class TestRestCommandComponent:
data = {"payload": "data"}
self.config[rc.DOMAIN]["put_test"].update(data)
with assert_setup_component(4):
with assert_setup_component(5):
setup_component(self.hass, rc.DOMAIN, self.config)
aioclient_mock.put(self.url, content=b"success")