Просмотр исходного кода

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 лет назад
Родитель
Сommit
9c1c73e5d8
4 измененных файлов с 21 добавлено и 27 удалено
  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)