Skip to content

Commit 8fe67ea

Browse files
committed
More test coverage
1 parent 61e18ee commit 8fe67ea

File tree

4 files changed

+93
-1
lines changed

4 files changed

+93
-1
lines changed

tests/test_blinkpy.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,59 @@ def test_setup_networks_failure(self, mock_networks):
132132
mock_networks.return_value = {}
133133
with self.assertRaises(BlinkSetupError):
134134
self.blink.setup_networks()
135+
136+
@mock.patch("blinkpy.blinkpy.Auth.send_auth_key")
137+
def test_setup_prompt_2fa(self, mock_key):
138+
"""Test setup with 2fa prompt."""
139+
self.blink.auth.data["username"] = "foobar"
140+
self.blink.key_required = True
141+
mock_key.return_value = True
142+
with mock.patch("builtins.input", return_value="foo"):
143+
self.blink.setup_prompt_2fa()
144+
self.assertFalse(self.blink.key_required)
145+
mock_key.return_value = False
146+
with mock.patch("builtins.input", return_value="foo"):
147+
self.blink.setup_prompt_2fa()
148+
self.assertTrue(self.blink.key_required)
149+
150+
@mock.patch("blinkpy.blinkpy.Blink.setup_camera_list")
151+
@mock.patch("blinkpy.api.request_networks")
152+
def test_setup_post_verify(self, mock_networks, mock_camera):
153+
"""Test setup after verification."""
154+
self.blink.available = False
155+
self.blink.key_required = True
156+
mock_networks.return_value = {
157+
"summary": {"foo": {"onboarded": False, "name": "bar"}}
158+
}
159+
mock_camera.return_value = []
160+
self.assertTrue(self.blink.setup_post_verify())
161+
self.assertTrue(self.blink.available)
162+
self.assertFalse(self.blink.key_required)
163+
164+
@mock.patch("blinkpy.api.request_networks")
165+
def test_setup_post_verify_failure(self, mock_networks):
166+
"""Test failed setup after verification."""
167+
self.blink.available = False
168+
mock_networks.return_value = {}
169+
self.assertFalse(self.blink.setup_post_verify())
170+
self.assertFalse(self.blink.available)
171+
172+
def test_merge_cameras(self):
173+
"""Test merging of cameras."""
174+
self.blink.sync = {
175+
"foo": MockSync({"test": 123, "foo": "bar"}),
176+
"bar": MockSync({"fizz": "buzz", "bar": "foo"}),
177+
}
178+
combined = self.blink.merge_cameras()
179+
self.assertEqual(combined["test"], 123)
180+
self.assertEqual(combined["foo"], "bar")
181+
self.assertEqual(combined["fizz"], "buzz")
182+
self.assertEqual(combined["bar"], "foo")
183+
184+
185+
class MockSync:
186+
"""Mock sync module class."""
187+
188+
def __init__(self, cameras):
189+
"""Initialize fake class."""
190+
self.cameras = cameras

tests/test_cameras.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,3 +143,12 @@ def test_no_video_clips(self, mock_resp):
143143
self.camera.update(config, force_cache=True)
144144
self.assertEqual(self.camera.clip, None)
145145
self.assertEqual(self.camera.video_from_cache, None)
146+
147+
@mock.patch("blinkpy.camera.api.request_motion_detection_enable")
148+
@mock.patch("blinkpy.camera.api.request_motion_detection_disable")
149+
def test_motion_detection_enable_disable(self, mock_dis, mock_en, mock_rep):
150+
"""Test setting motion detection enable properly."""
151+
mock_dis.return_value = "disable"
152+
mock_en.return_value = "enable"
153+
self.assertEqual(self.camera.set_motion_detect(True), "enable")
154+
self.assertEqual(self.camera.set_motion_detect(False), "disable")

tests/test_sync_module.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,27 @@ def test_get_events(self, mock_resp):
6565
mock_resp.return_value = {"event": True}
6666
self.assertEqual(self.blink.sync["test"].get_events(), True)
6767

68+
def test_get_events_fail(self, mock_resp):
69+
"""Test handling of failed get events function."""
70+
mock_resp.return_value = None
71+
self.assertFalse(self.blink.sync["test"].get_events())
72+
mock_resp.return_value = {}
73+
self.assertFalse(self.blink.sync["test"].get_events())
74+
6875
def test_get_camera_info(self, mock_resp):
6976
"""Test get camera info function."""
7077
mock_resp.return_value = {"camera": ["foobar"]}
7178
self.assertEqual(self.blink.sync["test"].get_camera_info("1234"), "foobar")
7279

80+
def test_get_camera_info_fail(self, mock_resp):
81+
"""Test hadnling of failed get camera info function."""
82+
mock_resp.return_value = None
83+
self.assertEqual(self.blink.sync["test"].get_camera_info("1"), [])
84+
mock_resp.return_value = {}
85+
self.assertEqual(self.blink.sync["test"].get_camera_info("1"), [])
86+
mock_resp.return_value = {"camera": None}
87+
self.assertEqual(self.blink.sync["test"].get_camera_info("1"), [])
88+
7389
def test_check_new_videos_startup(self, mock_resp):
7490
"""Test that check_new_videos does not block startup."""
7591
sync_module = self.blink.sync["test"]
@@ -236,3 +252,8 @@ def test_missing_camera_info(self, mock_resp):
236252
self.mock_start[5] = {}
237253
self.blink.sync["test"].start()
238254
self.assertEqual(self.blink.sync["test"].cameras, {"foo": None})
255+
256+
def test_sync_attributes(self, mock_resp):
257+
"""Test sync attributes."""
258+
self.assertEqual(self.blink.sync["test"].attributes["name"], "test")
259+
self.assertEqual(self.blink.sync["test"].attributes["network_id"], "1234")

tests/test_util.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import unittest
44
from unittest import mock
55
import time
6-
from blinkpy.helpers.util import Throttle, time_to_seconds
6+
from blinkpy.helpers.util import json_load, Throttle, time_to_seconds
77

88

99
class TestUtil(unittest.TestCase):
@@ -107,3 +107,9 @@ def test_time_to_seconds(self):
107107
wrong_time = "1/1/1970 00:00:03"
108108
self.assertEqual(time_to_seconds(correct_time), 5)
109109
self.assertFalse(time_to_seconds(wrong_time))
110+
111+
def test_json_load_bad_data(self):
112+
"""Check that bad file is handled."""
113+
self.assertEqual(json_load("fake.file"), None)
114+
with mock.patch("builtins.open", mock.mock_open(read_data="")):
115+
self.assertEqual(json_load("fake.file"), None)

0 commit comments

Comments
 (0)