mirror of
https://github.com/home-assistant/core.git
synced 2026-05-08 17:49:37 +01:00
Patch the NINA library instead of the HTTP requests (#161074)
This commit is contained in:
@@ -47,10 +47,8 @@ rules:
|
||||
test-coverage:
|
||||
status: todo
|
||||
comment: |
|
||||
Patch the library instead of the HTTP requests
|
||||
Create a shared fixture for the mock config entry
|
||||
Use init_integration in tests
|
||||
Evaluate the need of test_config_entry_not_ready
|
||||
|
||||
# Gold
|
||||
devices: done
|
||||
|
||||
@@ -1,67 +1,30 @@
|
||||
"""Tests for the Nina integration."""
|
||||
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
from copy import deepcopy
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
from homeassistant.components.nina.const import DOMAIN
|
||||
from pynina import Warning
|
||||
|
||||
from homeassistant.components.nina.const import CONF_REGIONS
|
||||
from homeassistant.config_entries import ConfigEntryState
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from tests.common import (
|
||||
MockConfigEntry,
|
||||
load_json_array_fixture,
|
||||
load_json_object_fixture,
|
||||
)
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
|
||||
async def setup_platform(hass: HomeAssistant, config_entry: MockConfigEntry) -> None:
|
||||
async def setup_platform(
|
||||
hass: HomeAssistant,
|
||||
config_entry: MockConfigEntry,
|
||||
mock_nina_class: AsyncMock,
|
||||
nina_warnings: list[Warning],
|
||||
) -> None:
|
||||
"""Set up the NINA platform."""
|
||||
with patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
wraps=mocked_request_function,
|
||||
):
|
||||
await hass.config_entries.async_setup(config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
mock_nina_class.warnings = {
|
||||
region: deepcopy(nina_warnings)
|
||||
for region in config_entry.data.get(CONF_REGIONS, {})
|
||||
}
|
||||
|
||||
assert config_entry.state is ConfigEntryState.LOADED
|
||||
await hass.config_entries.async_setup(config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
|
||||
def mocked_request_function(url: str) -> dict[str, Any]:
|
||||
"""Mock of the request function."""
|
||||
dummy_response: list[dict[str, Any]] = load_json_array_fixture(
|
||||
"sample_warnings.json", DOMAIN
|
||||
)
|
||||
|
||||
dummy_response_details: dict[str, Any] = load_json_object_fixture(
|
||||
"sample_warning_details.json", DOMAIN
|
||||
)
|
||||
|
||||
dummy_response_regions: dict[str, Any] = load_json_object_fixture(
|
||||
"sample_regions.json", DOMAIN
|
||||
)
|
||||
|
||||
dummy_response_labels: dict[str, Any] = load_json_object_fixture(
|
||||
"sample_labels.json", DOMAIN
|
||||
)
|
||||
|
||||
if "https://warnung.bund.de/api31/dashboard/" in url: # codespell:ignore bund
|
||||
return dummy_response
|
||||
|
||||
if (
|
||||
"https://warnung.bund.de/api/appdata/gsb/labels/de_labels.json" # codespell:ignore bund
|
||||
in url
|
||||
):
|
||||
return dummy_response_labels
|
||||
|
||||
if (
|
||||
url
|
||||
== "https://www.xrepository.de/api/xrepository/urn:de:bund:destatis:bevoelkerungsstatistik:schluessel:rs_2021-07-31/download/Regionalschl_ssel_2021-07-31.json" # codespell:ignore bund
|
||||
):
|
||||
return dummy_response_regions
|
||||
|
||||
warning_id = url.replace(
|
||||
"https://warnung.bund.de/api31/warnings/", # codespell:ignore bund
|
||||
"",
|
||||
).replace(".json", "")
|
||||
|
||||
return dummy_response_details[warning_id]
|
||||
assert config_entry.state is ConfigEntryState.LOADED
|
||||
|
||||
@@ -4,6 +4,7 @@ from collections.abc import Generator
|
||||
from copy import deepcopy
|
||||
from unittest.mock import AsyncMock, patch
|
||||
|
||||
from pynina import Warning
|
||||
import pytest
|
||||
|
||||
from homeassistant.components.nina.const import DOMAIN
|
||||
@@ -11,7 +12,11 @@ from homeassistant.core import HomeAssistant
|
||||
|
||||
from .const import DUMMY_CONFIG_ENTRY
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
from tests.common import (
|
||||
MockConfigEntry,
|
||||
load_json_array_fixture,
|
||||
load_json_object_fixture,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -37,3 +42,32 @@ def mock_config_entry(hass: HomeAssistant) -> MockConfigEntry:
|
||||
config_entry.add_to_hass(hass)
|
||||
|
||||
return config_entry
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_nina_class(nina_region_codes: dict[str, str]) -> Generator[AsyncMock]:
|
||||
"""Fixture to mock the NINA class."""
|
||||
with (
|
||||
patch(
|
||||
"homeassistant.components.nina.config_flow.Nina", autospec=True
|
||||
) as mock_nina,
|
||||
patch("homeassistant.components.nina.coordinator.Nina", new=mock_nina),
|
||||
):
|
||||
nina = mock_nina.return_value
|
||||
nina.get_all_regional_codes.return_value = nina_region_codes
|
||||
|
||||
yield nina
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def nina_region_codes() -> dict[str, str]:
|
||||
"""Provide region codes."""
|
||||
return load_json_object_fixture("regions.json", DOMAIN)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def nina_warnings() -> list[Warning]:
|
||||
"""Provide sample warnings."""
|
||||
raw_data = load_json_array_fixture("warnings.json", DOMAIN)
|
||||
|
||||
return [Warning(**w) for w in raw_data]
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,225 +0,0 @@
|
||||
{
|
||||
"BBK-ISC-050": "Halten Sie Abflüsse und Schächte frei, damit das Wasser abfließen kann.",
|
||||
"BBK-ISC-052": "Halten Sie Abstand zu Bäumen und Gebäuden, von denen sich Dachlawinen lösen können.",
|
||||
"BBK-ISC-051": "Halten Sie Abstand zu beschädigten Gebäuden und Stromleitungen.",
|
||||
"BBK-ISC-058": "Schützen Sie sich vor der Sonne.",
|
||||
"BBK-ISC-057": "Nutzen Sie öffentliche Verkehrsmittel.",
|
||||
"BBK-ISC-059": "Schützen Sie sich vor direkter Sonneneinstrahlung (durch Aufenthalt im Schatten, Bekleidung, Kopfbedeckung etc.).",
|
||||
"BBK-ISC-054": "Begeben Sie sich wenn möglich in sichere Räume des Gebäudes auf der hangabgewandten Seite.",
|
||||
"BBK-ISC-053": "Halten Sie Abstand zu Bäumen und Stromleitungen. Sie können unter der Schneelast abbrechen, entwurzeln bzw. abknicken.",
|
||||
"BBK-ISC-056": "Achten Sie auf ausströmendes Gas. Ein Hinweis darauf können Zischgeräusche oder ein gastypischer Geruch sein. Benutzen Sie keine Streichhölzer, Feuerzeuge oder Ähnliches: Offenes Feuer kann in Kombination mit ausströmendem Gas zu Explosionen und Bränden führen.",
|
||||
"BBK-ISC-055": "Achten Sie auf zusätzliche Gefahren, z.B. Elektrizität. Vor allem im Zusammenhang mit beschädigten Wasserrohren werden elektrische Leitungen zur Gefahr, weil das austretende Wasser den Strom leiten kann.",
|
||||
"BBK-ISC-061": "Vermeiden Sie längere Aufenthalte und Aktivitäten im Freien.",
|
||||
"BBK-ISC-060": "Halten Sie sich nach Möglichkeit in kühlen Räumen und Gebäuden auf.",
|
||||
"BBK-ISC-063": "Trinken Sie viel Wasser und achten Sie auf leichtes Essen.",
|
||||
"BBK-ISC-062": "Tragen Sie im Freien eine Sonnenbrille mit 100% UV-Schutz.",
|
||||
"BBK-ISC-069": "Vermeiden Sie jeden Hautkontakt mit Leitungswasser. Stellen Sie die Wasserzufuhr zu Ihrem Haus ab.",
|
||||
"BBK-ISC-068": "Trinken Sie nur Mineralwasser aus der Flasche.",
|
||||
"BBK-ISC-065": "Suchen Sie höher liegende Gebiete auf und warten Sie ab. Flutwellen können noch über Stunden hinweg auftreten.",
|
||||
"BBK-ISC-064": "Verlassen Sie das betroffene Gebiet sofort und suchen Sie höher liegende Gebiete auf.",
|
||||
"version": "11",
|
||||
"BBK-ISC-067": "Trinken Sie kein Leitungswasser.",
|
||||
"BBK-ISC-066": "Kochen Sie das Wasser ab, bevor Sie es zum Trinken oder in der Küche verwenden.",
|
||||
"BBK-ISC-072": "Suchen Sie Deckung, zum Beispiel unter einem stabilen Tisch. Warten Sie ab, bis das Erdbeben vorüber ist.",
|
||||
"BBK-ISC-071": "Suchen Sie Deckung und warten Sie ab, bis das Erdbeben vorüber ist.",
|
||||
"BBK-ISC-074": "Verlassen Sie sofort beschädigte Gebäude. Vorsicht vor herunterfallenden Objekten.",
|
||||
"BBK-ISC-073": "Halten Sie sich von Glasflächen wie Fenstern und Glastüren fern. Es besteht Verletzungsgefahr durch Glassplitter.",
|
||||
"BBK-ISC-070": "Nehmen Sie gefährdete Personen vorübergehend bei sich auf.",
|
||||
"BBK-ISC-079": "Bereiten Sie sich auf einen möglichen Stromausfall vor: Überprüfen Sie Ihre Vorräte an Wasser, Lebensmitteln, Bargeld, Batterien und Medikamenten.",
|
||||
"BBK-ISC-076": "Berühren Sie keine Trümmerteile.",
|
||||
"BBK-ISC-075": "Benutzen Sie keine Fahrstühle.",
|
||||
"BBK-ISC-078": "Seien Sie auf Nachbeben gefasst.",
|
||||
"BBK-ISC-077": "Halten Sie Abstand von Erdspalten und Abhängen.",
|
||||
"BBK-ISC-083": "Halten Sie sämtliche Zugangswege zur Brandstelle frei.",
|
||||
"BBK-ISC-082": "Es besteht keine Gefahr.",
|
||||
"BBK-ISC-085": "Suchen Sie Schutz in einem Gebäude.",
|
||||
"BBK-ISC-084": "Betreten Sie keine verqualmten Räume. Dort können sich tödliche Gase bilden.",
|
||||
"BBK-ISC-081": "Bleiben Sie im Gebäude und warten Sie auf weitere Informationen.",
|
||||
"BBK-ISC-080": "Nutzen Sie Fahrrad- oder Motorradhelme, um Ihren Kopf vor herabfallendem Gestein zu schützen.",
|
||||
"BBK-ISC-087": "Schließen Sie Fenster und Türen und schalten Sie Lüftungen und Klimaanlagen ab.",
|
||||
"BBK-ISC-086": "Suchen Sie sofort Schutz in einem Gebäude.",
|
||||
"BBK-ISC-089": "Werfen Sie keine brennenden Zigaretten weg.",
|
||||
"BBK-ISC-088": "Bedecken Sie Mund und Nase mit einem improvisierten Atemschutz (Stofftuch, Kleidungsstück, OP-Maske).",
|
||||
"BBK-ISC-014": "Wir informieren Sie, wenn die Gefahr vorüber ist.",
|
||||
"BBK-ISC-135": "Vermeiden Sie Aktivitäten in der Gruppe wie Teamsportarten.",
|
||||
"BBK-ISC-013": "Warnen Sie andere Personen, um den Zutritt zum Gefahrenbereich zu verhindern.",
|
||||
"BBK-ISC-134": "Vermeiden Sie Körperkontakt mit anderen Personen wie Begrüßungsküsse und Händeschütteln.",
|
||||
"BBK-ISC-016": "Folgen Sie den Anweisungen der Einsatzkräfte.",
|
||||
"BBK-ISC-015": "Achten Sie auf Durchsagen von Polizei und Feuerwehr.",
|
||||
"BBK-ISC-136": "Es besteht kein Handlungsbedarf.",
|
||||
"BBK-ISC-010": "Falls möglich, informieren Sie sich in den Medien, zum Beispiel im Lokalradio.",
|
||||
"BBK-ISC-131": "Berühren Sie keine toten Tiere. Melden Sie Funde von toten Wildtieren den Behörden.",
|
||||
"BBK-ISC-130": "Halten Sie Abstand zu betroffenen Landwirtschaftsbetrieben und beachten Sie Absperrmaßnahmen der Behörden.",
|
||||
"BBK-ISC-012": "Informieren Sie Ihre Nachbarn.",
|
||||
"BBK-ISC-133": "Halten Sie mindestens einen Meter Abstand zu Gesprächspartnern.",
|
||||
"BBK-ISC-011": "Hören Sie regionale Radiosender.",
|
||||
"BBK-ISC-132": "Waschen Sie sich regelmäßig und gründlich die Hände.",
|
||||
"BBK-ISC-007": "Suchen Sie Schutz. Vermeiden Sie Autofahrten.",
|
||||
"BBK-ISC-128": "Halten Sie ausreichend Abstand zum Gebäude, um sich vor herabfallenden Trümmerteilen und Staubwolken zu schützen.",
|
||||
"BBK-ISC-006": "Vermeiden Sie Autofahrten.",
|
||||
"BBK-ISC-127": "Nehmen Sie JETZT die Jodtabletten gemäß Packungsbeilage ein.",
|
||||
"BBK-ISC-009": "Informieren Sie sich in den Medien, zum Beispiel im Lokalradio.",
|
||||
"BBK-ISC-008": "Schalten Sie das Autoradio ein und achten Sie auf weitere Informationen.",
|
||||
"BBK-ISC-129": "Wenn möglich, desinfizieren Sie Ihre Hände immer nach Kontakt mit möglichen Überträgern.",
|
||||
"BBK-ISC-025": "Schließen Sie alle Fenster und Türen.",
|
||||
"BBK-ISC-024": "Sollten Sie Hilfe beim Verlassen Ihrer Wohnung benötigen, nehmen Sie Kontakt mit Ihrer Stadt unter der angegebenen Telefonnummer auf.",
|
||||
"BBK-ISC-027": "Schließen Sie die Fenster, Roll- oder Fensterläden und halten Sie sich von ungeschützten Öffnungen fern.",
|
||||
"BBK-ISC-026": "Schalten Sie die Belüftung aus und schließen Sie die Fenster.",
|
||||
"BBK-ISC-021": "Helfen Sie Kindern und anderen hilfsbedürftigen Personen, aber ohne sich selbst zu gefährden.",
|
||||
"BBK-ISC-020": "Leisten Sie bei Bedarf Erste Hilfe, jedoch ohne sich selbst in Gefahr zu begeben.",
|
||||
"BBK-ISC-023": "Nehmen Sie nur das Notwendigste mit, insbesondere Ausweise und Bargeld.",
|
||||
"BBK-ISC-022": "Bereiten Sie sich auf eine Evakuierung vor.",
|
||||
"BBK-ISC-018": "Telefonieren Sie nur im äußersten Notfall, damit die Leitungen nicht zusammenbrechen.",
|
||||
"BBK-ISC-017": "Wählen Sie nur in Notfällen den Notruf 110 (Polizei) und 112 (Feuerwehr).",
|
||||
"BBK-ISC-019": "Falls Sie relevante Beobachtungen gemacht haben, informieren Sie die Polizei (110).",
|
||||
"BBK-EVC-007": "Biologische Gefahr",
|
||||
"BBK-EVC-005": "Ausfall Notruf",
|
||||
"BBK-ISC-030": "Meiden Sie den Aufenthalt im Freien. Halten Sie Abstand zu Bäumen, Türmen und Masten. Halten Sie mindesten 20 m Abstand zu Hochspannungsleitungen. Achten Sie auf herumfliegende Gegenstände.",
|
||||
"BBK-EVC-006": "Ausfall Telefonleitung",
|
||||
"BBK-EVC-009": "Bomben-/Munitionsfund",
|
||||
"BBK-ISC-036": "Vermeiden Sie alle Gegenstände mit Metallteilen wie Regenschirme oder Fahrräder.",
|
||||
"BBK-ISC-035": "Nehmen Sie empfindliche Geräte vom Netz.",
|
||||
"BBK-ISC-038": "Lassen Sie Haus- und Nutztiere nicht ins Freie.",
|
||||
"BBK-ISC-037": "Baden und duschen Sie während eines Gewitters nicht. Baden und duschen kann lebensgefährlich sein.",
|
||||
"BBK-EVC-003": "Ausfall Gasversorgung",
|
||||
"BBK-ISC-032": "Meiden Sie sehr große Räume wie zum Beispiel Hallen, in denen das Dach nicht durch Säulen gestützt wird.",
|
||||
"BBK-EVC-004": "Ausfall IT-Systeme",
|
||||
"BBK-ISC-031": "Meiden Sie Räume unmittelbar unter dem Dachstuhl.",
|
||||
"BBK-EVC-001": "Angriff auf IT-Systeme",
|
||||
"BBK-ISC-034": "Wenn Sie sich in offenem Gelände aufhalten, gehen Sie mit eng zusammenstehenden Füßen, möglichst in einer Mulde, auf den Fußballen in die Hocke.",
|
||||
"BBK-EVC-002": "Angriff mit Kernwaffen",
|
||||
"BBK-ISC-033": "Wenn es nirgendwo Schutz gibt, legen Sie sich mit dem Gesicht auf den Boden und schützen Sie Kopf und Nacken mit den Händen.",
|
||||
"BBK-ISC-029": "Suchen Sie geschützte Orte auf, an denen Sie nicht von Hagel getroffen werden können.",
|
||||
"BBK-ISC-028": "Bleiben Sie im Gebäude und warten Sie auf Anweisungen.",
|
||||
"BBK-EVC-018": "Erdbeben",
|
||||
"BBK-EVC-019": "Erdrutsch",
|
||||
"BBK-EVC-016": "Deichbruch",
|
||||
"BBK-ISC-041": "Gehen Sie bei Überschwemmungsgefahr nicht in Keller oder Tiefgaragen.",
|
||||
"BBK-EVC-017": "Demonstration",
|
||||
"BBK-ISC-040": "Begeben Sie sich in höher liegende Gebäudeteile.",
|
||||
"BBK-EVC-010": "Brandgase",
|
||||
"BBK-ISC-047": "Gehen Sie nicht an Gewässer, die Hochwasser führen. Flutwellen können Sie überraschen und das Ufer kann einbrechen.",
|
||||
"BBK-EVC-011": "Brandgefahr",
|
||||
"BBK-ISC-046": "Schalten Sie Strom, Gas und Heizungen in gefährdeten Räumen ab. Eine Stromschlaggefahr besteht bereits bei Kondenswasser! Liegt der Stromkasten im überfluteten Raum, betreten Sie diesen nicht, sondern informieren Sie die Feuerwehr (112).",
|
||||
"BBK-ISC-049": "Fahren Sie nicht durch überflutete Straßen. Schon eine geringe Wasserhöhe kann die Steuerung behindern.",
|
||||
"BBK-ISC-048": "Schwimmen Sie nicht in überschwemmten Straßen! Auch das Durchschreiten von überschwemmten Unterführungen ist lebensgefährlich! Durch den Druck im Kanal können Schachtabdeckungen hochgedrückt werden. Dabei entsteht ein Sog, durch den eine Person angesaugt werden kann.",
|
||||
"BBK-EVC-014": "Chemische Gefahr",
|
||||
"BBK-ISC-043": "Trennen Sie Gas-, Wasser- und Stromleitungen von der Versorgung.",
|
||||
"BBK-EVC-015": "Dammbruch",
|
||||
"BBK-ISC-042": "Bringen Sie persönliche Wertgegenstände in höher liegende Gebäudeteile.",
|
||||
"BBK-EVC-012": "Chemieunfall",
|
||||
"BBK-ISC-045": "Schalten Sie Strom und Heizungen in gefährdeten Räumen ab. Eine Stromschlaggefahr besteht bereits bei Kondenswasser! Liegt der Stromkasten im überfluteten Raum, betreten Sie diesen nicht, sondern informieren Sie die Feuerwehr (112).",
|
||||
"BBK-ISC-044": "Schließen Sie alle Gasleitungen.",
|
||||
"BBK-ISC-039": "Suchen Sie sofort höher liegende Gebiete auf.",
|
||||
"BBK-EVC-029": "Gefahrgutunfall",
|
||||
"BBK-EVC-027": "Gasaustritt",
|
||||
"BBK-EVC-028": "Gefahr durch Waffen",
|
||||
"BBK-EVC-021": "Extrem heftiger Starkregen",
|
||||
"BBK-EVC-022": "Extrem starke Schneeverwehungen",
|
||||
"BBK-EVC-020": "Explosionsgefahr",
|
||||
"BBK-EVC-025": "Flugzeugabsturz",
|
||||
"BBK-EVC-026": "Frost",
|
||||
"BBK-EVC-023": "Extreme Orkanböen",
|
||||
"BBK-EVC-024": "Extremes Glatteis",
|
||||
"BBK-EVC-038": "Hochwasser",
|
||||
"BBK-EVC-039": "Hohe UV-Strahlung",
|
||||
"BBK-EVC-032": "Glatteis",
|
||||
"BBK-ISC-102": "Erkundigen Sie sich über den Standort der Informationsstellen, die von den Behörden eingerichtet wurden.",
|
||||
"BBK-EVC-033": "Gletscherabbruch",
|
||||
"BBK-ISC-101": "Überprüfen und ergänzen Sie Ihre Ausrüstung und Vorräte an Wasser, Lebensmittel, Medikamente, Bargeld und Batterien.",
|
||||
"BBK-EVC-030": "Geruchsbelästigung",
|
||||
"BBK-ISC-104": "Warnen Sie andere Personen. Fordern Sie diese zur Flucht auf.",
|
||||
"BBK-EVC-031": "Gewitter",
|
||||
"BBK-ISC-103": "Wir melden, wenn die Gefahr vorüber ist.",
|
||||
"BBK-EVC-036": "Hagel",
|
||||
"BBK-EVC-037": "Hitze",
|
||||
"BBK-EVC-034": "Großbrand",
|
||||
"BBK-ISC-100": "Besorgen Sie sich Batterien für Taschenlampen und Radios.",
|
||||
"BBK-EVC-035": "Großveranstaltung",
|
||||
"BBK-EVC-049": "Nebel",
|
||||
"BBK-EVC-043": "Lawinengefahr",
|
||||
"BBK-ISC-113": "Sofern Sie keine Möglichkeit haben, ein Gebäude zu erreichen, legen Sie sich flach auf den Boden und schützen Sie den Kopf mit den Händen.",
|
||||
"BBK-EVC-044": "Lebensbedrohliche Lage",
|
||||
"BBK-ISC-112": "Legen Sie sich flach auf den Boden und schützen Sie Ihren Kopf mit den Händen.",
|
||||
"BBK-EVC-041": "Insektenplage",
|
||||
"BBK-ISC-115": "Sofern Sie sich in einem Fahrzeug aufhalten: Halten Sie auf dem Seitenstreifen bzw. am Fahrbahnrand an. Wenn sich ein Gebäude in der Nähe befindet, suchen Sie in diesem Gebäude Schutz.",
|
||||
"BBK-EVC-042": "Lärmbelästigung",
|
||||
"BBK-ISC-114": "Halten Sie auf dem Seitenstreifen bzw. am Fahrbahnrand an. Verlassen Sie das Fahrzeug: Das Benzin im Tank könnte durch die Auswirkungen einer Explosion entzündet werden.",
|
||||
"BBK-EVC-047": "Luftverschmutzung",
|
||||
"BBK-EVC-048": "Meteoriteneinschlag",
|
||||
"BBK-EVC-045": "Lebensmittelwarnung",
|
||||
"BBK-ISC-111": "Legen Sie sich auf den Boden, entfernt von Fenstern und Türen.",
|
||||
"BBK-EVC-046": "Luftangriff",
|
||||
"BBK-ISC-110": "Gehen Sie sofort in einen unterirdischen oder einen innenliegenden Raum mit möglichst wenig Außenwänden, Fenstern und Türen. Meiden Sie Gebäudeteile mit großen Glasflächen. Nutzen Sie keine Aufzüge.",
|
||||
"BBK-ISC-109": "Gehen Sie sofort in einen innenliegenden Raum mit möglichst wenig Außenwänden, Fenstern und Türen. Meiden Sie Gebäudeteile mit Glasflächen.",
|
||||
"BBK-ISC-106": "Suchen Sie Schutz, wenn Sie das Gebiet nicht sofort verlassen können.",
|
||||
"BBK-EVC-040": "Infektionsgefahr",
|
||||
"BBK-ISC-105": "Verstecken Sie sich.",
|
||||
"BBK-ISC-108": "Gehen Sie schnell in Innenräume.",
|
||||
"BBK-ISC-107": "Gehen Sie auf Polizeikräfte ruhig und besonnen zu. Halten Sie dabei die Hände hoch.",
|
||||
"BBK-EVC-054": "Schädlingsbefall",
|
||||
"BBK-ISC-003": "Verlassen Sie sofort das betroffene Gebiet.",
|
||||
"BBK-ISC-124": "Schwangere und Kinder bis 16 sollen sich in geschlossenen Räumen aufhalten.",
|
||||
"BBK-EVC-055": "Schiffshavarie",
|
||||
"BBK-ISC-002": "Meiden Sie den Gefährdungsbereich.",
|
||||
"BBK-ISC-123": "Bedecken Sie Mund und Nase mit einem improvisierten Atemschutz (Stofftuch, Kleidungsstück, OP-Maske). Bewegen Sie sich möglichst quer zur Windrichtung, da Sie so am schnellsten den Gefahrenbereich mit einer möglichen Gefahrstoffwolke verlassen.",
|
||||
"BBK-EVC-052": "Raketenangriff",
|
||||
"BBK-ISC-005": "Passen Sie Ihr Verhalten im Straßenverkehr den Verhältnissen an.",
|
||||
"BBK-ISC-126": "Halten Sie Jodtabletten bereit. Nehmen Sie die Jodtabletten jetzt NOCH NICHT ein. Wenn es erforderlich sein sollte, werden wir Sie rechtzeitig informieren.",
|
||||
"BBK-EVC-053": "Satellitenabsturz",
|
||||
"BBK-ISC-004": "Umfahren Sie das betroffene Gebiet weiträumig.",
|
||||
"BBK-ISC-125": "Ziehen Sie vor Betreten des Gebäudes Ihre Oberbekleidung und die Schuhe aus und lassen Sie diese außerhalb des Gebäudes zurück. Es könnte sein, dass Sie bereits mit einem Gefahrstoff in Kontakt gekommen sind. Waschen Sie sich zuerst die Hände, dann Gesicht und Haare sowie die Nase und die Ohren.",
|
||||
"BBK-EVC-058": "Schneeverwehungen",
|
||||
"BBK-ISC-120": "Informieren Sie die Einsatzkräfte über Schäden und Trümmerteile.",
|
||||
"BBK-EVC-059": "Sicherheitswarnung",
|
||||
"BBK-EVC-056": "Schlammlawine",
|
||||
"BBK-ISC-001": "Meiden Sie das betroffene Gebiet.",
|
||||
"BBK-ISC-122": "Suchen Sie einen Kellerraum oder innenliegende Räume in unteren Stockwerken auf.",
|
||||
"BBK-EVC-057": "Schneefall",
|
||||
"BBK-ISC-121": "Informieren Sie die Einsatzkräfte über Schäden und Trümmerteile. Trümmerteile können zusätzliche Gefahren wie Brände und Explosionen auslösen.",
|
||||
"BBK-EVC-050": "Probewarnung",
|
||||
"BBK-ISC-117": "Falls Sie das Fahrzeug nicht verlassen können, senken Sie den Kopf und schützen Sie diesen mit den Händen. Schalten Sie das Autoradio ein und achten Sie auf weitere Informationen.",
|
||||
"BBK-EVC-051": "Radiologische Gefahr",
|
||||
"BBK-ISC-116": "Halten Sie auf dem Seitenstreifen bzw. am Fahrbahnrand an. Verlassen Sie das Fahrzeug: Das Benzin im Tank könnte durch die Auswirkungen einer Explosion entzündet werden. Wenn sich ein Gebäude in der Nähe befindet, suchen Sie in diesem Gebäude Schutz.",
|
||||
"BBK-ISC-119": "Berühren Sie keine Gegenstände, die Ihnen verdächtig vorkommen: Es besteht die Gefahr weiterer Explosionen. Verlassen Sie umgehend den Bereich und teilen Sie die Position verdächtiger Gegenstände den Einsatzkräften mit.",
|
||||
"BBK-ISC-118": "Verlassen Sie sofort den Ort des Einschlags und bedecken Sie Mund und Nase mit einem improvisierten Atemschutz (Stofftuch, Kleidungsstück, OP-Maske). Dies schützt Sie vor Stäuben, allerdings nicht vor gasförmigen Gefahrstoffen. Suchen Sie ein Gebäude auf. Bewegen Sie sich möglichst quer zur Windrichtung, da Sie so am schnellsten den Gefahrenbereich mit einer möglichen Gefahrstoffwolke verlassen.",
|
||||
"BBK-ISC-094": "Feuern Sie Feuerwerkskörper nur mit Bewilligung der Gemeinde ab, halten Sie einen Sicherheitsabstand zum Wald ein und halten Sie Löschwasser bereit.",
|
||||
"BBK-ISC-093": "Zünden Sie keine Feuerwerkskörper.",
|
||||
"BBK-ISC-096": "Die Stromversorgung wird so schnell wie möglich wieder hergestellt.",
|
||||
"BBK-ISC-095": "Die Störung wird so schnell wie möglich behoben.",
|
||||
"BBK-ISC-090": "Werfen Sie keine brennenden Zigaretten und Streichhölzer weg.",
|
||||
"BBK-ISC-092": "Verwenden Sie beim Grillen fest eingerichtete Feuerstellen. Versichern Sie sich, dass Ihr Feuer vollständig gelöscht ist, bevor Sie den Ort verlassen.",
|
||||
"BBK-ISC-091": "Machen Sie im Freien kein Feuer.",
|
||||
"BBK-EVC-065": "Sturmflut",
|
||||
"BBK-EVC-066": "Sturzflut",
|
||||
"BBK-EVC-063": "Stromausfall",
|
||||
"BBK-EVC-064": "Sturm",
|
||||
"BBK-EVC-069": "Trinkwasserverschmutzung",
|
||||
"BBK-ISC-098": "Schalten Sie alle netzbetriebenen Geräte aus.",
|
||||
"BBK-ISC-097": "Reduzieren Sie Ihren Stromverbrauch über Akkus und Batterien auf das Nötigste.",
|
||||
"BBK-EVC-067": "Tierseuche",
|
||||
"BBK-EVC-068": "Tornado",
|
||||
"BBK-ISC-099": "Reduzieren Sie Ihren Wasserverbrauch auf das Nötigste.",
|
||||
"BBK-EVC-061": "Sonnensturm",
|
||||
"BBK-EVC-062": "Starkregen",
|
||||
"BBK-EVC-060": "Sirenentest",
|
||||
"BBK-EVC-999": "Ohne Benennung",
|
||||
"BBK-EVC-076": "Vulkanausbruch",
|
||||
"BBK-EVC-077": "Waldbrand",
|
||||
"BBK-EVC-074": "Verkehrsunfall",
|
||||
"BBK-EVC-075": "Verkehrswarnung",
|
||||
"BBK-EVC-078": "Warnung",
|
||||
"BBK-EVC-079": "Weltkriegsbombe",
|
||||
"BBK-EVC-072": "Unfall Kernkraftwerk",
|
||||
"BBK-EVC-073": "Ungeklärtes Abwasser",
|
||||
"BBK-EVC-070": "Tsunami",
|
||||
"BBK-EVC-071": "Überschwemmung",
|
||||
"BBK-EVC-087": "Extreme Wettersituationen, bei denen verbreitet mit Leiterseilschwingungen zu rechnen ist (keine Medienalarmierung)",
|
||||
"BBK-EVC-085": "Schweres Gewitter mit extrem großem Hagel",
|
||||
"BBK-EVC-086": "Schweres Gewitter mit extremen Orkanböen",
|
||||
"BBK-EVC-080": "Zugunfall",
|
||||
"BBK-EVC-083": "Extrem ergiebiger Dauerregen",
|
||||
"BBK-EVC-084": "Extrem starker Schneefall",
|
||||
"BBK-EVC-081": "Gesundheitsgefährdung",
|
||||
"BBK-EVC-082": "Schweres Gewitter mit extrem heftigem Starkregen"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,289 +0,0 @@
|
||||
{
|
||||
"mow.DE-BW-S-SE018-20211102-18-001": {
|
||||
"identifier": "mow.DE-BW-S-SE018-20211102-18-001",
|
||||
"sender": "DE-NW-BN-SE030",
|
||||
"sent": "2021-11-02T20:07:16+01:00",
|
||||
"status": "Actual",
|
||||
"msgType": "Update",
|
||||
"scope": "Public",
|
||||
"code": [
|
||||
"DVN:1",
|
||||
"medien_ueberregional",
|
||||
"nina",
|
||||
"Materna:noPush",
|
||||
"Materna:noMirror"
|
||||
],
|
||||
"references": "DE-NW-BN-SE030-20200506-30-001 DE-NW-BN-SE030-20200422-30-000 DE-NW-BN-SE030-20200420-30-001 DE-NW-BN-SE030-20200416-30-001 DE-NW-BN-SE030-20200403-30-000 DE-NW-BN-W003,mow.DE-NW-BN-SE030-20200506-30-001 mow.DE-NW-BN-SE030-20200422-30-000 mow.DE-NW-BN-SE030-20200420-30-001 mow.DE-NW-BN-SE030-20200416-30-001 mow.DE-NW-BN-SE030-20200403-30-000 mow.DE-NW-BN-W003-20200403-000,2020-04-03T00:00:00+00:00",
|
||||
"info": [
|
||||
{
|
||||
"language": "DE",
|
||||
"category": ["Health"],
|
||||
"event": "Gefahreninformation",
|
||||
"urgency": "Immediate",
|
||||
"severity": "Minor",
|
||||
"certainty": "Observed",
|
||||
"eventCode": [
|
||||
{
|
||||
"valueName": "profile:DE-BBK-EVENTCODE",
|
||||
"value": "BBK-EVC-040"
|
||||
}
|
||||
],
|
||||
"headline": "Corona-Verordnung des Landes: Warnstufe durch Landesgesundheitsamt ausgerufen",
|
||||
"description": "Die Zahl der mit dem Corona-Virus infizierten Menschen steigt gegenwärtig stark an. Es wächst daher die Gefahr einer weiteren Verbreitung der Infektion und - je nach Einzelfall - auch von schweren Erkrankungen.",
|
||||
"instruction": "Waschen sich regelmäßig und gründlich die Hände.",
|
||||
"contact": "Weitere Informationen und Empfehlungen finden Sie im Corona-Informations-Bereich der Warn-App NINA. Beachten Sie auch die Internetseiten der örtlichen Gesundheitsbehörde (Stadt- bzw. Kreisverwaltung) Ihres Aufenthaltsortes",
|
||||
"parameter": [
|
||||
{
|
||||
"valueName": "instructionText",
|
||||
"value": "- Beachten Sie die AHA + A + L - Regeln:\nAbstand halten - 1,5 m Mindestabstand beachten, Körperkontakt vermeiden! \nHygiene - regelmäßiges Händewaschen, Husten- und Nieshygiene beachten! \nAlltagsmaske (Mund-Nase-Bedeckung) tragen! \nApp - installieren und nutzen Sie die Corona-Warn-App! \nLüften: Sorgen Sie für eine regelmäßige und gründliche Lüftung von Räumen - auch und gerade in der kommenden kalten Jahreszeit! \n- Bitte folgen Sie den behördlichen Anordnungen. \n- Husten und niesen Sie in ein Taschentuch oder in die Armbeuge. \n- Bleiben Sie bei Erkältungssymptomen nach Möglichkeit zu Hause. Kontaktieren Sie Ihre Hausarztpraxis per Telefon oder wenden sich an die Telefonnummer 116117 des Ärztlichen Bereitschaftsdienstes und besprechen Sie das weitere Vorgehen. Gehen Sie nicht unaufgefordert in eine Arztpraxis oder ins Krankenhaus. \n- Seien Sie kritisch: Informieren Sie sich nur aus gesicherten Quellen."
|
||||
},
|
||||
{
|
||||
"valueName": "warnVerwaltungsbereiche",
|
||||
"value": "130000000000,140000000000,160000000000,110000000000,020000000000,070000000000,030000000000,050000000000,080000000000,120000000000,010000000000,150000000000,040000000000,060000000000,090000000000,100000000000"
|
||||
},
|
||||
{
|
||||
"valueName": "instructionCode",
|
||||
"value": "BBK-ISC-082"
|
||||
},
|
||||
{
|
||||
"valueName": "sender_langname",
|
||||
"value": "BBK, Nationale Warnzentrale Bonn"
|
||||
},
|
||||
{
|
||||
"valueName": "sender_signature",
|
||||
"value": "Bundesamt für Bevölkerungsschutz und Katastrophenhilfe\nNationale Warnzentrale Bonn\nhttps://warnung.bund.de"
|
||||
},
|
||||
{
|
||||
"valueName": "PHGEM",
|
||||
"value": "1+11057,100001"
|
||||
},
|
||||
{
|
||||
"valueName": "ZGEM",
|
||||
"value": "1+11057,100001"
|
||||
}
|
||||
],
|
||||
"area": [
|
||||
{
|
||||
"areaDesc": "Bundesland: Freie Hansestadt Bremen, Land Berlin, Land Hessen, Land Nordrhein-Westfalen, Land Brandenburg, Freistaat Bayern, Land Mecklenburg-Vorpommern, Land Rheinland-Pfalz, Freistaat Sachsen, Land Schleswig-Holstein, Freie und Hansestadt Hamburg, Freistaat Thüringen, Land Niedersachsen, Land Saarland, Land Sachsen-Anhalt, Land Baden-Württemberg",
|
||||
"geocode": [
|
||||
{
|
||||
"valueName": "AreaId",
|
||||
"value": "0"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"mow.DE-NW-BN-SE030-20201014-30-000": {
|
||||
"identifier": "mow.DE-NW-BN-SE030-20201014-30-000",
|
||||
"sender": "opendata@dwd.de",
|
||||
"sent": "2021-10-11T05:20:00+01:00",
|
||||
"status": "Actual",
|
||||
"msgType": "Alert",
|
||||
"source": "PVW",
|
||||
"scope": "Public",
|
||||
"code": [
|
||||
"DVN:2",
|
||||
"id:2.49.0.0.276.0.DWD.PVW.1645004040000.5a168da8-ac20-4b6d-86be-d616526a7914"
|
||||
],
|
||||
"info": [
|
||||
{
|
||||
"language": "de-DE",
|
||||
"category": ["Met"],
|
||||
"event": "STURMBÖEN",
|
||||
"responseType": ["Prepare"],
|
||||
"urgency": "Immediate",
|
||||
"severity": "Moderate",
|
||||
"certainty": "Likely",
|
||||
"eventCode": [
|
||||
{
|
||||
"valueName": "PROFILE_VERSION",
|
||||
"value": "2.1.11"
|
||||
},
|
||||
{
|
||||
"valueName": "LICENSE",
|
||||
"value": "© GeoBasis-DE / BKG 2019 (Daten modifiziert)"
|
||||
},
|
||||
{
|
||||
"valueName": "II",
|
||||
"value": "52"
|
||||
},
|
||||
{
|
||||
"valueName": "GROUP",
|
||||
"value": "WIND"
|
||||
},
|
||||
{
|
||||
"valueName": "AREA_COLOR",
|
||||
"value": "251 140 0"
|
||||
}
|
||||
],
|
||||
"effective": "2021-11-01T03:20:00+01:00",
|
||||
"onset": "2021-11-01T05:20:00+01:00",
|
||||
"expires": "3021-11-22T05:19:00+01:00",
|
||||
"senderName": "Deutscher Wetterdienst",
|
||||
"headline": "Ausfall Notruf 112",
|
||||
"description": "Es treten Sturmböen mit Geschwindigkeiten zwischen 70 km/h (20m/s, 38kn, Bft 8) und 85 km/h (24m/s, 47kn, Bft 9) aus westlicher Richtung auf. In Schauernähe sowie in exponierten Lagen muss mit schweren Sturmböen bis 90 km/h (25m/s, 48kn, Bft 10) gerechnet werden.",
|
||||
"web": "https://www.wettergefahren.de",
|
||||
"contact": "Deutscher Wetterdienst",
|
||||
"parameter": [
|
||||
{
|
||||
"valueName": "gusts",
|
||||
"value": "70-85 [km/h]"
|
||||
},
|
||||
{
|
||||
"valueName": "exposed gusts",
|
||||
"value": "<90 [km/h]"
|
||||
},
|
||||
{
|
||||
"valueName": "wind direction",
|
||||
"value": "west"
|
||||
},
|
||||
{
|
||||
"valueName": "PHGEM",
|
||||
"value": "3243+168,3413+1,3424+52,3478+1,3495+2,3499,3639+2527,6168+1,6175+22,6199+36,6238,6241+7,6256,9956+184,10142,10154,10164+7,10173,10176+6,10186+1,10195+2,10199,10201+6,10214+4,10220,10249+117,10368,10373+2,10425+9,10436+1,10440+8,10450+1,10453+7,10462+1,10467+5,10474+2,10484+5,10773+68,10843+2,10847+9,10858,10867+8,10878+1,10882+68,10952+7,10961+2,11046,11056+1"
|
||||
},
|
||||
{
|
||||
"valueName": "ZGEM",
|
||||
"value": "3243+168,3413+1,3424+52,3478+1,3495+2,3499,3639+2527,6168+1,6175+22,6199+36,6238,6241+7,6256,9956+184,10142,10154,10164+7,10173,10176+6,10186+1,10195+2,10199,10201+6,10214+4,10220,10249+117,10368,10373+2,10425+9,10436+1,10440+8,10450+1,10453+7,10462+1,10467+5,10474+2,10484+5,10773+68,10843+2,10847+9,10858,10867+8,10878+1,10882+68,10952+7,10961+2,11046,11056+1"
|
||||
}
|
||||
],
|
||||
"area": [
|
||||
{
|
||||
"areaDesc": "Gemeinde Oberreichenbach, Gemeinde Neuweiler, Stadt Nagold, Stadt Neubulach, Gemeinde Schömberg, Gemeinde Simmersfeld, Gemeinde Simmozheim, Gemeinde Rohrdorf, Gemeinde Ostelsheim, Gemeinde Ebhausen, Gemeinde Egenhausen, Gemeinde Dobel, Stadt Bad Liebenzell, Stadt Solingen, Stadt Haiterbach, Stadt Bad Herrenalb, Gemeinde Höfen an der Enz, Gemeinde Gechingen, Gemeinde Enzklösterle, Gemeinde Gutach (Schwarzwaldbahn) und 3392 weitere."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"mow.DE-NW-BN-SE030-20201014-30-011": {
|
||||
"identifier": "mow.DE-NW-BN-SE030-20201014-30-011",
|
||||
"sender": "opendata@dwd.de",
|
||||
"sent": "2021-10-11T05:21:00+01:00",
|
||||
"status": "Actual",
|
||||
"msgType": "Alert",
|
||||
"source": "PVW",
|
||||
"scope": "Public",
|
||||
"code": [
|
||||
"DVN:2",
|
||||
"id:2.49.0.0.276.0.DWD.PVW.1645004040000.5a168da8-ac20-4b6d-86be-d616526a7914"
|
||||
],
|
||||
"info": [
|
||||
{
|
||||
"language": "de-DE",
|
||||
"category": ["Met"],
|
||||
"event": "STURMBÖEN",
|
||||
"responseType": ["Prepare"],
|
||||
"urgency": "Immediate",
|
||||
"severity": "Moderate",
|
||||
"certainty": "Likely",
|
||||
"eventCode": [
|
||||
{
|
||||
"valueName": "PROFILE_VERSION",
|
||||
"value": "2.1.11"
|
||||
},
|
||||
{
|
||||
"valueName": "LICENSE",
|
||||
"value": "© GeoBasis-DE / BKG 2019 (Daten modifiziert)"
|
||||
},
|
||||
{
|
||||
"valueName": "II",
|
||||
"value": "52"
|
||||
},
|
||||
{
|
||||
"valueName": "GROUP",
|
||||
"value": "WIND"
|
||||
},
|
||||
{
|
||||
"valueName": "AREA_COLOR",
|
||||
"value": "251 140 0"
|
||||
}
|
||||
],
|
||||
"effective": "2021-11-01T03:20:00+01:00",
|
||||
"onset": "2021-11-01T05:20:00+01:00",
|
||||
"expires": "3021-11-22T05:19:00+01:00",
|
||||
"senderName": "Deutscher Wetterdienst",
|
||||
"headline": "Ausfall Notruf 112",
|
||||
"description": "Es treten Sturmböen mit Geschwindigkeiten zwischen 70 km/h (20m/s, 38kn, Bft 8) und 85 km/h (24m/s, 47kn, Bft 9) aus westlicher Richtung auf. In Schauernähe sowie in exponierten Lagen muss mit schweren Sturmböen bis 90 km/h (25m/s, 48kn, Bft 10) gerechnet werden.",
|
||||
"instruction": "ACHTUNG! Hinweis auf mögliche Gefahren: Es können zum Beispiel einzelne Äste herabstürzen. Achten Sie besonders auf herabfallende Gegenstände.",
|
||||
"web": "https://www.wettergefahren.de",
|
||||
"contact": "Deutscher Wetterdienst",
|
||||
"parameter": [
|
||||
{
|
||||
"valueName": "gusts",
|
||||
"value": "70-85 [km/h]"
|
||||
},
|
||||
{
|
||||
"valueName": "exposed gusts",
|
||||
"value": "<90 [km/h]"
|
||||
},
|
||||
{
|
||||
"valueName": "wind direction",
|
||||
"value": "west"
|
||||
},
|
||||
{
|
||||
"valueName": "PHGEM",
|
||||
"value": "3243+168,3413+1,3424+52,3478+1,3495+2,3499,3639+2527,6168+1,6175+22,6199+36,6238,6241+7,6256,9956+184,10142,10154,10164+7,10173,10176+6,10186+1,10195+2,10199,10201+6,10214+4,10220,10249+117,10368,10373+2,10425+9,10436+1,10440+8,10450+1,10453+7,10462+1,10467+5,10474+2,10484+5,10773+68,10843+2,10847+9,10858,10867+8,10878+1,10882+68,10952+7,10961+2,11046,11056+1"
|
||||
},
|
||||
{
|
||||
"valueName": "ZGEM",
|
||||
"value": "3243+168,3413+1,3424+52,3478+1,3495+2,3499,3639+2527,6168+1,6175+22,6199+36,6238,6241+7,6256,9956+184,10142,10154,10164+7,10173,10176+6,10186+1,10195+2,10199,10201+6,10214+4,10220,10249+117,10368,10373+2,10425+9,10436+1,10440+8,10450+1,10453+7,10462+1,10467+5,10474+2,10484+5,10773+68,10843+2,10847+9,10858,10867+8,10878+1,10882+68,10952+7,10961+2,11046,11056+1"
|
||||
}
|
||||
],
|
||||
"area": [
|
||||
{
|
||||
"areaDesc": "Gemeinde Oberreichenbach, Gemeinde Neuweiler, Stadt Nagold, Stadt Neubulach, Gemeinde Schömberg, Gemeinde Simmersfeld, Gemeinde Simmozheim, Gemeinde Rohrdorf, Gemeinde Ostelsheim, Gemeinde Ebhausen, Gemeinde Egenhausen, Gemeinde Dobel, Stadt Bad Liebenzell, Stadt Solingen, Stadt Haiterbach, Stadt Bad Herrenalb, Gemeinde Höfen an der Enz, Gemeinde Gechingen, Gemeinde Enzklösterle, Gemeinde Gutach (Schwarzwaldbahn) und 3392 weitere."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"biw.BIWAPP-69634": {
|
||||
"identifier": "biw.BIWAPP-69634",
|
||||
"sender": "CAP@biwapp.de",
|
||||
"sent": "1999-08-07T10:59:00+02:00",
|
||||
"status": "Actual",
|
||||
"msgType": "Alert",
|
||||
"scope": "Public",
|
||||
"code": ["DVN:2", "BIWAPP"],
|
||||
"info": [
|
||||
{
|
||||
"language": "DE",
|
||||
"category": ["Other"],
|
||||
"event": "4",
|
||||
"urgency": "Unknown",
|
||||
"severity": "Minor",
|
||||
"certainty": "Unknown",
|
||||
"expires": "2002-08-07T10:59:00+02:00",
|
||||
"headline": "Geflügelpest im Landkreis Cuxhaven - Teile des Landkreises Osterholz zur Überwachungszone erklärt",
|
||||
"description": "In Beverstedt im Landkreis Cuxhaven ist am 20. Juli 2022 in einer Geflügelhaltung der Ausbruch der Geflügelpest (Vogelgrippe, Aviäre Influenza) amtlich festgestellt worden. Durch die geografische Nähe des Ausbruchsbetriebes zum Gebiet des Landkreises Osterholz musste das Veterinäramt des Landkreises zum Schutz vor einer Ausbreitung der Geflügelpest auch für sein Gebiet ein Restriktionsgebiet festlegen. Rund um den Ausbruchsort wurde eine Überwachungszone ausgewiesen. Eine entsprechende Tierseuchenbehördliche Allgemeinverfügung wurde vom Landkreis Osterholz erlassen und tritt am 23.07.2022 in Kraft.<br> <br>Die Überwachungszone mit einem Radius von mindestens zehn Kilometern um den Ausbruchsbetrieb erstreckt sich im Landkreis Osterholz innerhalb der Samtgemeinde Hambergen auf die Mitgliedsgemeinden Axstedt, Holste und Lübberstedt. Die vorgenannten Gemeinden sind vollständig zur Überwachungszone erklärt worden. Der genaue Grenzverlauf des Gebietes kann auch der interaktiven Karte im Internet entnommen werden.<br> <br>In der Überwachungszone liegen im Landkreis Osterholz rund 70 Geflügelhaltungen mit einem Gesamtbestand von rund 1.800 Tieren. Sie alle unterliegen mit der Allgemeinverfügung der sogenannten amtlichen Beobachtung. Für die Betriebe sind die Biosicherheitsmaßnahmen einzuhalten. Dazu zählen insbesondere Hygienemaßnahmen im laufenden Betrieb und eine ordnungsgemäße Schadnagerbekämpfung.<br> <br>Das Verbringen von Vögeln, Fleisch von Geflügel, Eiern und sonstige Nebenprodukte von Geflügel in und aus Betrieben in der Überwachungszone ist verboten. Auch Geflügeltransporte sind in der Überwachungszone verboten. Jeder Verdacht der Erkrankung auf Geflügelpest ist zudem dem Veterinäramt des Landkreises Osterholz unter der E-Mail-Adresse veterinaeramt@landkreis-osterholz.de sofort zu melden. Alle Hinweise, die innerhalb der Überwachungszone zu beachten sind, sind unter www.landkreis-osterholz.de/gefluegelpest zusammengefasst dargestellt.<br> <br>Die Veterinärbehörde weist zudem darauf hin, dass sämtliche Geflügelhaltungen – Hühner, Enten, Gänse, Fasane, Perlhühner, Rebhühner, Truthühner, Wachteln oder Laufvögel – der zuständigen Behörde angezeigt werden müssen. Wer dies bisher noch nicht gemacht hat und über keine Registriernummer für seinen Geflügelbestand verfügt, sollte die Meldung über das Veterinäramt umgehend nachholen.<br> <br>Das Beobachtungsgebiet kann frühestens 30 Tage nach der Grobreinigung des Ausbruchsbetriebes wieder aufgehoben werden. Hierüber wird der Landkreis Osterholz informieren.<br> <br>Die Allgemeinverfügung, eine Übersicht zur Überwachungszone und weitere Hinweise sind auf der Internetseite unter www.landkreis-osterholz.de/gefluegelpest zu finden.",
|
||||
"parameter": [
|
||||
{
|
||||
"valueName": "sender_langname",
|
||||
"value": "Landkreis Osterholz"
|
||||
},
|
||||
{
|
||||
"valueName": "PHGEM",
|
||||
"value": "740+10,770,792,817,100001"
|
||||
},
|
||||
{
|
||||
"valueName": "GRID",
|
||||
"value": "101346,101954+7,102566+9,103177+13,103774,103790+13,104387+1,104403+13,105000+1,105016+15,105612+2,105630+15,106225+2,106241+18,106838+2,106853+18,107451+1,107464+22,108064+9,108075+23,108677+34,109290+34,109903+35,110516+35,111129+35,111742+35,112355,112357+34,112971+33,113587+30,114200+30,114814,114818+26,115432,115436+22,116050+21,116669+15,117283+5,117290+7,117897+3,117904+6,500001"
|
||||
}
|
||||
],
|
||||
"area": [
|
||||
{
|
||||
"areaDesc": "Axstedt, Gnarrenburg, Grasberg, Hagen im Bremischen, Hambergen, Hepstedt, Holste, Lilienthal, Lübberstedt, Osterholz-Scharmbeck, Ritterhude, Schwanewede, Vollersode, Worpswede",
|
||||
"geocode": [
|
||||
{
|
||||
"valueName": "AreaId",
|
||||
"value": "0"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,89 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": "mow.DE-BW-S-SE018-20211102-18-001",
|
||||
"payload": {
|
||||
"version": 1,
|
||||
"type": "ALERT",
|
||||
"id": "mow.DE-BW-S-SE018-20211102-18-001",
|
||||
"hash": "cae97b1c11bde900017305f681904ad5a6e8fd1c841241ced524b83eaa3522f4",
|
||||
"data": {
|
||||
"headline": "Corona-Verordnung des Landes: Warnstufe durch Landesgesundheitsamt ausgerufen",
|
||||
"provider": "MOWAS",
|
||||
"severity": "Minor",
|
||||
"msgType": "Update",
|
||||
"transKeys": { "event": "BBK-EVC-040" },
|
||||
"area": { "type": "ZGEM", "data": "9956+1102,100001" }
|
||||
}
|
||||
},
|
||||
"i18nTitle": {
|
||||
"de": "Corona-Verordnung des Landes: Warnstufe durch Landesgesundheitsamt ausgerufen"
|
||||
},
|
||||
"sent": "2021-11-02T20:07:16+01:00"
|
||||
},
|
||||
{
|
||||
"id": "mow.DE-NW-BN-SE030-20201014-30-000",
|
||||
"payload": {
|
||||
"version": 1,
|
||||
"type": "ALERT",
|
||||
"id": "mow.DE-NW-BN-SE030-20201014-30-000",
|
||||
"hash": "551db820a43be7e4f39283e1dfb71b212cd520c3ee478d44f43519e9c48fde4c",
|
||||
"data": {
|
||||
"headline": "Ausfall Notruf 112",
|
||||
"provider": "MOWAS",
|
||||
"severity": "Minor",
|
||||
"msgType": "Update",
|
||||
"transKeys": { "event": "BBK-EVC-040" },
|
||||
"area": { "type": "ZGEM", "data": "1+11057,100001" }
|
||||
}
|
||||
},
|
||||
"i18nTitle": { "de": "Ausfall Notruf 112" },
|
||||
"onset": "2021-11-01T05:20:00+01:00",
|
||||
"sent": "2021-10-11T05:20:00+01:00",
|
||||
"expires": "3021-11-22T05:19:00+01:00"
|
||||
},
|
||||
{
|
||||
"id": "mow.DE-NW-BN-SE030-20201014-30-011",
|
||||
"payload": {
|
||||
"version": 1,
|
||||
"type": "ALERT",
|
||||
"id": "mow.DE-NW-BN-SE030-20201014-30-011",
|
||||
"hash": "551db820a43be7e4f39283e1dfb71b212cd520c3ee478d44f43519e9c42fde1c",
|
||||
"data": {
|
||||
"headline": "Ausfall Notruf 112",
|
||||
"provider": "MOWAS",
|
||||
"severity": "Minor",
|
||||
"msgType": "Update",
|
||||
"transKeys": { "event": "BBK-EVC-040" },
|
||||
"area": { "type": "ZGEM", "data": "1+11057,100001" }
|
||||
}
|
||||
},
|
||||
"i18nTitle": { "de": "Ausfall Notruf 112" },
|
||||
"onset": "2021-11-01T05:20:00+01:00",
|
||||
"sent": "2021-10-11T05:21:00+01:00",
|
||||
"expires": "3021-11-22T05:19:00+01:00"
|
||||
},
|
||||
{
|
||||
"id": "biw.BIWAPP-69634",
|
||||
"payload": {
|
||||
"version": 2,
|
||||
"type": "ALERT",
|
||||
"id": "biw.BIWAPP-69634",
|
||||
"hash": "fdbafb6b164f549ff60b9adfa5b1c707069cdd178bf55f025066f319451660ad",
|
||||
"data": {
|
||||
"headline": "Geflügelpest im Landkreis Cuxhaven - Teile des Landkreises Osterholz zur Überwachungszone erklärt",
|
||||
"provider": "BIWAPP",
|
||||
"severity": "Minor",
|
||||
"msgType": "Alert",
|
||||
"area": {
|
||||
"type": "GRID",
|
||||
"data": "101346,101954+7,102566+9,103177+13,103774,103790+13,104387+1,104403+13,105000+1,105016+15,105612+2,105630+15,106225+2,106241+18,106838+2,106853+18,107451+1,107464+22,108064+9,108075+23,108677+34,109290+34,109903+35,110516+35,111129+35,111742+35,112355,112357+34,112971+33,113587+30,114200+30,114814,114818+26,115432,115436+22,116050+21,116669+15,117283+5,117290+7,117897+3,117904+6,500001"
|
||||
}
|
||||
}
|
||||
},
|
||||
"i18nTitle": {
|
||||
"de": "Geflügelpest im Landkreis Cuxhaven - Teile des Landkreises Osterholz zur Überwachungszone erklärt"
|
||||
},
|
||||
"sent": "1999-08-07T10:59:00+02:00",
|
||||
"expires": "2002-08-07T10:59:00+02:00"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,64 @@
|
||||
[
|
||||
{
|
||||
"id": "mow.DE-BW-S-SE018-20211102-18-001",
|
||||
"headline": "Corona-Verordnung des Landes: Warnstufe durch Landesgesundheitsamt ausgerufen",
|
||||
"severity": "Minor",
|
||||
"description": "Die Zahl der mit dem Corona-Virus infizierten Menschen steigt gegenwärtig stark an. Es wächst daher die Gefahr einer weiteren Verbreitung der Infektion und - je nach Einzelfall - auch von schweren Erkrankungen.",
|
||||
"sender": null,
|
||||
"affected_areas": [
|
||||
"Bundesland: Freie Hansestadt Bremen, Land Berlin, Land Hessen, Land Nordrhein-Westfalen, Land Brandenburg, Freistaat Bayern, Land Mecklenburg-Vorpommern, Land Rheinland-Pfalz, Freistaat Sachsen, Land Schleswig-Holstein, Freie und Hansestadt Hamburg, Freistaat Thüringen, Land Niedersachsen, Land Saarland, Land Sachsen-Anhalt, Land Baden-Württemberg"
|
||||
],
|
||||
"recommended_actions": ["Waschen sich regelmäßig und gründlich die Hände."],
|
||||
"web": null,
|
||||
"sent": "2021-11-02T20:07:16+01:00",
|
||||
"start": null,
|
||||
"expires": null
|
||||
},
|
||||
{
|
||||
"id": "mow.DE-NW-BN-SE030-20201014-30-000",
|
||||
"headline": "Ausfall Notruf 112",
|
||||
"severity": "Minor",
|
||||
"description": "Es treten Sturmböen mit Geschwindigkeiten zwischen 70 km/h (20m/s, 38kn, Bft 8) und 85 km/h (24m/s, 47kn, Bft 9) aus westlicher Richtung auf. In Schauernähe sowie in exponierten Lagen muss mit schweren Sturmböen bis 90 km/h (25m/s, 48kn, Bft 10) gerechnet werden.",
|
||||
"sender": "Deutscher Wetterdienst",
|
||||
"affected_areas": [
|
||||
"Gemeinde Oberreichenbach, Gemeinde Neuweiler, Stadt Nagold, Stadt Neubulach, Gemeinde Schömberg, Gemeinde Simmersfeld, Gemeinde Simmozheim, Gemeinde Rohrdorf, Gemeinde Ostelsheim, Gemeinde Ebhausen, Gemeinde Egenhausen, Gemeinde Dobel, Stadt Bad Liebenzell, Stadt Solingen, Stadt Haiterbach, Stadt Bad Herrenalb, Gemeinde Höfen an der Enz, Gemeinde Gechingen, Gemeinde Enzklösterle, Gemeinde Gutach (Schwarzwaldbahn) und 3392 weitere."
|
||||
],
|
||||
"recommended_actions": [],
|
||||
"web": "https://www.wettergefahren.de",
|
||||
"sent": "2021-10-11T05:20:00+01:00",
|
||||
"start": "2021-11-01T05:20:00+01:00",
|
||||
"expires": "3021-11-22T05:19:00+01:00"
|
||||
},
|
||||
{
|
||||
"id": "mow.DE-NW-BN-SE030-20201014-30-011",
|
||||
"headline": "Ausfall Notruf 112",
|
||||
"severity": "Minor",
|
||||
"description": "Es treten Sturmböen mit Geschwindigkeiten zwischen 70 km/h (20m/s, 38kn, Bft 8) und 85 km/h (24m/s, 47kn, Bft 9) aus westlicher Richtung auf. In Schauernähe sowie in exponierten Lagen muss mit schweren Sturmböen bis 90 km/h (25m/s, 48kn, Bft 10) gerechnet werden.",
|
||||
"sender": "Deutscher Wetterdienst",
|
||||
"affected_areas": [
|
||||
"Gemeinde Oberreichenbach, Gemeinde Neuweiler, Stadt Nagold, Stadt Neubulach, Gemeinde Schömberg, Gemeinde Simmersfeld, Gemeinde Simmozheim, Gemeinde Rohrdorf, Gemeinde Ostelsheim, Gemeinde Ebhausen, Gemeinde Egenhausen, Gemeinde Dobel, Stadt Bad Liebenzell, Stadt Solingen, Stadt Haiterbach, Stadt Bad Herrenalb, Gemeinde Höfen an der Enz, Gemeinde Gechingen, Gemeinde Enzklösterle, Gemeinde Gutach (Schwarzwaldbahn) und 3392 weitere."
|
||||
],
|
||||
"recommended_actions": [
|
||||
"ACHTUNG! Hinweis auf mögliche Gefahren: Es können zum Beispiel einzelne Äste herabstürzen. Achten Sie besonders auf herabfallende Gegenstände."
|
||||
],
|
||||
"web": "https://www.wettergefahren.de",
|
||||
"sent": "2021-10-11T05:21:00+01:00",
|
||||
"start": "2021-11-01T05:20:00+01:00",
|
||||
"expires": "3021-11-22T05:19:00+01:00"
|
||||
},
|
||||
{
|
||||
"id": "biw.BIWAPP-69634",
|
||||
"headline": "Geflügelpest im Landkreis Cuxhaven - Teile des Landkreises Osterholz zur Überwachungszone erklärt",
|
||||
"severity": "Minor",
|
||||
"description": "In Beverstedt im Landkreis Cuxhaven ist am 20. Juli 2022 in einer Geflügelhaltung der Ausbruch der Geflügelpest (Vogelgrippe, Aviäre Influenza) amtlich festgestellt worden. Durch die geografische Nähe des Ausbruchsbetriebes zum Gebiet des Landkreises Osterholz musste das Veterinäramt des Landkreises zum Schutz vor einer Ausbreitung der Geflügelpest auch für sein Gebiet ein Restriktionsgebiet festlegen. Rund um den Ausbruchsort wurde eine Überwachungszone ausgewiesen. Eine entsprechende Tierseuchenbehördliche Allgemeinverfügung wurde vom Landkreis Osterholz erlassen und tritt am 23.07.2022 in Kraft.<br> <br>Die Überwachungszone mit einem Radius von mindestens zehn Kilometern um den Ausbruchsbetrieb erstreckt sich im Landkreis Osterholz innerhalb der Samtgemeinde Hambergen auf die Mitgliedsgemeinden Axstedt, Holste und Lübberstedt. Die vorgenannten Gemeinden sind vollständig zur Überwachungszone erklärt worden. Der genaue Grenzverlauf des Gebietes kann auch der interaktiven Karte im Internet entnommen werden.<br> <br>In der Überwachungszone liegen im Landkreis Osterholz rund 70 Geflügelhaltungen mit einem Gesamtbestand von rund 1.800 Tieren. Sie alle unterliegen mit der Allgemeinverfügung der sogenannten amtlichen Beobachtung. Für die Betriebe sind die Biosicherheitsmaßnahmen einzuhalten. Dazu zählen insbesondere Hygienemaßnahmen im laufenden Betrieb und eine ordnungsgemäße Schadnagerbekämpfung.<br> <br>Das Verbringen von Vögeln, Fleisch von Geflügel, Eiern und sonstige Nebenprodukte von Geflügel in und aus Betrieben in der Überwachungszone ist verboten. Auch Geflügeltransporte sind in der Überwachungszone verboten. Jeder Verdacht der Erkrankung auf Geflügelpest ist zudem dem Veterinäramt des Landkreises Osterholz unter der E-Mail-Adresse veterinaeramt@landkreis-osterholz.de sofort zu melden. Alle Hinweise, die innerhalb der Überwachungszone zu beachten sind, sind unter www.landkreis-osterholz.de/gefluegelpest zusammengefasst dargestellt.<br> <br>Die Veterinärbehörde weist zudem darauf hin, dass sämtliche Geflügelhaltungen – Hühner, Enten, Gänse, Fasane, Perlhühner, Rebhühner, Truthühner, Wachteln oder Laufvögel – der zuständigen Behörde angezeigt werden müssen. Wer dies bisher noch nicht gemacht hat und über keine Registriernummer für seinen Geflügelbestand verfügt, sollte die Meldung über das Veterinäramt umgehend nachholen.<br> <br>Das Beobachtungsgebiet kann frühestens 30 Tage nach der Grobreinigung des Ausbruchsbetriebes wieder aufgehoben werden. Hierüber wird der Landkreis Osterholz informieren.<br> <br>Die Allgemeinverfügung, eine Übersicht zur Überwachungszone und weitere Hinweise sind auf der Internetseite unter www.landkreis-osterholz.de/gefluegelpest zu finden.",
|
||||
"sender": null,
|
||||
"affected_areas": [
|
||||
"Axstedt, Gnarrenburg, Grasberg, Hagen im Bremischen, Hambergen, Hepstedt, Holste, Lilienthal, Lübberstedt, Osterholz-Scharmbeck, Ritterhude, Schwanewede, Vollersode, Worpswede"
|
||||
],
|
||||
"recommended_actions": [],
|
||||
"web": null,
|
||||
"sent": "1999-08-07T10:59:00+02:00",
|
||||
"start": null,
|
||||
"expires": "2002-08-07T10:59:00+02:00"
|
||||
}
|
||||
]
|
||||
@@ -2,7 +2,7 @@
|
||||
# name: test_diagnostics
|
||||
dict({
|
||||
'data': dict({
|
||||
'083350000000': list([
|
||||
'095760000000': list([
|
||||
dict({
|
||||
'affected_areas': 'Gemeinde Oberreichenbach, Gemeinde Neuweiler, Stadt Nagold, Stadt Neubulach, Gemeinde Schömberg, Gemeinde Simmersfeld, Gemeinde Simmozheim, Gemeinde Rohrdorf, Gemeinde Ostelsheim, Gemeinde Ebhausen, Gemeinde Egenhausen, Gemeinde Dobel, Stadt Bad Liebenzell, Stadt Solingen, Stadt Haiterbach, Stadt Bad Herrenalb, Gemeinde Höfen an der Enz, Gemeinde Gechingen, Gemeinde Enzklösterle, Gemeinde Gutach (Schwarzwaldbahn) und 3392 weitere.',
|
||||
'description': 'Es treten Sturmböen mit Geschwindigkeiten zwischen 70 km/h (20m/s, 38kn, Bft 8) und 85 km/h (24m/s, 47kn, Bft 9) aus westlicher Richtung auf. In Schauernähe sowie in exponierten Lagen muss mit schweren Sturmböen bis 90 km/h (25m/s, 48kn, Bft 10) gerechnet werden.',
|
||||
@@ -34,12 +34,16 @@
|
||||
]),
|
||||
}),
|
||||
'entry_data': dict({
|
||||
'_a_to_d': list([
|
||||
'095760000000_0',
|
||||
'095760000000_1',
|
||||
]),
|
||||
'filters': dict({
|
||||
'area_filter': '.*',
|
||||
'headline_filter': '.*corona.*',
|
||||
}),
|
||||
'regions': dict({
|
||||
'083350000000': 'Aach, Stadt',
|
||||
'095760000000': 'Aach',
|
||||
}),
|
||||
'slots': 5,
|
||||
}),
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
from syrupy.assertion import SnapshotAssertion
|
||||
|
||||
@@ -39,15 +40,20 @@ async def test_sensors(
|
||||
entity_registry: er.EntityRegistry,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
snapshot: SnapshotAssertion,
|
||||
mock_nina_class: AsyncMock,
|
||||
nina_warnings: list[Warning],
|
||||
) -> None:
|
||||
"""Test the creation and values of the NINA sensors."""
|
||||
|
||||
await setup_platform(hass, mock_config_entry)
|
||||
await setup_platform(hass, mock_config_entry, mock_nina_class, nina_warnings)
|
||||
await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id)
|
||||
|
||||
|
||||
async def test_sensors_without_corona_filter(
|
||||
hass: HomeAssistant, entity_registry: er.EntityRegistry, snapshot: SnapshotAssertion
|
||||
hass: HomeAssistant,
|
||||
entity_registry: er.EntityRegistry,
|
||||
snapshot: SnapshotAssertion,
|
||||
mock_nina_class: AsyncMock,
|
||||
nina_warnings: list[Warning],
|
||||
) -> None:
|
||||
"""Test the creation and values of the NINA sensors without the corona filter."""
|
||||
|
||||
@@ -60,7 +66,7 @@ async def test_sensors_without_corona_filter(
|
||||
)
|
||||
conf_entry.add_to_hass(hass)
|
||||
|
||||
await setup_platform(hass, conf_entry)
|
||||
await setup_platform(hass, conf_entry, mock_nina_class, nina_warnings)
|
||||
|
||||
state_w1 = hass.states.get("binary_sensor.nina_warning_aach_stadt_1")
|
||||
|
||||
@@ -89,7 +95,11 @@ async def test_sensors_without_corona_filter(
|
||||
|
||||
|
||||
async def test_sensors_with_area_filter(
|
||||
hass: HomeAssistant, entity_registry: er.EntityRegistry, snapshot: SnapshotAssertion
|
||||
hass: HomeAssistant,
|
||||
entity_registry: er.EntityRegistry,
|
||||
snapshot: SnapshotAssertion,
|
||||
mock_nina_class: AsyncMock,
|
||||
nina_warnings: list[Warning],
|
||||
) -> None:
|
||||
"""Test the creation and values of the NINA sensors with a restrictive area filter."""
|
||||
|
||||
@@ -102,7 +112,7 @@ async def test_sensors_with_area_filter(
|
||||
)
|
||||
conf_entry.add_to_hass(hass)
|
||||
|
||||
await setup_platform(hass, conf_entry)
|
||||
await setup_platform(hass, conf_entry, mock_nina_class, nina_warnings)
|
||||
|
||||
state_w1 = hass.states.get("binary_sensor.nina_warning_aach_stadt_1")
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ from __future__ import annotations
|
||||
|
||||
from copy import deepcopy
|
||||
from typing import Any
|
||||
from unittest.mock import AsyncMock, patch
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
from pynina import ApiError
|
||||
|
||||
@@ -27,8 +27,8 @@ from homeassistant.core import HomeAssistant
|
||||
from homeassistant.data_entry_flow import FlowResultType
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
|
||||
from . import mocked_request_function, setup_platform
|
||||
from .const import DUMMY_CONFIG_ENTRY, DUMMY_USER_INPUT
|
||||
from . import setup_platform
|
||||
from .const import DUMMY_USER_INPUT
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
@@ -46,296 +46,267 @@ def assert_dummy_entry_created(result: dict[str, Any]) -> None:
|
||||
assert result["minor_version"] == 3
|
||||
|
||||
|
||||
async def test_step_user_connection_error(hass: HomeAssistant) -> None:
|
||||
async def test_step_user_connection_error(
|
||||
hass: HomeAssistant, mock_nina_class: AsyncMock
|
||||
) -> None:
|
||||
"""Test starting a flow by user but no connection."""
|
||||
with patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
side_effect=ApiError("Could not connect to Api"),
|
||||
):
|
||||
result: dict[str, Any] = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_USER}
|
||||
)
|
||||
mock_nina_class.get_all_regional_codes.side_effect = ApiError(
|
||||
"Could not connect to Api"
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.ABORT
|
||||
assert result["reason"] == "no_fetch"
|
||||
result: dict[str, Any] = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_USER}
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.ABORT
|
||||
assert result["reason"] == "no_fetch"
|
||||
|
||||
|
||||
async def test_step_user_unexpected_exception(hass: HomeAssistant) -> None:
|
||||
async def test_step_user_unexpected_exception(
|
||||
hass: HomeAssistant, mock_nina_class: AsyncMock
|
||||
) -> None:
|
||||
"""Test starting a flow by user but with an unexpected exception."""
|
||||
with patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
side_effect=Exception("DUMMY"),
|
||||
):
|
||||
result: dict[str, Any] = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_USER}
|
||||
)
|
||||
mock_nina_class.get_all_regional_codes.side_effect = Exception("DUMMY")
|
||||
|
||||
assert result["type"] is FlowResultType.ABORT
|
||||
assert result["reason"] == "unknown"
|
||||
result: dict[str, Any] = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_USER}
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.ABORT
|
||||
assert result["reason"] == "unknown"
|
||||
|
||||
|
||||
async def test_step_user(hass: HomeAssistant, mock_setup_entry: AsyncMock) -> None:
|
||||
async def test_step_user(
|
||||
hass: HomeAssistant, mock_setup_entry: AsyncMock, mock_nina_class: AsyncMock
|
||||
) -> None:
|
||||
"""Test starting a flow by user with valid values."""
|
||||
with patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
wraps=mocked_request_function,
|
||||
):
|
||||
result: dict[str, Any] = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_USER}
|
||||
)
|
||||
result: dict[str, Any] = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_USER}
|
||||
)
|
||||
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
user_input=deepcopy(DUMMY_USER_INPUT),
|
||||
)
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
user_input=deepcopy(DUMMY_USER_INPUT),
|
||||
)
|
||||
|
||||
assert_dummy_entry_created(result)
|
||||
assert_dummy_entry_created(result)
|
||||
|
||||
|
||||
async def test_step_user_no_selection(hass: HomeAssistant) -> None:
|
||||
async def test_step_user_no_selection(
|
||||
hass: HomeAssistant, mock_nina_class: AsyncMock
|
||||
) -> None:
|
||||
"""Test starting a flow by user with no selection."""
|
||||
with patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
wraps=mocked_request_function,
|
||||
):
|
||||
result: dict[str, Any] = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": SOURCE_USER},
|
||||
data={CONF_FILTERS: {CONF_HEADLINE_FILTER: ""}},
|
||||
)
|
||||
result: dict[str, Any] = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": SOURCE_USER},
|
||||
data={CONF_FILTERS: {CONF_HEADLINE_FILTER: ""}},
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.FORM
|
||||
assert result["step_id"] == "user"
|
||||
assert result["errors"] == {"base": "no_selection"}
|
||||
assert result["type"] is FlowResultType.FORM
|
||||
assert result["step_id"] == "user"
|
||||
assert result["errors"] == {"base": "no_selection"}
|
||||
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
user_input=deepcopy(DUMMY_USER_INPUT),
|
||||
)
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
user_input=deepcopy(DUMMY_USER_INPUT),
|
||||
)
|
||||
|
||||
assert_dummy_entry_created(result)
|
||||
assert_dummy_entry_created(result)
|
||||
|
||||
|
||||
async def test_step_user_already_configured(
|
||||
hass: HomeAssistant, mock_config_entry: MockConfigEntry
|
||||
hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_nina_class: AsyncMock
|
||||
) -> None:
|
||||
"""Test starting a flow by user, but it was already configured."""
|
||||
with patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
wraps=mocked_request_function,
|
||||
):
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_USER}
|
||||
)
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_USER}
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.ABORT
|
||||
assert result["reason"] == "single_instance_allowed"
|
||||
assert result["type"] is FlowResultType.ABORT
|
||||
assert result["reason"] == "single_instance_allowed"
|
||||
|
||||
|
||||
async def test_options_flow_init(
|
||||
hass: HomeAssistant, mock_setup_entry: AsyncMock, mock_config_entry: MockConfigEntry
|
||||
hass: HomeAssistant,
|
||||
mock_setup_entry: AsyncMock,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
mock_nina_class: AsyncMock,
|
||||
nina_warnings: list[Warning],
|
||||
) -> None:
|
||||
"""Test config flow options."""
|
||||
await setup_platform(hass, mock_config_entry, mock_nina_class, nina_warnings)
|
||||
|
||||
await setup_platform(hass, mock_config_entry)
|
||||
result = await hass.config_entries.options.async_init(mock_config_entry.entry_id)
|
||||
|
||||
with (
|
||||
patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
wraps=mocked_request_function,
|
||||
),
|
||||
):
|
||||
result = await hass.config_entries.options.async_init(
|
||||
mock_config_entry.entry_id
|
||||
)
|
||||
assert result["type"] is FlowResultType.FORM
|
||||
assert result["step_id"] == "init"
|
||||
|
||||
assert result["type"] is FlowResultType.FORM
|
||||
assert result["step_id"] == "init"
|
||||
|
||||
result = await hass.config_entries.options.async_configure(
|
||||
result["flow_id"],
|
||||
user_input={
|
||||
CONST_REGION_A_TO_D: ["072350000000_1"],
|
||||
CONST_REGION_E_TO_H: [],
|
||||
CONST_REGION_I_TO_L: [],
|
||||
CONST_REGION_M_TO_Q: [],
|
||||
CONST_REGION_R_TO_U: [],
|
||||
CONST_REGION_V_TO_Z: [],
|
||||
CONF_FILTERS: {
|
||||
CONF_HEADLINE_FILTER: ".*corona.*",
|
||||
CONF_AREA_FILTER: ".*",
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.CREATE_ENTRY
|
||||
assert result["data"] == {}
|
||||
|
||||
assert dict(mock_config_entry.data) == {
|
||||
CONF_FILTERS: DUMMY_USER_INPUT[CONF_FILTERS],
|
||||
CONF_MESSAGE_SLOTS: DUMMY_USER_INPUT[CONF_MESSAGE_SLOTS],
|
||||
result = await hass.config_entries.options.async_configure(
|
||||
result["flow_id"],
|
||||
user_input={
|
||||
CONST_REGION_A_TO_D: ["072350000000_1"],
|
||||
CONST_REGION_E_TO_H: [],
|
||||
CONST_REGION_I_TO_L: [],
|
||||
CONST_REGION_M_TO_Q: [],
|
||||
CONST_REGION_R_TO_U: [],
|
||||
CONST_REGION_V_TO_Z: [],
|
||||
CONF_REGIONS: {
|
||||
"072350000000": "Damflos (Trier-Saarburg - Rheinland-Pfalz)"
|
||||
CONF_FILTERS: {
|
||||
CONF_HEADLINE_FILTER: ".*corona.*",
|
||||
CONF_AREA_FILTER: ".*",
|
||||
},
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.CREATE_ENTRY
|
||||
assert result["data"] == {}
|
||||
|
||||
assert dict(mock_config_entry.data) == {
|
||||
CONF_FILTERS: DUMMY_USER_INPUT[CONF_FILTERS],
|
||||
CONF_MESSAGE_SLOTS: DUMMY_USER_INPUT[CONF_MESSAGE_SLOTS],
|
||||
CONST_REGION_A_TO_D: ["072350000000_1"],
|
||||
CONST_REGION_E_TO_H: [],
|
||||
CONST_REGION_I_TO_L: [],
|
||||
CONST_REGION_M_TO_Q: [],
|
||||
CONST_REGION_R_TO_U: [],
|
||||
CONST_REGION_V_TO_Z: [],
|
||||
CONF_REGIONS: {"072350000000": "Damflos (Trier-Saarburg - Rheinland-Pfalz)"},
|
||||
}
|
||||
|
||||
|
||||
async def test_options_flow_with_no_selection(
|
||||
hass: HomeAssistant, mock_setup_entry: AsyncMock, mock_config_entry: MockConfigEntry
|
||||
hass: HomeAssistant,
|
||||
mock_setup_entry: AsyncMock,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
mock_nina_class: AsyncMock,
|
||||
nina_warnings: list[Warning],
|
||||
) -> None:
|
||||
"""Test config flow options with no selection."""
|
||||
await setup_platform(hass, mock_config_entry, mock_nina_class, nina_warnings)
|
||||
|
||||
await setup_platform(hass, mock_config_entry)
|
||||
result = await hass.config_entries.options.async_init(mock_config_entry.entry_id)
|
||||
|
||||
with (
|
||||
patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
wraps=mocked_request_function,
|
||||
),
|
||||
):
|
||||
result = await hass.config_entries.options.async_init(
|
||||
mock_config_entry.entry_id
|
||||
)
|
||||
assert result["type"] is FlowResultType.FORM
|
||||
assert result["step_id"] == "init"
|
||||
|
||||
assert result["type"] is FlowResultType.FORM
|
||||
assert result["step_id"] == "init"
|
||||
result = await hass.config_entries.options.async_configure(
|
||||
result["flow_id"],
|
||||
user_input={
|
||||
CONST_REGION_A_TO_D: [],
|
||||
CONST_REGION_E_TO_H: [],
|
||||
CONST_REGION_I_TO_L: [],
|
||||
CONST_REGION_M_TO_Q: [],
|
||||
CONST_REGION_R_TO_U: [],
|
||||
CONST_REGION_V_TO_Z: [],
|
||||
CONF_FILTERS: {CONF_HEADLINE_FILTER: ""},
|
||||
},
|
||||
)
|
||||
|
||||
result = await hass.config_entries.options.async_configure(
|
||||
result["flow_id"],
|
||||
user_input={
|
||||
CONST_REGION_A_TO_D: [],
|
||||
CONST_REGION_E_TO_H: [],
|
||||
CONST_REGION_I_TO_L: [],
|
||||
CONST_REGION_M_TO_Q: [],
|
||||
CONST_REGION_R_TO_U: [],
|
||||
CONST_REGION_V_TO_Z: [],
|
||||
CONF_FILTERS: {CONF_HEADLINE_FILTER: ""},
|
||||
},
|
||||
)
|
||||
assert result["type"] is FlowResultType.FORM
|
||||
assert result["step_id"] == "init"
|
||||
assert result["errors"] == {"base": "no_selection"}
|
||||
|
||||
assert result["type"] is FlowResultType.FORM
|
||||
assert result["step_id"] == "init"
|
||||
assert result["errors"] == {"base": "no_selection"}
|
||||
|
||||
result = await hass.config_entries.options.async_configure(
|
||||
result["flow_id"],
|
||||
user_input={
|
||||
CONST_REGION_A_TO_D: ["095760000000_0"],
|
||||
CONST_REGION_E_TO_H: [],
|
||||
CONST_REGION_I_TO_L: [],
|
||||
CONST_REGION_M_TO_Q: [],
|
||||
CONST_REGION_R_TO_U: [],
|
||||
CONST_REGION_V_TO_Z: [],
|
||||
CONF_FILTERS: {
|
||||
CONF_HEADLINE_FILTER: ".*corona.*",
|
||||
CONF_AREA_FILTER: ".*",
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.CREATE_ENTRY
|
||||
assert result["data"] == {}
|
||||
|
||||
assert dict(mock_config_entry.data) == {
|
||||
CONF_FILTERS: DUMMY_USER_INPUT[CONF_FILTERS],
|
||||
CONF_MESSAGE_SLOTS: DUMMY_USER_INPUT[CONF_MESSAGE_SLOTS],
|
||||
result = await hass.config_entries.options.async_configure(
|
||||
result["flow_id"],
|
||||
user_input={
|
||||
CONST_REGION_A_TO_D: ["095760000000_0"],
|
||||
CONST_REGION_E_TO_H: [],
|
||||
CONST_REGION_I_TO_L: [],
|
||||
CONST_REGION_M_TO_Q: [],
|
||||
CONST_REGION_R_TO_U: [],
|
||||
CONST_REGION_V_TO_Z: [],
|
||||
CONF_REGIONS: {"095760000000": "Allersberg, M (Roth - Bayern)"},
|
||||
}
|
||||
CONF_FILTERS: {
|
||||
CONF_HEADLINE_FILTER: ".*corona.*",
|
||||
CONF_AREA_FILTER: ".*",
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.CREATE_ENTRY
|
||||
assert result["data"] == {}
|
||||
|
||||
assert dict(mock_config_entry.data) == {
|
||||
CONF_FILTERS: DUMMY_USER_INPUT[CONF_FILTERS],
|
||||
CONF_MESSAGE_SLOTS: DUMMY_USER_INPUT[CONF_MESSAGE_SLOTS],
|
||||
CONST_REGION_A_TO_D: ["095760000000_0"],
|
||||
CONST_REGION_E_TO_H: [],
|
||||
CONST_REGION_I_TO_L: [],
|
||||
CONST_REGION_M_TO_Q: [],
|
||||
CONST_REGION_R_TO_U: [],
|
||||
CONST_REGION_V_TO_Z: [],
|
||||
CONF_REGIONS: {"095760000000": "Allersberg, M (Roth - Bayern)"},
|
||||
}
|
||||
|
||||
|
||||
async def test_options_flow_connection_error(
|
||||
hass: HomeAssistant, mock_setup_entry: AsyncMock, mock_config_entry: MockConfigEntry
|
||||
hass: HomeAssistant,
|
||||
mock_setup_entry: AsyncMock,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
mock_nina_class: AsyncMock,
|
||||
nina_warnings: list[Warning],
|
||||
) -> None:
|
||||
"""Test config flow options but no connection."""
|
||||
mock_nina_class.get_all_regional_codes.side_effect = ApiError(
|
||||
"Could not connect to Api"
|
||||
)
|
||||
|
||||
await setup_platform(hass, mock_config_entry)
|
||||
await setup_platform(hass, mock_config_entry, mock_nina_class, nina_warnings)
|
||||
|
||||
with patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
side_effect=ApiError("Could not connect to Api"),
|
||||
):
|
||||
result = await hass.config_entries.options.async_init(
|
||||
mock_config_entry.entry_id
|
||||
)
|
||||
result = await hass.config_entries.options.async_init(mock_config_entry.entry_id)
|
||||
|
||||
assert result["type"] is FlowResultType.ABORT
|
||||
assert result["reason"] == "no_fetch"
|
||||
assert result["type"] is FlowResultType.ABORT
|
||||
assert result["reason"] == "no_fetch"
|
||||
|
||||
|
||||
async def test_options_flow_unexpected_exception(
|
||||
hass: HomeAssistant, mock_setup_entry: AsyncMock, mock_config_entry: MockConfigEntry
|
||||
hass: HomeAssistant,
|
||||
mock_setup_entry: AsyncMock,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
mock_nina_class: AsyncMock,
|
||||
nina_warnings: list[Warning],
|
||||
) -> None:
|
||||
"""Test config flow options but with an unexpected exception."""
|
||||
mock_nina_class.get_all_regional_codes.side_effect = Exception("DUMMY")
|
||||
|
||||
await setup_platform(hass, mock_config_entry)
|
||||
await setup_platform(hass, mock_config_entry, mock_nina_class, nina_warnings)
|
||||
|
||||
with (
|
||||
patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
side_effect=Exception("DUMMY"),
|
||||
),
|
||||
):
|
||||
result = await hass.config_entries.options.async_init(
|
||||
mock_config_entry.entry_id
|
||||
)
|
||||
result = await hass.config_entries.options.async_init(mock_config_entry.entry_id)
|
||||
|
||||
assert result["type"] is FlowResultType.ABORT
|
||||
assert result["reason"] == "unknown"
|
||||
assert result["type"] is FlowResultType.ABORT
|
||||
assert result["reason"] == "unknown"
|
||||
|
||||
|
||||
async def test_options_flow_entity_removal(
|
||||
hass: HomeAssistant, entity_registry: er.EntityRegistry
|
||||
hass: HomeAssistant,
|
||||
entity_registry: er.EntityRegistry,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
mock_nina_class: AsyncMock,
|
||||
nina_warnings: list[Warning],
|
||||
) -> None:
|
||||
"""Test if old entities are removed."""
|
||||
config_entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
title="NINA",
|
||||
data=deepcopy(DUMMY_CONFIG_ENTRY) | {CONF_REGIONS: {"095760000000": "Aach"}},
|
||||
version=1,
|
||||
minor_version=3,
|
||||
await setup_platform(hass, mock_config_entry, mock_nina_class, nina_warnings)
|
||||
|
||||
result = await hass.config_entries.options.async_init(mock_config_entry.entry_id)
|
||||
|
||||
new_slot_count = 2
|
||||
|
||||
result = await hass.config_entries.options.async_configure(
|
||||
result["flow_id"],
|
||||
user_input={
|
||||
CONF_MESSAGE_SLOTS: new_slot_count,
|
||||
CONST_REGION_A_TO_D: ["095760000000"],
|
||||
CONST_REGION_E_TO_H: [],
|
||||
CONST_REGION_I_TO_L: [],
|
||||
CONST_REGION_M_TO_Q: [],
|
||||
CONST_REGION_R_TO_U: [],
|
||||
CONST_REGION_V_TO_Z: [],
|
||||
CONF_FILTERS: {},
|
||||
},
|
||||
)
|
||||
config_entry.add_to_hass(hass)
|
||||
|
||||
await setup_platform(hass, config_entry)
|
||||
assert result["type"] is FlowResultType.CREATE_ENTRY
|
||||
|
||||
with (
|
||||
patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
wraps=mocked_request_function,
|
||||
),
|
||||
):
|
||||
result = await hass.config_entries.options.async_init(config_entry.entry_id)
|
||||
entries = er.async_entries_for_config_entry(
|
||||
entity_registry, mock_config_entry.entry_id
|
||||
)
|
||||
|
||||
result = await hass.config_entries.options.async_configure(
|
||||
result["flow_id"],
|
||||
user_input={
|
||||
CONF_MESSAGE_SLOTS: 2,
|
||||
CONST_REGION_A_TO_D: ["072350000000", "095760000000"],
|
||||
CONST_REGION_E_TO_H: [],
|
||||
CONST_REGION_I_TO_L: [],
|
||||
CONST_REGION_M_TO_Q: [],
|
||||
CONST_REGION_R_TO_U: [],
|
||||
CONST_REGION_V_TO_Z: [],
|
||||
CONF_FILTERS: {},
|
||||
},
|
||||
)
|
||||
|
||||
assert result["type"] is FlowResultType.CREATE_ENTRY
|
||||
|
||||
entries = er.async_entries_for_config_entry(
|
||||
entity_registry, config_entry.entry_id
|
||||
)
|
||||
|
||||
assert len(entries) == 2
|
||||
assert len(entries) == new_slot_count
|
||||
|
||||
@@ -1,48 +1,30 @@
|
||||
"""Test the Nina diagnostics."""
|
||||
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
from syrupy.assertion import SnapshotAssertion
|
||||
|
||||
from homeassistant.components.nina.const import DOMAIN
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from . import mocked_request_function
|
||||
from . import setup_platform
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
from tests.components.diagnostics import get_diagnostics_for_config_entry
|
||||
from tests.typing import ClientSessionGenerator
|
||||
|
||||
ENTRY_DATA: dict[str, Any] = {
|
||||
"slots": 5,
|
||||
"regions": {"083350000000": "Aach, Stadt"},
|
||||
"filters": {
|
||||
"headline_filter": ".*corona.*",
|
||||
"area_filter": ".*",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
async def test_diagnostics(
|
||||
hass: HomeAssistant,
|
||||
hass_client: ClientSessionGenerator,
|
||||
snapshot: SnapshotAssertion,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
mock_nina_class: AsyncMock,
|
||||
nina_warnings: list[Warning],
|
||||
) -> None:
|
||||
"""Test diagnostics."""
|
||||
|
||||
with patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
wraps=mocked_request_function,
|
||||
):
|
||||
config_entry: MockConfigEntry = MockConfigEntry(
|
||||
domain=DOMAIN, title="NINA", data=ENTRY_DATA, version=1, minor_version=3
|
||||
)
|
||||
|
||||
config_entry.add_to_hass(hass)
|
||||
await hass.config_entries.async_setup(config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
assert (
|
||||
await get_diagnostics_for_config_entry(hass, hass_client, config_entry)
|
||||
== snapshot
|
||||
)
|
||||
await setup_platform(hass, mock_config_entry, mock_nina_class, nina_warnings)
|
||||
assert (
|
||||
await get_diagnostics_for_config_entry(hass, hass_client, mock_config_entry)
|
||||
== snapshot
|
||||
)
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
"""Test the Nina init file."""
|
||||
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
from pynina import ApiError
|
||||
|
||||
from homeassistant.components.nina.const import DOMAIN
|
||||
from homeassistant.config_entries import ConfigEntryState
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.setup import async_setup_component
|
||||
|
||||
from . import mocked_request_function
|
||||
from . import setup_platform
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
@@ -24,24 +23,11 @@ ENTRY_DATA: dict[str, Any] = {
|
||||
}
|
||||
|
||||
|
||||
async def init_integration(hass: HomeAssistant) -> MockConfigEntry:
|
||||
"""Set up the NINA integration in Home Assistant."""
|
||||
|
||||
with patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
wraps=mocked_request_function,
|
||||
):
|
||||
entry: MockConfigEntry = MockConfigEntry(
|
||||
domain=DOMAIN, title="NINA", data=ENTRY_DATA, version=1, minor_version=3
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
|
||||
assert await async_setup_component(hass, DOMAIN, {})
|
||||
await hass.async_block_till_done()
|
||||
return entry
|
||||
|
||||
|
||||
async def test_config_migration_from1_1(hass: HomeAssistant) -> None:
|
||||
async def test_config_migration_from1_1(
|
||||
hass: HomeAssistant,
|
||||
mock_nina_class: AsyncMock,
|
||||
nina_warnings: list[Warning],
|
||||
) -> None:
|
||||
"""Test the migration to a new configuration layout."""
|
||||
old_entry_data: dict[str, Any] = {
|
||||
"slots": 5,
|
||||
@@ -53,22 +39,21 @@ async def test_config_migration_from1_1(hass: HomeAssistant) -> None:
|
||||
domain=DOMAIN, title="NINA", data=old_entry_data, version=1
|
||||
)
|
||||
|
||||
with patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
wraps=mocked_request_function,
|
||||
):
|
||||
old_conf_entry.add_to_hass(hass)
|
||||
old_conf_entry.add_to_hass(hass)
|
||||
|
||||
await hass.config_entries.async_setup(old_conf_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
await setup_platform(hass, old_conf_entry, mock_nina_class, nina_warnings)
|
||||
|
||||
assert dict(old_conf_entry.data) == ENTRY_DATA
|
||||
assert old_conf_entry.state is ConfigEntryState.LOADED
|
||||
assert old_conf_entry.version == 1
|
||||
assert old_conf_entry.minor_version == 3
|
||||
assert dict(old_conf_entry.data) == ENTRY_DATA
|
||||
assert old_conf_entry.state is ConfigEntryState.LOADED
|
||||
assert old_conf_entry.version == 1
|
||||
assert old_conf_entry.minor_version == 3
|
||||
|
||||
|
||||
async def test_config_migration_from1_2(hass: HomeAssistant) -> None:
|
||||
async def test_config_migration_from1_2(
|
||||
hass: HomeAssistant,
|
||||
mock_nina_class: AsyncMock,
|
||||
nina_warnings: list[Warning],
|
||||
) -> None:
|
||||
"""Test the migration to a new configuration layout with sections."""
|
||||
old_entry_data: dict[str, Any] = {
|
||||
"slots": 5,
|
||||
@@ -81,61 +66,46 @@ async def test_config_migration_from1_2(hass: HomeAssistant) -> None:
|
||||
domain=DOMAIN, title="NINA", data=old_entry_data, version=1, minor_version=2
|
||||
)
|
||||
|
||||
with patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
wraps=mocked_request_function,
|
||||
):
|
||||
old_conf_entry.add_to_hass(hass)
|
||||
old_conf_entry.add_to_hass(hass)
|
||||
|
||||
await hass.config_entries.async_setup(old_conf_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
await setup_platform(hass, old_conf_entry, mock_nina_class, nina_warnings)
|
||||
|
||||
assert dict(old_conf_entry.data) == ENTRY_DATA
|
||||
assert old_conf_entry.state is ConfigEntryState.LOADED
|
||||
assert old_conf_entry.version == 1
|
||||
assert old_conf_entry.minor_version == 3
|
||||
assert dict(old_conf_entry.data) == ENTRY_DATA
|
||||
assert old_conf_entry.state is ConfigEntryState.LOADED
|
||||
assert old_conf_entry.version == 1
|
||||
assert old_conf_entry.minor_version == 3
|
||||
|
||||
|
||||
async def test_config_migration_downgrade(hass: HomeAssistant) -> None:
|
||||
async def test_config_migration_downgrade(
|
||||
hass: HomeAssistant,
|
||||
mock_nina_class: AsyncMock,
|
||||
nina_warnings: list[Warning],
|
||||
) -> None:
|
||||
"""Test the migration to an old version."""
|
||||
|
||||
conf_entry: MockConfigEntry = MockConfigEntry(
|
||||
domain=DOMAIN, title="NINA", data=ENTRY_DATA, version=2
|
||||
)
|
||||
|
||||
with patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
wraps=mocked_request_function,
|
||||
):
|
||||
conf_entry.add_to_hass(hass)
|
||||
conf_entry.add_to_hass(hass)
|
||||
|
||||
await hass.config_entries.async_setup(conf_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
await hass.config_entries.async_setup(conf_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert dict(conf_entry.data) == ENTRY_DATA
|
||||
assert conf_entry.state is ConfigEntryState.MIGRATION_ERROR
|
||||
assert dict(conf_entry.data) == ENTRY_DATA
|
||||
assert conf_entry.state is ConfigEntryState.MIGRATION_ERROR
|
||||
|
||||
|
||||
async def test_config_entry_not_ready(hass: HomeAssistant) -> None:
|
||||
"""Test the configuration entry."""
|
||||
entry: MockConfigEntry = await init_integration(hass)
|
||||
|
||||
assert entry.state is ConfigEntryState.LOADED
|
||||
|
||||
|
||||
async def test_sensors_connection_error(hass: HomeAssistant) -> None:
|
||||
async def test_sensors_connection_error(
|
||||
hass: HomeAssistant,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
mock_nina_class: AsyncMock,
|
||||
nina_warnings: list[Warning],
|
||||
) -> None:
|
||||
"""Test the creation and values of the NINA sensors with no connected."""
|
||||
with patch(
|
||||
"pynina.api_client.APIClient.make_request",
|
||||
side_effect=ApiError("Could not connect to Api"),
|
||||
):
|
||||
conf_entry: MockConfigEntry = MockConfigEntry(
|
||||
domain=DOMAIN, title="NINA", data=ENTRY_DATA, version=1, minor_version=3
|
||||
)
|
||||
mock_nina_class.update.side_effect = ApiError("Could not connect to Api")
|
||||
|
||||
conf_entry.add_to_hass(hass)
|
||||
await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
await hass.config_entries.async_setup(conf_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert conf_entry.state is ConfigEntryState.SETUP_RETRY
|
||||
assert mock_config_entry.state is ConfigEntryState.SETUP_RETRY
|
||||
|
||||
Reference in New Issue
Block a user