Skip to content

Commit f5bd4b0

Browse files
authored
Reverse order of typing when multiple can match (#38)
* Reverse order of typing when multiple can match * Add full backup options tests
1 parent 217184d commit f5bd4b0

File tree

2 files changed

+74
-2
lines changed

2 files changed

+74
-2
lines changed

aiohasupervisor/models/backups.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ class FullBackupOptions(Request):
141141
name: str | None = None
142142
password: str | None = None
143143
compressed: bool | None = None
144-
location: list[str | None] | str | None = DEFAULT # type: ignore[assignment]
144+
location: str | list[str | None] | None = DEFAULT # type: ignore[assignment]
145145
homeassistant_exclude_database: bool | None = None
146146
background: bool | None = None
147147
extra: dict | None = None
@@ -151,7 +151,7 @@ class FullBackupOptions(Request):
151151
class PartialBackupOptions(FullBackupOptions, PartialBackupRestoreOptions):
152152
"""PartialBackupOptions model."""
153153

154-
addons: set[str] | AddonSet | None = None
154+
addons: AddonSet | set[str] | None = None
155155

156156

157157
@dataclass(frozen=True, slots=True)

tests/test_backups.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,3 +483,75 @@ async def test_download_backup(
483483
assert isinstance(result, AsyncIterator)
484484
async for chunk in result:
485485
assert chunk == b"backup test"
486+
487+
488+
@pytest.mark.parametrize(
489+
("options", "as_dict"),
490+
[
491+
(
492+
PartialBackupOptions(name="Test", folders={Folder.SHARE}),
493+
{"name": "Test", "folders": ["share"]},
494+
),
495+
(PartialBackupOptions(addons={"core_ssh"}), {"addons": ["core_ssh"]}),
496+
(PartialBackupOptions(addons=AddonSet.ALL), {"addons": "all"}),
497+
(
498+
PartialBackupOptions(
499+
homeassistant=True, homeassistant_exclude_database=True
500+
),
501+
{"homeassistant": True, "homeassistant_exclude_database": True},
502+
),
503+
(
504+
PartialBackupOptions(
505+
folders={Folder.SSL}, compressed=True, background=True
506+
),
507+
{"folders": ["ssl"], "compressed": True, "background": True},
508+
),
509+
(
510+
PartialBackupOptions(
511+
homeassistant=True, location=[".cloud_backup", "test"]
512+
),
513+
{"homeassistant": True, "location": [".cloud_backup", "test"]},
514+
),
515+
(
516+
PartialBackupOptions(homeassistant=True, location="test"),
517+
{"homeassistant": True, "location": "test"},
518+
),
519+
(
520+
PartialBackupOptions(homeassistant=True, location=None),
521+
{"homeassistant": True, "location": None},
522+
),
523+
],
524+
)
525+
async def test_partial_backup_model(
526+
options: PartialBackupOptions, as_dict: dict[str, Any]
527+
) -> None:
528+
"""Test partial backup model parsing and serializing."""
529+
assert PartialBackupOptions.from_dict(as_dict) == options
530+
assert options.to_dict() == as_dict
531+
532+
533+
@pytest.mark.parametrize(
534+
("options", "as_dict"),
535+
[
536+
(FullBackupOptions(name="Test"), {"name": "Test"}),
537+
(FullBackupOptions(password="test"), {"password": "test"}), # noqa: S106
538+
(FullBackupOptions(compressed=True), {"compressed": True}),
539+
(
540+
FullBackupOptions(homeassistant_exclude_database=True),
541+
{"homeassistant_exclude_database": True},
542+
),
543+
(FullBackupOptions(background=True), {"background": True}),
544+
(
545+
FullBackupOptions(location=[".cloud_backup", "test"]),
546+
{"location": [".cloud_backup", "test"]},
547+
),
548+
(FullBackupOptions(location="test"), {"location": "test"}),
549+
(FullBackupOptions(location=None), {"location": None}),
550+
],
551+
)
552+
async def test_full_backup_model(
553+
options: FullBackupOptions, as_dict: dict[str, Any]
554+
) -> None:
555+
"""Test full backup model parsing and serializing."""
556+
assert FullBackupOptions.from_dict(as_dict) == options
557+
assert options.to_dict() == as_dict

0 commit comments

Comments
 (0)