mirror of
https://github.com/home-assistant/core.git
synced 2025-07-14 08:47:10 +00:00
Add service backup.create_automatic (#136152)
This commit is contained in:
parent
33a2fa2c85
commit
a60d2b69e3
@ -88,8 +88,26 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||||||
password=None,
|
password=None,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def async_handle_create_automatic_service(call: ServiceCall) -> None:
|
||||||
|
"""Service handler for creating automatic backups."""
|
||||||
|
config_data = backup_manager.config.data
|
||||||
|
await backup_manager.async_create_backup(
|
||||||
|
agent_ids=config_data.create_backup.agent_ids,
|
||||||
|
include_addons=config_data.create_backup.include_addons,
|
||||||
|
include_all_addons=config_data.create_backup.include_all_addons,
|
||||||
|
include_database=config_data.create_backup.include_database,
|
||||||
|
include_folders=config_data.create_backup.include_folders,
|
||||||
|
include_homeassistant=True, # always include HA
|
||||||
|
name=config_data.create_backup.name,
|
||||||
|
password=config_data.create_backup.password,
|
||||||
|
with_automatic_settings=True,
|
||||||
|
)
|
||||||
|
|
||||||
if not with_hassio:
|
if not with_hassio:
|
||||||
hass.services.async_register(DOMAIN, "create", async_handle_create_service)
|
hass.services.async_register(DOMAIN, "create", async_handle_create_service)
|
||||||
|
hass.services.async_register(
|
||||||
|
DOMAIN, "create_automatic", async_handle_create_automatic_service
|
||||||
|
)
|
||||||
|
|
||||||
async_register_http_views(hass)
|
async_register_http_views(hass)
|
||||||
|
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
"services": {
|
"services": {
|
||||||
"create": {
|
"create": {
|
||||||
"service": "mdi:cloud-upload"
|
"service": "mdi:cloud-upload"
|
||||||
|
},
|
||||||
|
"create_automatic": {
|
||||||
|
"service": "mdi:cloud-upload"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1 +1,2 @@
|
|||||||
create:
|
create:
|
||||||
|
create_automatic:
|
||||||
|
@ -13,6 +13,10 @@
|
|||||||
"create": {
|
"create": {
|
||||||
"name": "Create backup",
|
"name": "Create backup",
|
||||||
"description": "Creates a new backup."
|
"description": "Creates a new backup."
|
||||||
|
},
|
||||||
|
"create_automatic": {
|
||||||
|
"name": "Create automatic backup",
|
||||||
|
"description": "Creates a new backup with automatic backup settings."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,8 @@ from homeassistant.exceptions import ServiceNotFound
|
|||||||
|
|
||||||
from .common import setup_backup_integration
|
from .common import setup_backup_integration
|
||||||
|
|
||||||
|
from tests.typing import WebSocketGenerator
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures("supervisor_client")
|
@pytest.mark.usefixtures("supervisor_client")
|
||||||
async def test_setup_with_hassio(
|
async def test_setup_with_hassio(
|
||||||
@ -45,7 +47,16 @@ async def test_create_service(
|
|||||||
service_data=service_data,
|
service_data=service_data,
|
||||||
)
|
)
|
||||||
|
|
||||||
assert generate_backup.called
|
generate_backup.assert_called_once_with(
|
||||||
|
agent_ids=["backup.local"],
|
||||||
|
include_addons=None,
|
||||||
|
include_all_addons=False,
|
||||||
|
include_database=True,
|
||||||
|
include_folders=None,
|
||||||
|
include_homeassistant=True,
|
||||||
|
name=None,
|
||||||
|
password=None,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_create_service_with_hassio(hass: HomeAssistant) -> None:
|
async def test_create_service_with_hassio(hass: HomeAssistant) -> None:
|
||||||
@ -54,3 +65,82 @@ async def test_create_service_with_hassio(hass: HomeAssistant) -> None:
|
|||||||
|
|
||||||
with pytest.raises(ServiceNotFound):
|
with pytest.raises(ServiceNotFound):
|
||||||
await hass.services.async_call(DOMAIN, "create", blocking=True)
|
await hass.services.async_call(DOMAIN, "create", blocking=True)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("commands", "expected_kwargs"),
|
||||||
|
[
|
||||||
|
(
|
||||||
|
[],
|
||||||
|
{
|
||||||
|
"agent_ids": [],
|
||||||
|
"include_addons": None,
|
||||||
|
"include_all_addons": False,
|
||||||
|
"include_database": True,
|
||||||
|
"include_folders": None,
|
||||||
|
"include_homeassistant": True,
|
||||||
|
"name": None,
|
||||||
|
"password": None,
|
||||||
|
"with_automatic_settings": True,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type": "backup/config/update",
|
||||||
|
"create_backup": {
|
||||||
|
"agent_ids": ["test-agent"],
|
||||||
|
"include_addons": ["my-addon"],
|
||||||
|
"include_all_addons": True,
|
||||||
|
"include_database": False,
|
||||||
|
"include_folders": ["share"],
|
||||||
|
"name": "cool_backup",
|
||||||
|
"password": "hunter2",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"agent_ids": ["test-agent"],
|
||||||
|
"include_addons": ["my-addon"],
|
||||||
|
"include_all_addons": True,
|
||||||
|
"include_database": False,
|
||||||
|
"include_folders": ["share"],
|
||||||
|
"include_homeassistant": True,
|
||||||
|
"name": "cool_backup",
|
||||||
|
"password": "hunter2",
|
||||||
|
"with_automatic_settings": True,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
@pytest.mark.parametrize("service_data", [None, {}])
|
||||||
|
@pytest.mark.parametrize("with_hassio", [True, False])
|
||||||
|
@pytest.mark.usefixtures("supervisor_client")
|
||||||
|
async def test_create_automatic_service(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
hass_ws_client: WebSocketGenerator,
|
||||||
|
commands: list[dict[str, Any]],
|
||||||
|
expected_kwargs: dict[str, Any],
|
||||||
|
service_data: dict[str, Any] | None,
|
||||||
|
with_hassio: bool,
|
||||||
|
) -> None:
|
||||||
|
"""Test generate backup."""
|
||||||
|
await setup_backup_integration(hass, with_hassio=with_hassio)
|
||||||
|
|
||||||
|
client = await hass_ws_client(hass)
|
||||||
|
for command in commands:
|
||||||
|
await client.send_json_auto_id(command)
|
||||||
|
result = await client.receive_json()
|
||||||
|
assert result["success"]
|
||||||
|
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.backup.manager.BackupManager.async_create_backup",
|
||||||
|
) as generate_backup:
|
||||||
|
await hass.services.async_call(
|
||||||
|
DOMAIN,
|
||||||
|
"create_automatic",
|
||||||
|
blocking=True,
|
||||||
|
service_data=service_data,
|
||||||
|
)
|
||||||
|
|
||||||
|
generate_backup.assert_called_once_with(**expected_kwargs)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user