From 351e594fe4cb6ec1b9f597e89c1b901910414a2a Mon Sep 17 00:00:00 2001
From: Erik Montnemery <erik@montnemery.com>
Date: Mon, 24 Feb 2025 17:14:47 +0100
Subject: [PATCH] Add flag to backup store to track backup wizard completion
 (#138368)

* Add flag to backup store to track backup wizard completion

* Add comment

* Update hassio tests

* Update tests

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
---
 homeassistant/components/backup/config.py     |   8 +
 homeassistant/components/backup/store.py      |   7 +-
 homeassistant/components/backup/websocket.py  |   1 +
 .../backup/snapshots/test_store.ambr          | 212 ++++++++++-
 .../backup/snapshots/test_websocket.ambr      | 345 +++++++++++++++++-
 tests/components/backup/test_store.py         |  75 ++++
 tests/components/backup/test_websocket.py     |  26 ++
 .../hassio/snapshots/test_backup.ambr         |   3 +
 tests/components/hassio/test_backup.py        |   2 +
 9 files changed, 658 insertions(+), 21 deletions(-)

diff --git a/homeassistant/components/backup/config.py b/homeassistant/components/backup/config.py
index f34c1b8887d..65f9f4789a6 100644
--- a/homeassistant/components/backup/config.py
+++ b/homeassistant/components/backup/config.py
@@ -39,6 +39,7 @@ class StoredBackupConfig(TypedDict):
     """Represent the stored backup config."""
 
     agents: dict[str, StoredAgentConfig]
+    automatic_backups_configured: bool
     create_backup: StoredCreateBackupConfig
     last_attempted_automatic_backup: str | None
     last_completed_automatic_backup: str | None
@@ -51,6 +52,7 @@ class BackupConfigData:
     """Represent loaded backup config data."""
 
     agents: dict[str, AgentConfig]
+    automatic_backups_configured: bool  # only used by frontend
     create_backup: CreateBackupConfig
     last_attempted_automatic_backup: datetime | None = None
     last_completed_automatic_backup: datetime | None = None
@@ -88,6 +90,7 @@ class BackupConfigData:
                 agent_id: AgentConfig(protected=agent_data["protected"])
                 for agent_id, agent_data in data["agents"].items()
             },
+            automatic_backups_configured=data["automatic_backups_configured"],
             create_backup=CreateBackupConfig(
                 agent_ids=data["create_backup"]["agent_ids"],
                 include_addons=data["create_backup"]["include_addons"],
@@ -127,6 +130,7 @@ class BackupConfigData:
             agents={
                 agent_id: agent.to_dict() for agent_id, agent in self.agents.items()
             },
+            automatic_backups_configured=self.automatic_backups_configured,
             create_backup=self.create_backup.to_dict(),
             last_attempted_automatic_backup=last_attempted,
             last_completed_automatic_backup=last_completed,
@@ -142,6 +146,7 @@ class BackupConfig:
         """Initialize backup config."""
         self.data = BackupConfigData(
             agents={},
+            automatic_backups_configured=False,
             create_backup=CreateBackupConfig(),
             retention=RetentionConfig(),
             schedule=BackupSchedule(),
@@ -159,6 +164,7 @@ class BackupConfig:
         self,
         *,
         agents: dict[str, AgentParametersDict] | UndefinedType = UNDEFINED,
+        automatic_backups_configured: bool | UndefinedType = UNDEFINED,
         create_backup: CreateBackupParametersDict | UndefinedType = UNDEFINED,
         retention: RetentionParametersDict | UndefinedType = UNDEFINED,
         schedule: ScheduleParametersDict | UndefinedType = UNDEFINED,
@@ -172,6 +178,8 @@ class BackupConfig:
                     self.data.agents[agent_id] = replace(
                         self.data.agents[agent_id], **agent_config
                     )
+        if automatic_backups_configured is not UNDEFINED:
+            self.data.automatic_backups_configured = automatic_backups_configured
         if create_backup is not UNDEFINED:
             self.data.create_backup = replace(self.data.create_backup, **create_backup)
         if retention is not UNDEFINED:
diff --git a/homeassistant/components/backup/store.py b/homeassistant/components/backup/store.py
index 8287080b5a2..883447853e6 100644
--- a/homeassistant/components/backup/store.py
+++ b/homeassistant/components/backup/store.py
@@ -16,7 +16,7 @@ if TYPE_CHECKING:
 STORE_DELAY_SAVE = 30
 STORAGE_KEY = DOMAIN
 STORAGE_VERSION = 1
-STORAGE_VERSION_MINOR = 4
+STORAGE_VERSION_MINOR = 5
 
 
 class StoredBackupData(TypedDict):
@@ -67,6 +67,11 @@ class _BackupStore(Store[StoredBackupData]):
                     data["config"]["retention"]["copies"] = None
                 if data["config"]["retention"]["days"] == 0:
                     data["config"]["retention"]["days"] = None
+            if old_minor_version < 5:
+                # Version 1.5 adds automatic_backups_configured
+                data["config"]["automatic_backups_configured"] = (
+                    data["config"]["create_backup"]["password"] is not None
+                )
 
         # Note: We allow reading data with major version 2.
         # Reject if major version is higher than 2.
diff --git a/homeassistant/components/backup/websocket.py b/homeassistant/components/backup/websocket.py
index b36343c7634..5084f904ec6 100644
--- a/homeassistant/components/backup/websocket.py
+++ b/homeassistant/components/backup/websocket.py
@@ -352,6 +352,7 @@ async def handle_config_info(
     {
         vol.Required("type"): "backup/config/update",
         vol.Optional("agents"): vol.Schema({str: {"protected": bool}}),
+        vol.Optional("automatic_backups_configured"): bool,
         vol.Optional("create_backup"): vol.Schema(
             {
                 vol.Optional("agent_ids"): vol.All([str], vol.Unique()),
diff --git a/tests/components/backup/snapshots/test_store.ambr b/tests/components/backup/snapshots/test_store.ambr
index 04f88b84a97..41778322825 100644
--- a/tests/components/backup/snapshots/test_store.ambr
+++ b/tests/components/backup/snapshots/test_store.ambr
@@ -13,6 +13,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -39,7 +40,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -57,6 +58,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -84,7 +86,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -102,6 +104,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -128,7 +131,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -146,6 +149,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -173,7 +177,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -194,6 +198,7 @@
             'protected': True,
           }),
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -220,7 +225,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -241,6 +246,7 @@
             'protected': True,
           }),
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -268,7 +274,201 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
+    'version': 1,
+  })
+# ---
+# name: test_store_migration[store_data3]
+  dict({
+    'data': dict({
+      'backups': list([
+        dict({
+          'backup_id': 'abc123',
+          'failed_agent_ids': list([
+            'test.remote',
+          ]),
+        }),
+      ]),
+      'config': dict({
+        'agents': dict({
+          'test.remote': dict({
+            'protected': True,
+          }),
+        }),
+        'automatic_backups_configured': False,
+        'create_backup': dict({
+          'agent_ids': list([
+          ]),
+          'include_addons': None,
+          'include_all_addons': False,
+          'include_database': True,
+          'include_folders': None,
+          'name': None,
+          'password': None,
+        }),
+        'last_attempted_automatic_backup': None,
+        'last_completed_automatic_backup': None,
+        'retention': dict({
+          'copies': None,
+          'days': None,
+        }),
+        'schedule': dict({
+          'days': list([
+          ]),
+          'recurrence': 'never',
+          'state': 'never',
+          'time': None,
+        }),
+      }),
+    }),
+    'key': 'backup',
+    'minor_version': 5,
+    'version': 1,
+  })
+# ---
+# name: test_store_migration[store_data3].1
+  dict({
+    'data': dict({
+      'backups': list([
+        dict({
+          'backup_id': 'abc123',
+          'failed_agent_ids': list([
+            'test.remote',
+          ]),
+        }),
+      ]),
+      'config': dict({
+        'agents': dict({
+          'test.remote': dict({
+            'protected': True,
+          }),
+        }),
+        'automatic_backups_configured': False,
+        'create_backup': dict({
+          'agent_ids': list([
+            'test-agent',
+          ]),
+          'include_addons': None,
+          'include_all_addons': False,
+          'include_database': True,
+          'include_folders': None,
+          'name': None,
+          'password': None,
+        }),
+        'last_attempted_automatic_backup': None,
+        'last_completed_automatic_backup': None,
+        'retention': dict({
+          'copies': None,
+          'days': None,
+        }),
+        'schedule': dict({
+          'days': list([
+          ]),
+          'recurrence': 'never',
+          'state': 'never',
+          'time': None,
+        }),
+      }),
+    }),
+    'key': 'backup',
+    'minor_version': 5,
+    'version': 1,
+  })
+# ---
+# name: test_store_migration[store_data4]
+  dict({
+    'data': dict({
+      'backups': list([
+        dict({
+          'backup_id': 'abc123',
+          'failed_agent_ids': list([
+            'test.remote',
+          ]),
+        }),
+      ]),
+      'config': dict({
+        'agents': dict({
+          'test.remote': dict({
+            'protected': True,
+          }),
+        }),
+        'automatic_backups_configured': True,
+        'create_backup': dict({
+          'agent_ids': list([
+          ]),
+          'include_addons': None,
+          'include_all_addons': False,
+          'include_database': True,
+          'include_folders': None,
+          'name': None,
+          'password': 'hunter2',
+        }),
+        'last_attempted_automatic_backup': None,
+        'last_completed_automatic_backup': None,
+        'retention': dict({
+          'copies': None,
+          'days': None,
+        }),
+        'schedule': dict({
+          'days': list([
+          ]),
+          'recurrence': 'never',
+          'state': 'never',
+          'time': None,
+        }),
+      }),
+    }),
+    'key': 'backup',
+    'minor_version': 5,
+    'version': 1,
+  })
+# ---
+# name: test_store_migration[store_data4].1
+  dict({
+    'data': dict({
+      'backups': list([
+        dict({
+          'backup_id': 'abc123',
+          'failed_agent_ids': list([
+            'test.remote',
+          ]),
+        }),
+      ]),
+      'config': dict({
+        'agents': dict({
+          'test.remote': dict({
+            'protected': True,
+          }),
+        }),
+        'automatic_backups_configured': True,
+        'create_backup': dict({
+          'agent_ids': list([
+            'test-agent',
+          ]),
+          'include_addons': None,
+          'include_all_addons': False,
+          'include_database': True,
+          'include_folders': None,
+          'name': None,
+          'password': 'hunter2',
+        }),
+        'last_attempted_automatic_backup': None,
+        'last_completed_automatic_backup': None,
+        'retention': dict({
+          'copies': None,
+          'days': None,
+        }),
+        'schedule': dict({
+          'days': list([
+          ]),
+          'recurrence': 'never',
+          'state': 'never',
+          'time': None,
+        }),
+      }),
+    }),
+    'key': 'backup',
+    'minor_version': 5,
     'version': 1,
   })
 # ---
diff --git a/tests/components/backup/snapshots/test_websocket.ambr b/tests/components/backup/snapshots/test_websocket.ambr
index 742fec4c3f3..c100a87e8cc 100644
--- a/tests/components/backup/snapshots/test_websocket.ambr
+++ b/tests/components/backup/snapshots/test_websocket.ambr
@@ -258,6 +258,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -295,6 +296,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -344,6 +346,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': True,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -382,6 +385,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -420,6 +424,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -459,6 +464,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -497,6 +503,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -543,6 +550,7 @@
             'protected': False,
           }),
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -583,6 +591,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': True,
         'create_backup': dict({
           'agent_ids': list([
             'hassio.local',
@@ -623,6 +632,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': True,
         'create_backup': dict({
           'agent_ids': list([
             'hassio.local',
@@ -662,6 +672,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -699,6 +710,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -744,6 +756,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': True,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -782,6 +795,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -820,6 +834,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -859,6 +874,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -897,6 +913,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -943,6 +960,7 @@
             'protected': False,
           }),
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -983,6 +1001,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': True,
         'create_backup': dict({
           'agent_ids': list([
             'backup.local',
@@ -1022,6 +1041,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': True,
         'create_backup': dict({
           'agent_ids': list([
             'backup.local',
@@ -1061,6 +1081,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -1098,6 +1119,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -1137,6 +1159,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -1164,7 +1187,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -1175,6 +1198,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -1212,6 +1236,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -1251,6 +1276,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -1278,7 +1304,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -1289,6 +1315,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -1326,6 +1353,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -1365,6 +1393,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -1392,7 +1421,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -1403,6 +1432,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -1446,6 +1476,7 @@
             'protected': False,
           }),
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -1490,6 +1521,7 @@
             'protected': False,
           }),
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -1516,7 +1548,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -1527,6 +1559,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -1570,6 +1603,7 @@
             'protected': False,
           }),
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -1613,6 +1647,7 @@
             'protected': True,
           }),
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -1657,6 +1692,7 @@
             'protected': True,
           }),
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -1683,7 +1719,237 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
+    'version': 1,
+  })
+# ---
+# name: test_config_update[commands14]
+  dict({
+    'id': 1,
+    'result': dict({
+      'config': dict({
+        'agents': dict({
+        }),
+        'automatic_backups_configured': False,
+        'create_backup': dict({
+          'agent_ids': list([
+          ]),
+          'include_addons': None,
+          'include_all_addons': False,
+          'include_database': True,
+          'include_folders': None,
+          'name': None,
+          'password': None,
+        }),
+        'last_attempted_automatic_backup': None,
+        'last_completed_automatic_backup': None,
+        'next_automatic_backup': None,
+        'next_automatic_backup_additional': False,
+        'retention': dict({
+          'copies': None,
+          'days': None,
+        }),
+        'schedule': dict({
+          'days': list([
+          ]),
+          'recurrence': 'never',
+          'time': None,
+        }),
+      }),
+    }),
+    'success': True,
+    'type': 'result',
+  })
+# ---
+# name: test_config_update[commands14].1
+  dict({
+    'id': 3,
+    'result': dict({
+      'config': dict({
+        'agents': dict({
+        }),
+        'automatic_backups_configured': False,
+        'create_backup': dict({
+          'agent_ids': list([
+          ]),
+          'include_addons': None,
+          'include_all_addons': False,
+          'include_database': True,
+          'include_folders': None,
+          'name': None,
+          'password': None,
+        }),
+        'last_attempted_automatic_backup': None,
+        'last_completed_automatic_backup': None,
+        'next_automatic_backup': None,
+        'next_automatic_backup_additional': False,
+        'retention': dict({
+          'copies': None,
+          'days': None,
+        }),
+        'schedule': dict({
+          'days': list([
+          ]),
+          'recurrence': 'never',
+          'time': None,
+        }),
+      }),
+    }),
+    'success': True,
+    'type': 'result',
+  })
+# ---
+# name: test_config_update[commands14].2
+  dict({
+    'data': dict({
+      'backups': list([
+      ]),
+      'config': dict({
+        'agents': dict({
+        }),
+        'automatic_backups_configured': False,
+        'create_backup': dict({
+          'agent_ids': list([
+          ]),
+          'include_addons': None,
+          'include_all_addons': False,
+          'include_database': True,
+          'include_folders': None,
+          'name': None,
+          'password': None,
+        }),
+        'last_attempted_automatic_backup': None,
+        'last_completed_automatic_backup': None,
+        'retention': dict({
+          'copies': None,
+          'days': None,
+        }),
+        'schedule': dict({
+          'days': list([
+          ]),
+          'recurrence': 'never',
+          'state': 'never',
+          'time': None,
+        }),
+      }),
+    }),
+    'key': 'backup',
+    'minor_version': 5,
+    'version': 1,
+  })
+# ---
+# name: test_config_update[commands15]
+  dict({
+    'id': 1,
+    'result': dict({
+      'config': dict({
+        'agents': dict({
+        }),
+        'automatic_backups_configured': False,
+        'create_backup': dict({
+          'agent_ids': list([
+          ]),
+          'include_addons': None,
+          'include_all_addons': False,
+          'include_database': True,
+          'include_folders': None,
+          'name': None,
+          'password': None,
+        }),
+        'last_attempted_automatic_backup': None,
+        'last_completed_automatic_backup': None,
+        'next_automatic_backup': None,
+        'next_automatic_backup_additional': False,
+        'retention': dict({
+          'copies': None,
+          'days': None,
+        }),
+        'schedule': dict({
+          'days': list([
+          ]),
+          'recurrence': 'never',
+          'time': None,
+        }),
+      }),
+    }),
+    'success': True,
+    'type': 'result',
+  })
+# ---
+# name: test_config_update[commands15].1
+  dict({
+    'id': 3,
+    'result': dict({
+      'config': dict({
+        'agents': dict({
+        }),
+        'automatic_backups_configured': True,
+        'create_backup': dict({
+          'agent_ids': list([
+          ]),
+          'include_addons': None,
+          'include_all_addons': False,
+          'include_database': True,
+          'include_folders': None,
+          'name': None,
+          'password': None,
+        }),
+        'last_attempted_automatic_backup': None,
+        'last_completed_automatic_backup': None,
+        'next_automatic_backup': None,
+        'next_automatic_backup_additional': False,
+        'retention': dict({
+          'copies': None,
+          'days': None,
+        }),
+        'schedule': dict({
+          'days': list([
+          ]),
+          'recurrence': 'never',
+          'time': None,
+        }),
+      }),
+    }),
+    'success': True,
+    'type': 'result',
+  })
+# ---
+# name: test_config_update[commands15].2
+  dict({
+    'data': dict({
+      'backups': list([
+      ]),
+      'config': dict({
+        'agents': dict({
+        }),
+        'automatic_backups_configured': True,
+        'create_backup': dict({
+          'agent_ids': list([
+          ]),
+          'include_addons': None,
+          'include_all_addons': False,
+          'include_database': True,
+          'include_folders': None,
+          'name': None,
+          'password': None,
+        }),
+        'last_attempted_automatic_backup': None,
+        'last_completed_automatic_backup': None,
+        'retention': dict({
+          'copies': None,
+          'days': None,
+        }),
+        'schedule': dict({
+          'days': list([
+          ]),
+          'recurrence': 'never',
+          'state': 'never',
+          'time': None,
+        }),
+      }),
+    }),
+    'key': 'backup',
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -1694,6 +1960,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -1731,6 +1998,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -1770,6 +2038,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -1797,7 +2066,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -1808,6 +2077,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -1845,6 +2115,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -1885,6 +2156,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -1913,7 +2185,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -1924,6 +2196,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -1961,6 +2234,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -2000,6 +2274,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -2027,7 +2302,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -2038,6 +2313,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -2075,6 +2351,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -2116,6 +2393,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -2145,7 +2423,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -2156,6 +2434,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -2193,6 +2472,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -2236,6 +2516,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -2267,7 +2548,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -2278,6 +2559,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -2315,6 +2597,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -2354,6 +2637,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -2381,7 +2665,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -2392,6 +2676,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -2429,6 +2714,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -2468,6 +2754,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -2495,7 +2782,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -2506,6 +2793,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -2543,6 +2831,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -2582,6 +2871,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -2609,7 +2899,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -2620,6 +2910,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -2657,6 +2948,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -2696,6 +2988,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent',
@@ -2723,7 +3016,7 @@
       }),
     }),
     'key': 'backup',
-    'minor_version': 4,
+    'minor_version': 5,
     'version': 1,
   })
 # ---
@@ -2734,6 +3027,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -2771,6 +3065,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -2808,6 +3103,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -2845,6 +3141,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -2882,6 +3179,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -2919,6 +3217,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -2956,6 +3255,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -2993,6 +3293,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3030,6 +3331,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3067,6 +3369,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3104,6 +3407,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3141,6 +3445,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3178,6 +3483,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3215,6 +3521,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3252,6 +3559,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3289,6 +3597,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3326,6 +3635,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3363,6 +3673,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3400,6 +3711,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3437,6 +3749,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3474,6 +3787,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3511,6 +3825,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3548,6 +3863,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -3585,6 +3901,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
diff --git a/tests/components/backup/test_store.py b/tests/components/backup/test_store.py
index eff53bda777..0d29bb2006a 100644
--- a/tests/components/backup/test_store.py
+++ b/tests/components/backup/test_store.py
@@ -99,6 +99,7 @@ def mock_delay_save() -> Generator[None]:
                 ],
                 "config": {
                     "agents": {"test.remote": {"protected": True}},
+                    "automatic_backups_configured": False,
                     "create_backup": {
                         "agent_ids": [],
                         "include_addons": None,
@@ -125,6 +126,80 @@ def mock_delay_save() -> Generator[None]:
             "key": DOMAIN,
             "version": 2,
         },
+        {
+            "data": {
+                "backups": [
+                    {
+                        "backup_id": "abc123",
+                        "failed_agent_ids": ["test.remote"],
+                    }
+                ],
+                "config": {
+                    "agents": {"test.remote": {"protected": True}},
+                    "create_backup": {
+                        "agent_ids": [],
+                        "include_addons": None,
+                        "include_all_addons": False,
+                        "include_database": True,
+                        "include_folders": None,
+                        "name": None,
+                        "password": None,
+                    },
+                    "last_attempted_automatic_backup": None,
+                    "last_completed_automatic_backup": None,
+                    "retention": {
+                        "copies": None,
+                        "days": None,
+                    },
+                    "schedule": {
+                        "days": [],
+                        "recurrence": "never",
+                        "state": "never",
+                        "time": None,
+                    },
+                },
+            },
+            "key": DOMAIN,
+            "minor_version": 4,
+            "version": 1,
+        },
+        {
+            "data": {
+                "backups": [
+                    {
+                        "backup_id": "abc123",
+                        "failed_agent_ids": ["test.remote"],
+                    }
+                ],
+                "config": {
+                    "agents": {"test.remote": {"protected": True}},
+                    "create_backup": {
+                        "agent_ids": [],
+                        "include_addons": None,
+                        "include_all_addons": False,
+                        "include_database": True,
+                        "include_folders": None,
+                        "name": None,
+                        "password": "hunter2",
+                    },
+                    "last_attempted_automatic_backup": None,
+                    "last_completed_automatic_backup": None,
+                    "retention": {
+                        "copies": None,
+                        "days": None,
+                    },
+                    "schedule": {
+                        "days": [],
+                        "recurrence": "never",
+                        "state": "never",
+                        "time": None,
+                    },
+                },
+            },
+            "key": DOMAIN,
+            "minor_version": 4,
+            "version": 1,
+        },
     ],
 )
 async def test_store_migration(
diff --git a/tests/components/backup/test_websocket.py b/tests/components/backup/test_websocket.py
index 6d5adb32c01..6605674a679 100644
--- a/tests/components/backup/test_websocket.py
+++ b/tests/components/backup/test_websocket.py
@@ -55,6 +55,7 @@ DEFAULT_STORAGE_DATA: dict[str, Any] = {
     "backups": [],
     "config": {
         "agents": {},
+        "automatic_backups_configured": False,
         "create_backup": {
             "agent_ids": [],
             "include_addons": None,
@@ -907,6 +908,7 @@ async def test_agents_info(
                     "backups": [],
                     "config": {
                         "agents": {},
+                        "automatic_backups_configured": False,
                         "create_backup": {
                             "agent_ids": ["test-agent"],
                             "include_addons": ["test-addon"],
@@ -938,6 +940,7 @@ async def test_agents_info(
                     "backups": [],
                     "config": {
                         "agents": {},
+                        "automatic_backups_configured": True,
                         "create_backup": {
                             "agent_ids": ["test-agent"],
                             "include_addons": None,
@@ -969,6 +972,7 @@ async def test_agents_info(
                     "backups": [],
                     "config": {
                         "agents": {},
+                        "automatic_backups_configured": False,
                         "create_backup": {
                             "agent_ids": ["test-agent"],
                             "include_addons": None,
@@ -1000,6 +1004,7 @@ async def test_agents_info(
                     "backups": [],
                     "config": {
                         "agents": {},
+                        "automatic_backups_configured": False,
                         "create_backup": {
                             "agent_ids": ["test-agent"],
                             "include_addons": None,
@@ -1031,6 +1036,7 @@ async def test_agents_info(
                     "backups": [],
                     "config": {
                         "agents": {},
+                        "automatic_backups_configured": False,
                         "create_backup": {
                             "agent_ids": ["test-agent"],
                             "include_addons": None,
@@ -1062,6 +1068,7 @@ async def test_agents_info(
                     "backups": [],
                     "config": {
                         "agents": {},
+                        "automatic_backups_configured": False,
                         "create_backup": {
                             "agent_ids": ["test-agent"],
                             "include_addons": None,
@@ -1096,6 +1103,7 @@ async def test_agents_info(
                             "test-agent1": {"protected": True},
                             "test-agent2": {"protected": False},
                         },
+                        "automatic_backups_configured": False,
                         "create_backup": {
                             "agent_ids": ["test-agent"],
                             "include_addons": None,
@@ -1127,6 +1135,7 @@ async def test_agents_info(
                     "backups": [],
                     "config": {
                         "agents": {},
+                        "automatic_backups_configured": True,
                         "create_backup": {
                             "agent_ids": ["hassio.local", "hassio.share", "test-agent"],
                             "include_addons": None,
@@ -1158,6 +1167,7 @@ async def test_agents_info(
                     "backups": [],
                     "config": {
                         "agents": {},
+                        "automatic_backups_configured": True,
                         "create_backup": {
                             "agent_ids": ["backup.local", "test-agent"],
                             "include_addons": None,
@@ -1343,6 +1353,18 @@ async def test_config_load_config_info(
                 },
             },
         ],
+        [
+            {
+                "type": "backup/config/update",
+                "automatic_backups_configured": False,
+            }
+        ],
+        [
+            {
+                "type": "backup/config/update",
+                "automatic_backups_configured": True,
+            }
+        ],
     ],
 )
 @patch("homeassistant.components.backup.config.random.randint", Mock(return_value=600))
@@ -1774,6 +1796,7 @@ async def test_config_schedule_logic(
         "backups": [],
         "config": {
             "agents": {},
+            "automatic_backups_configured": False,
             "create_backup": {
                 "agent_ids": ["test.test-agent"],
                 "include_addons": [],
@@ -2436,6 +2459,7 @@ async def test_config_retention_copies_logic(
         "backups": [],
         "config": {
             "agents": {},
+            "automatic_backups_configured": False,
             "create_backup": {
                 "agent_ids": ["test-agent"],
                 "include_addons": ["test-addon"],
@@ -2714,6 +2738,7 @@ async def test_config_retention_copies_logic_manual_backup(
         "backups": [],
         "config": {
             "agents": {},
+            "automatic_backups_configured": False,
             "create_backup": {
                 "agent_ids": ["test-agent"],
                 "include_addons": ["test-addon"],
@@ -3161,6 +3186,7 @@ async def test_config_retention_days_logic(
         "backups": [],
         "config": {
             "agents": {},
+            "automatic_backups_configured": False,
             "create_backup": {
                 "agent_ids": ["test-agent"],
                 "include_addons": ["test-addon"],
diff --git a/tests/components/hassio/snapshots/test_backup.ambr b/tests/components/hassio/snapshots/test_backup.ambr
index a2f33bf9624..725239ee126 100644
--- a/tests/components/hassio/snapshots/test_backup.ambr
+++ b/tests/components/hassio/snapshots/test_backup.ambr
@@ -6,6 +6,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': False,
         'create_backup': dict({
           'agent_ids': list([
           ]),
@@ -43,6 +44,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': True,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent1',
@@ -89,6 +91,7 @@
       'config': dict({
         'agents': dict({
         }),
+        'automatic_backups_configured': True,
         'create_backup': dict({
           'agent_ids': list([
             'test-agent1',
diff --git a/tests/components/hassio/test_backup.py b/tests/components/hassio/test_backup.py
index 6a66d249dd1..c7f400cef5c 100644
--- a/tests/components/hassio/test_backup.py
+++ b/tests/components/hassio/test_backup.py
@@ -2480,6 +2480,7 @@ async def test_restore_progress_after_restart_unknown_job(
                     "backups": [],
                     "config": {
                         "agents": {},
+                        "automatic_backups_configured": True,
                         "create_backup": {
                             "agent_ids": ["test-agent1", "hassio.local", "test-agent2"],
                             "include_addons": ["addon1", "addon2"],
@@ -2511,6 +2512,7 @@ async def test_restore_progress_after_restart_unknown_job(
                     "backups": [],
                     "config": {
                         "agents": {},
+                        "automatic_backups_configured": True,
                         "create_backup": {
                             "agent_ids": ["test-agent1", "backup.local", "test-agent2"],
                             "include_addons": ["addon1", "addon2"],
-- 
GitLab