about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/home-assistant/tests.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/home-assistant/tests.nix')
-rw-r--r--nixpkgs/pkgs/servers/home-assistant/tests.nix128
1 files changed, 128 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/home-assistant/tests.nix b/nixpkgs/pkgs/servers/home-assistant/tests.nix
new file mode 100644
index 000000000000..989bfccb7236
--- /dev/null
+++ b/nixpkgs/pkgs/servers/home-assistant/tests.nix
@@ -0,0 +1,128 @@
+{ lib
+, home-assistant
+}:
+
+let
+  # some components' tests have additional dependencies
+  extraCheckInputs = with home-assistant.python.pkgs; {
+    airzone_cloud = [
+      aioairzone
+    ];
+    bluetooth = [
+      pyswitchbot
+    ];
+    govee_ble = [
+      ibeacon-ble
+    ];
+    lovelace = [
+      pychromecast
+    ];
+    matrix = [
+      pydantic
+    ];
+    mopeka = [
+      pyswitchbot
+    ];
+    onboarding = [
+      pymetno
+      radios
+      rpi-bad-power
+    ];
+    raspberry_pi = [
+      rpi-bad-power
+    ];
+    shelly = [
+      pyswitchbot
+    ];
+    tilt_ble = [
+      ibeacon-ble
+    ];
+    xiaomi_miio = [
+      arrow
+    ];
+    zha = [
+      pydeconz
+    ];
+  };
+
+  extraDisabledTestPaths = {
+  };
+
+  extraDisabledTests = {
+    private_ble_device = [
+      # AssertionError: assert '90' == '90.0'
+      "test_estimated_broadcast_interval"
+    ];
+    shell_command = [
+      # tries to retrieve file from github
+      "test_non_text_stdout_capture"
+    ];
+    sma = [
+      # missing operating_status attribute in entity
+      "test_sensor_entities"
+    ];
+  };
+
+  extraPytestFlagsArray = {
+    cloud = [
+      # Tries to connect to alexa-api.nabucasa.com:443
+      "--deselect tests/components/cloud/test_http_api.py::test_websocket_update_preferences_alexa_report_state"
+    ];
+    dnsip = [
+      # Tries to resolve DNS entries
+      "--deselect tests/components/dnsip/test_config_flow.py::test_options_flow"
+    ];
+    jellyfin = [
+      # AssertionError: assert 'audio/x-flac' == 'audio/flac'
+      "--deselect tests/components/jellyfin/test_media_source.py::test_resolve"
+      # AssertionError: assert [+ received] == [- snapshot]
+      "--deselect tests/components/jellyfin/test_media_source.py::test_music_library"
+    ];
+    modem_callerid = [
+      # aioserial mock produces wrong state
+      "--deselect tests/components/modem_callerid/test_init.py::test_setup_entry"
+    ];
+    velux = [
+      # uses unmocked sockets
+      "--deselect tests/components/velux/test_config_flow.py::test_user_success"
+      "--deselect tests/components/velux/test_config_flow.py::test_import_valid_config"
+    ];
+  };
+in lib.listToAttrs (map (component: lib.nameValuePair component (
+  home-assistant.overridePythonAttrs (old: {
+    pname = "homeassistant-test-${component}";
+    format = "other";
+
+    dontBuild = true;
+    dontInstall = true;
+
+    nativeCheckInputs = old.nativeCheckInputs
+      ++ home-assistant.getPackages component home-assistant.python.pkgs
+      ++ extraCheckInputs.${component} or [ ];
+
+    disabledTests = old.disabledTests or [] ++ extraDisabledTests.${component} or [];
+    disabledTestPaths = old.disabledTestPaths or [] ++ extraDisabledTestPaths.${component} or [ ];
+
+    # components are more often racy than the core
+    dontUsePytestXdist = true;
+
+    pytestFlagsArray = lib.remove "tests" old.pytestFlagsArray
+      ++ extraPytestFlagsArray.${component} or [ ]
+      ++ [ "tests/components/${component}" ];
+
+    preCheck = old.preCheck + lib.optionalString (builtins.elem component [ "emulated_hue" "songpal" "system_log" ]) ''
+      patch -p1 < ${./patches/tests-mock-source-ip.patch}
+    '';
+
+    meta = old.meta // {
+      broken = lib.elem component [
+        # pinned version incompatible with urllib3>=2.0
+        "telegram_bot"
+        # depends on telegram_bot
+        "telegram"
+      ];
+      # upstream only tests on Linux, so do we.
+      platforms = lib.platforms.linux;
+    };
+  })
+)) home-assistant.supportedComponentsWithTests)