Forráskód Böngészése

Improve test coverage for generic components.

Still not 100%, as the components cover some cases that our current config files don't use.  Probably some test configs are needed to fully exercise the generic classes ahead of any real device using them.

Remove devcontainer config.  Based on upstream changes, it seems it is out of date, and I do not use it myself so it is just a maintenance burden keeping it.
Jason Rumney 4 éve
szülő
commit
9c1c73e5d8
4 módosított fájl, 21 hozzáadás és 27 törlés
  1. 0 26
      .devcontainer/devcontainer.json
  2. 7 0
      tests/test_light.py
  3. 7 0
      tests/test_lock.py
  4. 7 1
      tests/test_switch.py

+ 0 - 26
.devcontainer/devcontainer.json

@@ -1,26 +0,0 @@
-{
-  "name": "Goldair Climate dev",
-  "image": "ludeeus/container:integration",
-  "context": "..",
-  "appPort": 8123,
-  "postCreateCommand": "dc install",
-  "runArgs": ["-e", "GIT_EDITOR=code --wait"],
-  "extensions": [
-    "ms-python.python",
-    "visualstudioexptteam.vscodeintellicode",
-    "redhat.vscode-yaml",
-    "esbenp.prettier-vscode",
-    "ryanluker.vscode-coverage-gutters"
-  ],
-  "settings": {
-    "files.exclude": {
-      "config/custom_components/goldair_climate": true
-    },
-    "python.pythonPath": "/usr/bin/python",
-    "terminal.integrated.shell.linux": "/bin/bash"
-  },
-  "mounts": [
-    "source=${env:HOME}${env:USERPROFILE}/.ssh,target=/tmp/.ssh,type=bind,consistency=cached",
-    "source=${localWorkspaceFolder}/config,target=/config,type=bind,consistency=cached"
-  ]
-}

+ 7 - 0
tests/test_light.py

@@ -54,6 +54,7 @@ class TestTuyaLocalLight(IsolatedAsyncioTestCase):
                 break
         self.subject = TuyaLocalLight(self.mock_device(), light)
         self.dps = GPPH_HEATER_PAYLOAD.copy()
+        self.light_name = light.name
         self.subject._device.get_property.side_effect = lambda id: self.dps[id]
 
     def test_should_poll(self):
@@ -62,6 +63,9 @@ class TestTuyaLocalLight(IsolatedAsyncioTestCase):
     def test_name_returns_device_name(self):
         self.assertEqual(self.subject.name, self.subject._device.name)
 
+    def test_friendly_name_returns_config_name(self):
+        self.assertEqual(self.subject.friendly_name, self.light_name)
+
     def test_unique_id_returns_device_unique_id(self):
         self.assertEqual(self.subject.unique_id, self.subject._device.unique_id)
 
@@ -82,6 +86,9 @@ class TestTuyaLocalLight(IsolatedAsyncioTestCase):
         self.dps[GPPH_LIGHTSWITCH_DPS] = False
         self.assertEqual(self.subject.is_on, False)
 
+    def test_state_attributes(self):
+        self.assertEqual(self.subject.device_state_attributes, {})
+
     async def test_turn_on(self):
         async with assert_device_properties_set(
             self.subject._device, {GPPH_LIGHTSWITCH_DPS: True}

+ 7 - 0
tests/test_lock.py

@@ -58,6 +58,7 @@ class TestTuyaLocalLock(IsolatedAsyncioTestCase):
                 break
         self.subject = TuyaLocalLock(self.mock_device(), lock)
         self.dps = GPPH_HEATER_PAYLOAD.copy()
+        self.lock_name = lock.name
         self.subject._device.get_property.side_effect = lambda id: self.dps[id]
 
     def test_should_poll(self):
@@ -66,6 +67,9 @@ class TestTuyaLocalLock(IsolatedAsyncioTestCase):
     def test_name_returns_device_name(self):
         self.assertEqual(self.subject.name, self.subject._device.name)
 
+    def test_friendly_name_returns_config_name(self):
+        self.assertEqual(self.subject.friendly_name, self.lock_name)
+
     def test_unique_id_returns_device_unique_id(self):
         self.assertEqual(self.subject.unique_id, self.subject._device.unique_id)
 
@@ -82,6 +86,9 @@ class TestTuyaLocalLock(IsolatedAsyncioTestCase):
         self.dps[GPPH_LOCK_DPS] = None
         self.assertEqual(self.subject.state, STATE_UNAVAILABLE)
 
+    def test_state_attributes(self):
+        self.assertEqual(self.subject.device_state_attributes, {})
+
     def test_is_locked(self):
         self.dps[GPPH_LOCK_DPS] = True
         self.assertTrue(self.subject.is_locked)

+ 7 - 1
tests/test_switch.py

@@ -57,7 +57,7 @@ class TestTuyaLocalSwitch(IsolatedAsyncioTestCase):
         self.mock_device = device_patcher.start()
         kogan_switch_config = config_for_legacy_use(CONF_TYPE_KOGAN_SWITCH)
         switch = kogan_switch_config.primary_entity
-
+        self.switch_name = switch.name
         self.subject = TuyaLocalSwitch(self.mock_device(), switch)
         self.dps = KOGAN_SOCKET_PAYLOAD.copy()
 
@@ -69,9 +69,15 @@ class TestTuyaLocalSwitch(IsolatedAsyncioTestCase):
     def test_name_returns_device_name(self):
         self.assertEqual(self.subject.name, self.subject._device.name)
 
+    def test_friendly_name_returns_config_name(self):
+        self.assertEqual(self.subject.friendly_name, self.switch_name)
+
     def test_unique_id_returns_device_unique_id(self):
         self.assertEqual(self.subject.unique_id, self.subject._device.unique_id)
 
+    def test_device_info_returns_device_info_from_device(self):
+        self.assertEqual(self.subject.device_info, self.subject._device.device_info)
+
     def test_device_class_is_outlet(self):
         self.assertEqual(self.subject.device_class, DEVICE_CLASS_OUTLET)