def setUp(self): """Set up Blink module.""" self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD) # pylint: disable=protected-access self.blink._auth_header = { 'Host': 'test.url.tld', 'TOKEN_AUTH': 'foobar123' } self.blink.urls = blinkpy.BlinkURLHandler('test') self.config = { 'device_id': 1111, 'name': 'foobar', 'armed': False, 'active': 'disabled', 'thumbnail': '/test', 'video': '/test.mp4', 'temp': 80, 'battery': 3, 'notifications': 2, 'region_id': 'test', 'device_type': 'camera' } self.blink.sync = MockSyncModule(self.blink, self.blink._auth_header) self.blink.session = create_session() self.camera = BlinkCamera(self.config, self.blink.sync)
def setUp(self): """Set up Blink module.""" self.blink = Blink() self.blink.urls = BlinkURLHandler("test") self.blink.sync["test"] = BlinkSyncModule(self.blink, "test", 1234, []) self.camera = BlinkCamera(self.blink.sync["test"]) self.camera.name = "foobar" self.blink.sync["test"].cameras["foobar"] = self.camera
def setUp(self): """Set up Blink module.""" self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD) header = { 'Host': 'abc.zxc', 'TOKEN_AUTH': mresp.LOGIN_RESPONSE['authtoken']['authtoken'] } # pylint: disable=protected-access self.blink._auth_header = header self.blink.session = create_session() self.blink.urls = BlinkURLHandler('test') self.blink.sync['test'] = BlinkSyncModule(self.blink, 'test', 1234, []) self.camera = BlinkCamera(self.blink.sync['test']) self.camera.name = 'foobar' self.blink.sync['test'].cameras['foobar'] = self.camera
def setUp(self): """Set up Blink module.""" self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD) header = { "Host": "abc.zxc", "TOKEN_AUTH": mresp.LOGIN_RESPONSE["authtoken"]["authtoken"], } # pylint: disable=protected-access self.blink._auth_header = header self.blink.session = create_session() self.blink.urls = BlinkURLHandler("test") self.blink.sync["test"] = BlinkSyncModule(self.blink, "test", 1234, []) self.camera = BlinkCamera(self.blink.sync["test"]) self.camera.name = "foobar" self.blink.sync["test"].cameras["foobar"] = self.camera
def test_camera_attributes(self, mock_cfg, mock_sess): """Tests camera attributes.""" self.blink.urls = BlinkURLHandler('test') self.sync.cameras = { 'foobar': BlinkCamera(self.camera_config, self.sync) } for name in self.sync.cameras: camera = self.sync.cameras[name] camera.update(self.camera_config, skip_cache=True) camera_attr = camera.attributes self.assertEqual(camera_attr['device_id'], '1111') self.assertEqual(camera_attr['name'], 'foobar') self.assertEqual(camera_attr['armed'], False) self.assertEqual( camera_attr['thumbnail'], "https://rest.test.{}/test/image.jpg".format(BLINK_URL)) self.assertEqual( camera_attr['video'], "https://rest.test.{}/test/clip/clip.mp4".format(BLINK_URL)) self.assertEqual(camera_attr['temperature'], 68) self.assertEqual(camera_attr['temperature_c'], 20.0) self.assertEqual(camera_attr['battery'], 50) self.assertEqual(camera_attr['notifications'], 2) self.assertEqual(camera_attr['network_id'], '0000') self.assertEqual(camera_attr['motion_enabled'], True) self.assertEqual(camera_attr['wifi_strength'], -30)
def start(self): """Initialize the system.""" response = api.request_syncmodule(self.blink, self.network_id) self.summary = response['syncmodule'] self.sync_id = self.summary['id'] self.network_id = self.summary['network_id'] self.serial = self.summary['serial'] self.status = self.summary['status'] self.events = self.get_events() self.homescreen = api.request_homescreen(self.blink) self.network_info = api.request_network_status(self.blink, self.network_id) camera_info = self.get_camera_info() for camera_config in camera_info: name = camera_config['name'] self.cameras[name] = BlinkCamera(self) self.videos = self.get_videos() for camera_config in camera_info: name = camera_config['name'] if name in self.cameras: self.cameras[name].update(camera_config, force_cache=True)
def setUp(self): """Set up Blink module.""" self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD) # pylint: disable=protected-access self.blink._auth_header = { 'Host': 'test.url.tld', 'TOKEN_AUTH': 'foobar123' } self.blink.urls = blinkpy.BlinkURLHandler('test') self.blink.sync['test'] = BlinkSyncModule(self.blink, 'test', '1234', []) self.camera = BlinkCamera(self.blink.sync) self.mock_start = [ { 'syncmodule': { 'id': 1234, 'network_id': 5678, 'serial': '12345678', 'status': 'foobar' } }, { 'event': True }, {}, {}, None, { 'devicestatus': {} }, ]
def setUp(self): """Set up Blink module.""" self.blink = Blink(motion_interval=0) self.blink.last_refresh = 0 self.blink.urls = BlinkURLHandler("test") self.blink.sync["test"] = BlinkSyncModule(self.blink, "test", "1234", []) self.camera = BlinkCamera(self.blink.sync) self.mock_start = [ { "syncmodule": { "id": 1234, "network_id": 5678, "serial": "12345678", "status": "foobar", } }, { "event": True }, {}, {}, None, { "devicestatus": {} }, ] self.blink.sync["test"].network_info = {"network": {"armed": True}}
def setUp(self): """Set up Blink module.""" self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD, motion_interval=0) # pylint: disable=protected-access self.blink._auth_header = { "Host": "test.url.tld", "TOKEN_AUTH": "foobar123" } self.blink.last_refresh = 0 self.blink.urls = blinkpy.BlinkURLHandler("test") self.blink.sync["test"] = BlinkSyncModule(self.blink, "test", "1234", []) self.camera = BlinkCamera(self.blink.sync) self.mock_start = [ { "syncmodule": { "id": 1234, "network_id": 5678, "serial": "12345678", "status": "foobar", } }, { "event": True }, {}, {}, None, { "devicestatus": {} }, ] self.blink.sync["test"].network_info = {"network": {"armed": True}}
def test_camera_properties(self, mock_cfg, mock_sess): """Tests all property set/recall.""" self.blink.urls = BlinkURLHandler('test') self.sync.cameras = { 'foobar': BlinkCamera(self.camera_config, self.sync) } for name in self.sync.cameras: camera = self.sync.cameras[name] camera.update(self.camera_config, skip_cache=True) self.assertEqual(camera.id, '1111') self.assertEqual(camera.name, 'foobar') self.assertEqual(camera.armed, False) self.assertEqual( camera.thumbnail, "https://rest.test.{}/test/image.jpg".format(BLINK_URL)) self.assertEqual( camera.clip, "https://rest.test.{}/test/clip/clip.mp4".format(BLINK_URL)) self.assertEqual(camera.temperature, 68) self.assertEqual(camera.temperature_c, 20.0) self.assertEqual(camera.battery, 50) self.assertEqual(camera.battery_string, "OK") self.assertEqual(camera.notifications, 2) self.assertEqual(camera.region_id, 'test') self.assertEqual(camera.motion_enabled, True) self.assertEqual(camera.wifi_strength, -30) camera_config = self.camera_config camera_config['active'] = 'armed' camera_config['thumbnail'] = '/test2/image' camera_config['video'] = '/test2/clip.mp4' camera_config['temp'] = 60 camera_config['battery'] = 0 camera_config['notifications'] = 4 for name in self.sync.cameras: camera = self.sync.cameras[name] camera.update(camera_config, skip_cache=True) self.assertEqual(camera.armed, True) self.assertEqual( camera.thumbnail, "https://rest.test.{}/test2/image.jpg".format(BLINK_URL)) self.assertEqual( camera.clip, "https://rest.test.{}/test2/clip.mp4".format(BLINK_URL)) self.assertEqual(camera.temperature, 68) self.assertEqual(camera.battery, 50) self.assertEqual(camera.battery_string, "Low") self.assertEqual(camera.notifications, 4) camera_config['battery'] = -10 camera.update(camera_config, skip_cache=True) self.assertEqual(camera.battery_string, "Unknown")
def setUp(self): """Set up Blink module.""" self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD) # pylint: disable=protected-access self.blink._auth_header = { 'Host': 'test.url.tld', 'TOKEN_AUTH': 'foobar123' } self.blink.urls = blinkpy.BlinkURLHandler('test') self.blink.sync['test'] = BlinkSyncModule(self.blink, 'test', '1234') self.camera = BlinkCamera(self.blink.sync)
def test_camera_cache(self, img_refresh, mock_sess): """Tests camera cache.""" update_vals = { 'name': 'foobar', 'active': 'disabled', 'video': '/clip.mp4', 'thumbnail': '/image', 'battery': 3, 'notifications': 1, } self.sync.cameras = { 'foobar': BlinkCamera(self.camera_config, self.sync) } test_image = 'https://rest.test.immedia-semi.com/image.jpg' test_clip = 'https://rest.test.immedia-semi.com/clip.mp4' for name, camera in self.sync.cameras.items(): # Check that no cache returns None self.assertEqual(camera.name, name) self.assertEqual(camera.image_from_cache, None) self.assertEqual(camera.video_from_cache, None) # Now, call an update with a new thumbnail to see if we update self.sync.records = [] # pylint: disable=protected-access camera.update(update_vals) self.assertEqual(camera.thumbnail, test_image) self.assertEqual(camera.image_from_cache.status_code, 200) # Now update the clip self.sync.record_dates = {camera.name: ['7', '1', '4', '3']} self.assertEqual(camera.last_record, list()) camera.update(update_vals) self.assertEqual(camera.clip, test_clip) self.assertEqual(camera.last_record, list('7')) # First update should be false self.assertEqual(camera.motion_detected, False) self.sync.record_dates[camera.name].append('88') camera.update(update_vals) self.assertEqual(camera.last_record, ['88', '7']) self.assertEqual(camera.motion_detected, True) self.assertEqual(camera.video_from_cache.status_code, 200) # Next update shouldn't change records, and motion_dected=False camera.update(update_vals) self.assertEqual(camera.motion_detected, False) self.assertEqual(camera.video_from_cache.status_code, 200)
def start(self): """Initialize the system.""" response = api.request_syncmodule(self.blink, self.network_id, force=True) try: self.summary = response['syncmodule'] self.network_id = self.summary['network_id'] except (TypeError, KeyError): _LOGGER.error(("Could not retrieve sync module information " "with response: %s"), response, exc_info=True) return False try: self.sync_id = self.summary['id'] self.serial = self.summary['serial'] self.status = self.summary['status'] except KeyError: _LOGGER.error("Could not extract some sync module info: %s", response, exc_info=True) self.network_info = api.request_network_status(self.blink, self.network_id) self.check_new_videos() try: for camera_config in self.camera_list: if 'name' not in camera_config: break name = camera_config['name'] self.cameras[name] = BlinkCamera(self) self.motion[name] = False camera_info = self.get_camera_info(camera_config['id']) self.cameras[name].update(camera_info, force_cache=True, force=True) except KeyError: _LOGGER.error("Could not create cameras instances for %s", self.name, exc_info=True) return False return True
def get_cameras(self): """Find and creates cameras.""" self._summary = self._summary_request() response = self._summary['devices'] for element in response: if ('device_type' in element and element['device_type'] == 'camera'): # Add region to config element['region_id'] = self.region_id try: name = element['name'] element['video'] = self.videos[name][0]['clip'] element['thumbnail'] = self.videos[name][0]['thumb'] except KeyError: element['video'] = None element['thumbnail'] = None device = BlinkCamera(element, self) self.cameras[device.name] = device self._idlookup[device.id] = device.name self.blink.refresh(force_cache=self.first_init) self.first_init = False
class TestBlinkCameraSetup(unittest.TestCase): """Test the Blink class in blinkpy.""" def setUp(self): """Set up Blink module.""" self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD) header = { "Host": "abc.zxc", "TOKEN_AUTH": mresp.LOGIN_RESPONSE["authtoken"]["authtoken"], } # pylint: disable=protected-access self.blink._auth_header = header self.blink.session = create_session() self.blink.urls = BlinkURLHandler("test") self.blink.sync["test"] = BlinkSyncModule(self.blink, "test", 1234, []) self.camera = BlinkCamera(self.blink.sync["test"]) self.camera.name = "foobar" self.blink.sync["test"].cameras["foobar"] = self.camera def tearDown(self): """Clean up after test.""" self.blink = None def test_camera_update(self, mock_sess): """Test that we can properly update camera properties.""" config = { "name": "new", "id": 1234, "network_id": 5678, "serial": "12345678", "enabled": False, "battery_voltage": 90, "battery_state": "ok", "temperature": 68, "wifi_strength": 4, "thumbnail": "/thumb", } self.camera.last_record = ["1"] self.camera.sync.last_record = { "new": { "clip": "/test.mp4", "time": "1970-01-01T00:00:00" } } mock_sess.side_effect = [ mresp.MockResponse({"temp": 71}, 200), "test", "foobar", ] self.camera.update(config) self.assertEqual(self.camera.name, "new") self.assertEqual(self.camera.camera_id, "1234") self.assertEqual(self.camera.network_id, "5678") self.assertEqual(self.camera.serial, "12345678") self.assertEqual(self.camera.motion_enabled, False) self.assertEqual(self.camera.battery, "ok") self.assertEqual(self.camera.temperature, 68) self.assertEqual(self.camera.temperature_c, 20) self.assertEqual(self.camera.temperature_calibrated, 71) self.assertEqual(self.camera.wifi_strength, 4) self.assertEqual(self.camera.thumbnail, "https://rest-test.immedia-semi.com/thumb.jpg") self.assertEqual(self.camera.clip, "https://rest-test.immedia-semi.com/test.mp4") self.assertEqual(self.camera.image_from_cache, "test") self.assertEqual(self.camera.video_from_cache, "foobar") def test_no_thumbnails(self, mock_sess): """Tests that thumbnail is 'None' if none found.""" mock_sess.return_value = "foobar" self.camera.last_record = ["1"] config = { "name": "new", "id": 1234, "network_id": 5678, "serial": "12345678", "enabled": False, "battery_voltage": 90, "battery_state": "ok", "temperature": 68, "wifi_strength": 4, "thumbnail": "", } self.camera.sync.homescreen = {"devices": []} self.assertEqual(self.camera.temperature_calibrated, None) with self.assertLogs() as logrecord: self.camera.update(config, force=True) self.assertEqual(self.camera.thumbnail, None) self.assertEqual(self.camera.last_record, ["1"]) self.assertEqual(self.camera.temperature_calibrated, 68) self.assertEqual( logrecord.output, [ ("WARNING:blinkpy.camera:Could not retrieve calibrated " "temperature."), ("WARNING:blinkpy.camera:Could not find thumbnail for camera new" "\nNoneType: None"), ], ) def test_no_video_clips(self, mock_sess): """Tests that we still proceed with camera setup with no videos.""" mock_sess.return_value = "foobar" config = { "name": "new", "id": 1234, "network_id": 5678, "serial": "12345678", "enabled": False, "battery_voltage": 90, "battery_state": "ok", "temperature": 68, "wifi_strength": 4, "thumbnail": "/foobar", } self.camera.sync.homescreen = {"devices": []} self.camera.update(config, force_cache=True) self.assertEqual(self.camera.clip, None) self.assertEqual(self.camera.video_from_cache, None)
class TestBlinkCameraSetup(unittest.TestCase): """Test the Blink class in blinkpy.""" def setUp(self): """Set up Blink module.""" self.blink = Blink() self.blink.urls = BlinkURLHandler("test") self.blink.sync["test"] = BlinkSyncModule(self.blink, "test", 1234, []) self.camera = BlinkCamera(self.blink.sync["test"]) self.camera.name = "foobar" self.blink.sync["test"].cameras["foobar"] = self.camera def tearDown(self): """Clean up after test.""" self.blink = None self.camera = None def test_camera_update(self, mock_resp): """Test that we can properly update camera properties.""" config = { "name": "new", "id": 1234, "network_id": 5678, "serial": "12345678", "enabled": False, "battery_voltage": 90, "battery_state": "ok", "temperature": 68, "wifi_strength": 4, "thumbnail": "/thumb", } self.camera.last_record = ["1"] self.camera.sync.last_record = { "new": { "clip": "/test.mp4", "time": "1970-01-01T00:00:00" } } mock_resp.side_effect = [ { "temp": 71 }, "test", "foobar", ] self.camera.update(config) self.assertEqual(self.camera.name, "new") self.assertEqual(self.camera.camera_id, "1234") self.assertEqual(self.camera.network_id, "5678") self.assertEqual(self.camera.serial, "12345678") self.assertEqual(self.camera.motion_enabled, False) self.assertEqual(self.camera.battery, "ok") self.assertEqual(self.camera.temperature, 68) self.assertEqual(self.camera.temperature_c, 20) self.assertEqual(self.camera.temperature_calibrated, 71) self.assertEqual(self.camera.wifi_strength, 4) self.assertEqual(self.camera.thumbnail, "https://rest-test.immedia-semi.com/thumb.jpg") self.assertEqual(self.camera.clip, "https://rest-test.immedia-semi.com/test.mp4") self.assertEqual(self.camera.image_from_cache, "test") self.assertEqual(self.camera.video_from_cache, "foobar") def test_no_thumbnails(self, mock_resp): """Tests that thumbnail is 'None' if none found.""" mock_resp.return_value = "foobar" self.camera.last_record = ["1"] config = { "name": "new", "id": 1234, "network_id": 5678, "serial": "12345678", "enabled": False, "battery_voltage": 90, "battery_state": "ok", "temperature": 68, "wifi_strength": 4, "thumbnail": "", } self.camera.sync.homescreen = {"devices": []} self.assertEqual(self.camera.temperature_calibrated, None) with self.assertLogs() as logrecord: self.camera.update(config, force=True) self.assertEqual(self.camera.thumbnail, None) self.assertEqual(self.camera.last_record, ["1"]) self.assertEqual(self.camera.temperature_calibrated, 68) self.assertEqual( logrecord.output, [ ("WARNING:blinkpy.camera:Could not retrieve calibrated " "temperature."), ("WARNING:blinkpy.camera:Could not find thumbnail for camera new" ), ], ) def test_no_video_clips(self, mock_resp): """Tests that we still proceed with camera setup with no videos.""" mock_resp.return_value = "foobar" config = { "name": "new", "id": 1234, "network_id": 5678, "serial": "12345678", "enabled": False, "battery_voltage": 90, "battery_state": "ok", "temperature": 68, "wifi_strength": 4, "thumbnail": "/foobar", } self.camera.sync.homescreen = {"devices": []} self.camera.update(config, force_cache=True) self.assertEqual(self.camera.clip, None) self.assertEqual(self.camera.video_from_cache, None) def test_camera_arm_status(self, mock_resp): """Test arming and disarming camera.""" self.camera.motion_enabled = None self.assertFalse(self.camera.arm) self.camera.motion_enabled = False self.assertFalse(self.camera.arm) self.camera.motion_enabled = True self.assertTrue(self.camera.arm) @mock.patch("blinkpy.camera.api.request_motion_detection_enable") @mock.patch("blinkpy.camera.api.request_motion_detection_disable") def test_motion_detection_enable_disable(self, mock_dis, mock_en, mock_rep): """Test setting motion detection enable properly.""" mock_dis.return_value = "disable" mock_en.return_value = "enable" self.assertEqual(self.camera.set_motion_detect(True), "enable") self.assertEqual(self.camera.set_motion_detect(False), "disable") def test_missing_attributes(self, mock_resp): """Test that attributes return None if missing.""" self.camera.temperature = None self.camera.serial = None attr = self.camera.attributes self.assertEqual(attr["serial"], None) self.assertEqual(attr["temperature"], None) self.assertEqual(attr["temperature_c"], None) def test_mini_missing_attributes(self, mock_resp): """Test that attributes return None if missing.""" camera = BlinkCameraMini(self.blink.sync) self.blink.sync.network_id = None self.blink.sync.name = None attr = camera.attributes for key in attr: self.assertEqual(attr[key], None)
class TestBlinkFunctions(unittest.TestCase): """Test Blink and BlinkCamera functions in blinkpy.""" def setUp(self): """Set up Blink module.""" self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD) # pylint: disable=protected-access self.blink._auth_header = { 'Host': 'test.url.tld', 'TOKEN_AUTH': 'foobar123' } self.blink.urls = blinkpy.BlinkURLHandler('test') self.config = { 'device_id': 1111, 'name': 'foobar', 'armed': False, 'active': 'disabled', 'thumbnail': '/test', 'video': '/test.mp4', 'temp': 80, 'battery': 3, 'notifications': 2, 'region_id': 'test', 'device_type': 'camera' } self.blink.sync = MockSyncModule(self.blink, self.blink._auth_header) self.blink.session = create_session() self.camera = BlinkCamera(self.config, self.blink.sync) def tearDown(self): """Clean up after test.""" self.blink = None self.config = {} self.camera = None def test_image_refresh(self, mock_sess): """Test image refresh function.""" self.blink.sync.return_value = {'devices': [self.config]} image = self.camera.image_refresh() self.assertEqual(image, 'https://rest.test.{}/test.jpg'.format(BLINK_URL)) @mock.patch('blinkpy.sync_module.BlinkSyncModule.camera_config_request') @mock.patch('blinkpy.sync_module.BlinkSyncModule._video_request') def test_refresh(self, vid_req, req, mock_sess): """Test blinkpy refresh function.""" req.return_value = {'foo': 'bar'} self.blink.sync.cameras = {'foobar': self.camera} self.blink.sync.return_value = {'devices': [{'foo': 'bar'}]} # pylint: disable=protected-access summary = {'devices': [self.config]} # pylint: disable=protected-access events = {'foo': 'bar'} vid_req.return_value = [{ 'camera_name': 'foobar', 'address': '/new.mp4', 'thumbnail': '/new', }] with mock.patch('blinkpy.blinkpy.Blink.summary_request', return_value=summary): with mock.patch('blinkpy.blinkpy.Blink.events_request', return_value=events): self.blink.refresh_rate = 0 self.blink.refresh() test_camera = self.blink.sync.cameras['foobar'] self.assertEqual(test_camera.clip, 'https://rest.test.{}/new.mp4'.format(BLINK_URL)) self.assertEqual(test_camera.thumbnail, 'https://rest.test.{}/new.jpg'.format(BLINK_URL)) def test_set_links(self, mock_sess): """Test the link set method.""" self.blink.sync.cameras = {'foobar': self.camera} self.blink.network_id = 9999 self.blink.sync.set_links() net_url = "{}/{}".format(self.blink.urls.network_url, 9999) self.assertEqual(self.camera.image_link, "{}/camera/1111/thumbnail".format(net_url)) self.assertEqual(self.camera.arm_link, "{}/camera/1111/".format(net_url)) @mock.patch('blinkpy.blinkpy.http_req') def test_backup_url(self, req, mock_sess): """Test backup login method.""" fake_req = Request('POST', 'http://wrong.url').prepare() req.side_effect = [ mresp.mocked_session_send(fake_req), { 'authtoken': { 'authtoken': 'foobar123' } } ] self.blink.get_auth_token() self.assertEqual(self.blink.region_id, 'piri') self.assertEqual(self.blink.region, 'UNKNOWN') # pylint: disable=protected-access self.assertEqual(self.blink._token, 'foobar123')
class TestBlinkCameraSetup(unittest.TestCase): """Test the Blink class in blinkpy.""" def setUp(self): """Set up Blink module.""" self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD) header = { 'Host': 'abc.zxc', 'TOKEN_AUTH': mresp.LOGIN_RESPONSE['authtoken']['authtoken'] } # pylint: disable=protected-access self.blink._auth_header = header self.blink.session = create_session() self.blink.urls = BlinkURLHandler('test') self.blink.sync['test'] = BlinkSyncModule(self.blink, 'test', 1234) self.camera = BlinkCamera(self.blink.sync['test']) self.camera.name = 'foobar' self.blink.sync['test'].cameras['foobar'] = self.camera def tearDown(self): """Clean up after test.""" self.blink = None def test_check_for_motion(self, mock_sess): """Test check for motion function.""" self.assertEqual(self.camera.last_record, []) self.assertEqual(self.camera.motion_detected, None) self.camera.sync.record_dates = {'foobar': [1, 3, 2, 4]} self.camera.check_for_motion() self.assertEqual(self.camera.last_record, [4]) self.assertEqual(self.camera.motion_detected, False) self.camera.sync.record_dates = {'foobar': [7, 1, 3, 4]} self.camera.check_for_motion() self.assertEqual(self.camera.last_record, [7, 4]) self.assertEqual(self.camera.motion_detected, True) self.camera.check_for_motion() self.assertEqual(self.camera.last_record, [7, 4]) self.assertEqual(self.camera.motion_detected, False) def test_max_motion_clips(self, mock_sess): """Test that we only maintain certain number of records.""" for i in range(0, MAX_CLIPS): self.camera.last_record.append(i) self.camera.sync.record_dates['foobar'] = [MAX_CLIPS+2] self.assertEqual(len(self.camera.last_record), MAX_CLIPS) self.camera.check_for_motion() self.assertEqual(self.camera.motion_detected, True) self.assertEqual(len(self.camera.last_record), MAX_CLIPS) def test_camera_update(self, mock_sess): """Test that we can properly update camera properties.""" config = { 'name': 'new', 'camera_id': 1234, 'network_id': 5678, 'serial': '12345678', 'enabled': False, 'battery_voltage': 90, 'battery_state': 'ok', 'temperature': 68, 'wifi_strength': 4, 'thumbnail': '/thumb', } self.camera.last_record = ['1'] self.camera.sync.all_clips = {'new': {'1': '/test.mp4'}} mock_sess.side_effect = [ 'test', 'foobar' ] self.camera.update(config) self.assertEqual(self.camera.name, 'new') self.assertEqual(self.camera.camera_id, '1234') self.assertEqual(self.camera.network_id, '5678') self.assertEqual(self.camera.serial, '12345678') self.assertEqual(self.camera.motion_enabled, False) self.assertEqual(self.camera.battery, 50) self.assertEqual(self.camera.temperature, 68) self.assertEqual(self.camera.temperature_c, 20) self.assertEqual(self.camera.wifi_strength, 4) self.assertEqual(self.camera.thumbnail, 'https://rest.test.immedia-semi.com/thumb.jpg') self.assertEqual(self.camera.clip, 'https://rest.test.immedia-semi.com/test.mp4') self.assertEqual(self.camera.image_from_cache, 'test') self.assertEqual(self.camera.video_from_cache, 'foobar') def test_thumbnail_not_in_info(self, mock_sess): """Test that we grab thumbanil if not in camera_info.""" mock_sess.side_effect = ['foobar', 'barfoo'] self.camera.last_record = ['1'] self.camera.sync.record_dates['new'] = ['1'] self.camera.sync.all_clips = {'new': {'1': '/test.mp4'}} config = { 'name': 'new', 'camera_id': 1234, 'network_id': 5678, 'serial': '12345678', 'enabled': False, 'battery_voltage': 90, 'battery_state': 'ok', 'temperature': 68, 'wifi_strength': 4, 'thumbnail': '', } self.camera.sync.homescreen = { 'devices': [ {'foo': 'bar'}, {'device_type': 'foobar'}, {'device_type': 'camera', 'name': 'new', 'thumbnail': '/new/thumb'} ] } self.camera.update(config) self.assertEqual(self.camera.thumbnail, 'https://rest.test.immedia-semi.com/new/thumb.jpg') def test_no_thumbnails(self, mock_sess): """Tests that thumbnail is 'None' if none found.""" mock_sess.return_value = 'foobar' self.camera.last_record = ['1'] self.camera.sync.record_dates['new'] = ['1'] self.camera.sync.all_clips = {'new': {'1': '/test.mp4'}} config = { 'name': 'new', 'camera_id': 1234, 'network_id': 5678, 'serial': '12345678', 'enabled': False, 'battery_voltage': 90, 'battery_state': 'ok', 'temperature': 68, 'wifi_strength': 4, 'thumbnail': '', } self.camera.sync.homescreen = { 'devices': [] } with self.assertLogs() as logrecord: self.camera.update(config) self.assertEqual(self.camera.thumbnail, None) self.assertEqual( logrecord.output, ["ERROR:blinkpy.camera:Could not find thumbnail for camera new"] ) def test_no_video_clips(self, mock_sess): """Tests that we still proceed with camera setup with no videos.""" mock_sess.return_value = 'foobar' config = { 'name': 'new', 'camera_id': 1234, 'network_id': 5678, 'serial': '12345678', 'enabled': False, 'battery_voltage': 90, 'battery_state': 'ok', 'temperature': 68, 'wifi_strength': 4, 'thumbnail': '/foobar', } self.camera.sync.homescreen = { 'devices': [] } self.camera.update(config, force_cache=True) self.assertEqual(self.camera.clip, None) self.assertEqual(self.camera.video_from_cache, None)
def test_camera_case(self, mock_sess): """Tests camera case sensitivity.""" camera_object = BlinkCamera(self.camera_config, self.sync) self.sync.cameras['foobar'] = camera_object self.assertEqual(camera_object, self.sync.cameras['fOoBaR'])
class TestBlinkCameraSetup(unittest.TestCase): """Test the Blink class in blinkpy.""" def setUp(self): """Set up Blink module.""" self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD) header = { 'Host': 'abc.zxc', 'TOKEN_AUTH': mresp.LOGIN_RESPONSE['authtoken']['authtoken'] } # pylint: disable=protected-access self.blink._auth_header = header self.blink.session = create_session() self.blink.urls = BlinkURLHandler('test') self.blink.sync['test'] = BlinkSyncModule(self.blink, 'test', 1234, []) self.camera = BlinkCamera(self.blink.sync['test']) self.camera.name = 'foobar' self.blink.sync['test'].cameras['foobar'] = self.camera def tearDown(self): """Clean up after test.""" self.blink = None def test_camera_update(self, mock_sess): """Test that we can properly update camera properties.""" config = { 'name': 'new', 'id': 1234, 'network_id': 5678, 'serial': '12345678', 'enabled': False, 'battery_voltage': 90, 'battery_state': 'ok', 'temperature': 68, 'wifi_strength': 4, 'thumbnail': '/thumb', } self.camera.last_record = ['1'] self.camera.sync.last_record = { 'new': { 'clip': '/test.mp4', 'time': '1970-01-01T00:00:00' } } mock_sess.side_effect = [ mresp.MockResponse({'temp': 71}, 200), 'test', 'foobar' ] self.camera.update(config) self.assertEqual(self.camera.name, 'new') self.assertEqual(self.camera.camera_id, '1234') self.assertEqual(self.camera.network_id, '5678') self.assertEqual(self.camera.serial, '12345678') self.assertEqual(self.camera.motion_enabled, False) self.assertEqual(self.camera.battery, 'ok') self.assertEqual(self.camera.temperature, 68) self.assertEqual(self.camera.temperature_c, 20) self.assertEqual(self.camera.temperature_calibrated, 71) self.assertEqual(self.camera.wifi_strength, 4) self.assertEqual(self.camera.thumbnail, 'https://rest-test.immedia-semi.com/thumb.jpg') self.assertEqual(self.camera.clip, 'https://rest-test.immedia-semi.com/test.mp4') self.assertEqual(self.camera.image_from_cache, 'test') self.assertEqual(self.camera.video_from_cache, 'foobar') def test_no_thumbnails(self, mock_sess): """Tests that thumbnail is 'None' if none found.""" mock_sess.return_value = 'foobar' self.camera.last_record = ['1'] config = { 'name': 'new', 'id': 1234, 'network_id': 5678, 'serial': '12345678', 'enabled': False, 'battery_voltage': 90, 'battery_state': 'ok', 'temperature': 68, 'wifi_strength': 4, 'thumbnail': '', } self.camera.sync.homescreen = {'devices': []} self.assertEqual(self.camera.temperature_calibrated, None) with self.assertLogs() as logrecord: self.camera.update(config, force=True) self.assertEqual(self.camera.thumbnail, None) self.assertEqual(self.camera.last_record, ['1']) self.assertEqual(self.camera.temperature_calibrated, 68) self.assertEqual( logrecord.output, [("WARNING:blinkpy.camera:Could not retrieve calibrated " "temperature."), ("WARNING:blinkpy.camera:Could not find thumbnail for camera new" "\nNoneType: None")]) def test_no_video_clips(self, mock_sess): """Tests that we still proceed with camera setup with no videos.""" mock_sess.return_value = 'foobar' config = { 'name': 'new', 'id': 1234, 'network_id': 5678, 'serial': '12345678', 'enabled': False, 'battery_voltage': 90, 'battery_state': 'ok', 'temperature': 68, 'wifi_strength': 4, 'thumbnail': '/foobar', } self.camera.sync.homescreen = {'devices': []} self.camera.update(config, force_cache=True) self.assertEqual(self.camera.clip, None) self.assertEqual(self.camera.video_from_cache, None)