From fffb10d7e6522acf26099219338b50ba5d7606b5 Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Sat, 20 Jan 2018 19:41:15 -0500 Subject: [PATCH] Refactored unit tests for special functions --- blinkpy/blinkpy.py | 64 ++++++------ tests/test_blink_functions.py | 187 +++++++++++++++------------------- 2 files changed, 115 insertions(+), 136 deletions(-) diff --git a/blinkpy/blinkpy.py b/blinkpy/blinkpy.py index 805cfd1..631f366 100644 --- a/blinkpy/blinkpy.py +++ b/blinkpy/blinkpy.py @@ -245,35 +245,6 @@ class Blink(object): """Get a full summary of device information.""" return self._summary - def get_videos(self, start_page=0, end_page=1): - """Retrieve last recorded videos per camera.""" - videos = list() - for page_num in range(start_page, end_page + 1): - this_page = self._video_request(page_num) - if not this_page: - break - videos.append(this_page) - - for page in videos: - for entry in page: - camera_name = entry['camera_name'] - clip_addr = entry['address'] - thumb_addr = entry['thumbnail'] - try: - self._all_videos[camera_name].append( - { - 'clip': clip_addr, - 'thumb': thumb_addr, - } - ) - except KeyError: - self._all_videos[camera_name] = [ - { - 'clip': clip_addr, - 'thumb': thumb_addr, - } - ] - @property def arm(self): """Return status of sync module: armed/disarmed.""" @@ -302,13 +273,42 @@ class Blink(object): for element in response: try: if str(element['device_id']) == camera.id: - element['video'] = self.videos[camera][0]['clip'] - element['thumbnail'] = self.videos[camera][0]['thumb'] + element['video'] = self.videos[name][0]['clip'] + element['thumbnail'] = self.videos[name][0]['thumb'] camera.update(element) except KeyError: pass return None + def get_videos(self, start_page=0, end_page=1): + """Retrieve last recorded videos per camera.""" + videos = list() + for page_num in range(start_page, end_page + 1): + this_page = self._video_request(page_num) + if not this_page: + break + videos.append(this_page) + + for page in videos: + for entry in page: + camera_name = entry['camera_name'] + clip_addr = entry['address'] + thumb_addr = entry['thumbnail'] + try: + self._all_videos[camera_name].append( + { + 'clip': clip_addr, + 'thumb': thumb_addr, + } + ) + except KeyError: + self._all_videos[camera_name] = [ + { + 'clip': clip_addr, + 'thumb': thumb_addr, + } + ] + def get_cameras(self): """Find and creates cameras.""" self._summary = self._summary_request() @@ -388,7 +388,7 @@ class Blink(object): else: response = _request(self, url=LOGIN_BACKUP_URL, headers=headers, data=data, reqtype='post') - self.region_id = 'rest.piri' + self.region_id = 'piri' self.region = "UNKNOWN" self._host = "{}.{}".format(self.region_id, BLINK_URL) diff --git a/tests/test_blink_functions.py b/tests/test_blink_functions.py index 25c56f1..17ea200 100644 --- a/tests/test_blink_functions.py +++ b/tests/test_blink_functions.py @@ -2,9 +2,8 @@ import unittest from unittest import mock -import random -import pytest -from blinkpy import blinkpy as blinkpy +from blinkpy import blinkpy +from blinkpy.helpers.constants import BLINK_URL import tests.mock_responses as mresp USERNAME = 'foobar' @@ -18,8 +17,12 @@ class TestBlinkFunctions(unittest.TestCase): """Set up Blink module.""" self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD) - self.blink.get_auth_token() - self.urls = blinkpy.BlinkURLHandler('test') + # 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', @@ -29,116 +32,92 @@ class TestBlinkFunctions(unittest.TestCase): 'temp': 80, 'battery': 3, 'notifications': 2, - 'region_id': 'test' + 'region_id': 'test', + 'device_type': 'camera' } self.camera = blinkpy.BlinkCamera(self.config, self.blink) def tearDown(self): """Clean up after test.""" self.blink = None - self.urls = None self.config = {} self.camera = None - @mock.patch('blinkpy.blinkpy.requests.post', - side_effect=mresp.mocked_requests_post) - @mock.patch('blinkpy.blinkpy.requests.get', - side_effect=mresp.mocked_requests_get) - @pytest.mark.skip(reason="Need to simplify") - def test_take_new_picture(self, mock_get, mock_post): - """Checks if we can take a new picture and retrieve the thumbnail.""" - self.blink.setup_system() - test_cameras = {} # mresp.get_test_cameras(self.test_urls.base_url) - test_thumbnail = '' - # self.test_urls.base_url + mresp.NEW_THUMBNAIL + '.jpg' - # Snap picture for each camera and check new thumb - for camera_name in test_cameras: - camera = self.blink.cameras[camera_name] - camera.snap_picture() - camera.image_refresh() - self.assertEqual(camera.thumbnail, test_thumbnail) + @mock.patch('blinkpy.blinkpy._request') + def test_get_videos(self, req): + """Test video access.""" + req.return_value = [ + { + 'camera_name': 'foobar', + 'address': '/new/test.mp4', + 'thumbnail': '/test/thumb' + } + ] + self.blink.get_videos() + self.assertEqual(self.blink.videos['foobar'][0]['clip'], + '/new/test.mp4') + self.assertEqual(self.blink.videos['foobar'][0]['thumb'], + '/test/thumb') - # Manually set thumbnail, and then globally refresh and check - for camera_name in test_cameras: - camera = self.blink.cameras[camera_name] - camera.thumbnail = 'Testing' - self.assertEqual(camera.thumbnail, 'Testing') + @mock.patch('blinkpy.blinkpy._request') + def test_get_cameras(self, req): + """Test camera extraction.""" + req.return_value = {'devices': [self.config]} + self.blink.get_cameras() + self.assertTrue('foobar' in self.blink.cameras) + @mock.patch('blinkpy.blinkpy._request') + def test_image_refresh(self, req): + """Test image refresh function.""" + req.return_value = {'devices': [self.config]} + image = self.camera.image_refresh() + self.assertEqual(image, + 'https://rest.test.{}/test.jpg'.format(BLINK_URL)) + + @mock.patch('blinkpy.blinkpy._request') + def test_video_count(self, req): + """Test video count function.""" + req.return_value = {'count': 1} + self.assertEqual(self.blink.video_count, 1) + + @mock.patch('blinkpy.blinkpy._request') + @mock.patch('blinkpy.blinkpy.Blink._video_request') + def test_refresh(self, vid_req, req): + """Test blinkpy refresh function.""" + self.blink.cameras = {'foobar': self.camera} + req.return_value = {'devices': [self.config]} + vid_req.return_value = [ + { + 'camera_name': 'foobar', + 'address': '/new.mp4', + 'thumbnail': '/new' + } + ] self.blink.refresh() - for camera_name in test_cameras: - camera = self.blink.cameras[camera_name] - self.assertEqual(camera.thumbnail, test_thumbnail) + test_camera = self.blink.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)) - @mock.patch('blinkpy.blinkpy.requests.post', - side_effect=mresp.mocked_requests_post) - @mock.patch('blinkpy.blinkpy.requests.get', - side_effect=mresp.mocked_requests_get) - @pytest.mark.skip(reason="Need to simplify") - def test_image_with_bad_data(self, mock_get, mock_post): - """Checks for handling of bad keys.""" - self.blink.setup_system() - for camera_name in self.blink.cameras: - camera = self.blink.cameras[camera_name] - camera.snap_picture() - camera.urls.home_url = "use_bad_response" - self.assertEqual(camera.image_refresh(), None) + def test_set_links(self): + """Test the link set method.""" + self.blink.cameras = {'foobar': self.camera} + self.blink.network_id = 9999 + self.blink.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.requests.post', - side_effect=mresp.mocked_requests_post) - @mock.patch('blinkpy.blinkpy.requests.get', - side_effect=mresp.mocked_requests_get) - @pytest.mark.skip(reason="Need to simplify") - def test_camera_random_case(self, mock_get, mock_post): - """Checks for case of camera name.""" - self.blink.setup_system() - for camera_name in self.blink.cameras: - - rand_name = camera_name - # Make sure we never pass this test if rand_name = camera_name - while rand_name == camera_name: - rand_name = ''.join( - random.choice( - (str.upper, str.lower) - )(x) for x in camera_name) - - self.assertEqual(self.blink.cameras[camera_name].name, - self.blink.cameras[rand_name].name) - - @mock.patch('blinkpy.blinkpy.requests.post', - side_effect=mresp.mocked_requests_post) - @mock.patch('blinkpy.blinkpy.requests.get', - side_effect=mresp.mocked_requests_get) - @pytest.mark.skip(reason="Need to simplify") - def test_camera_thumbs(self, mock_get, mock_post): - """Checks to see if we can retrieve camera thumbs.""" - test_cameras = {} # mresp.get_test_cameras(self.test_urls.base_url) - self.blink.setup_system() - for name in self.blink.cameras: - thumb = self.blink.camera_thumbs[name] - self.assertEqual(test_cameras[name]['thumbnail'], thumb) - - -# pylint: disable=pointless-string-statement -''' - @mock.patch('blinkpy.blinkpy.copyfileobj', - side_effect=mresp.mocked_copyfileobj) - @mock.patch('blinkpy.blinkpy.requests.post', - side_effect=mresp.mocked_requests_post) - @mock.patch('blinkpy.blinkpy.requests.get', - side_effect=mresp.mocked_requests_get) - @pytest.mark.skip(reason="Need to simplify") - def test_image_to_file(self, mock_get, mock_post, mock_copyfileobj): - """Checks that we can write an image to file.""" - self.blink.setup_system() - cameras = self.blink.cameras - filename = '/tmp/test.jpg' - test_files = list() - for camera_name in cameras: - camera = cameras[camera_name] - test_files.append(mresp.MOCK_BYTES) - mock_fh = mock.mock_open() - with mock.patch('builtins.open', mock_fh, create=True): - camera.image_to_file(camera_name + filename) - mock_fh.assert_called_once_with(camera_name + filename, 'wb') - self.assertEqual(test_files, mresp.FAKE_FILES) -''' + @mock.patch('blinkpy.blinkpy._request') + def test_backup_url(self, req): + """Test backup login method.""" + req.side_effect = [ + mresp.mocked_requests_post(None), + {'authtoken': {'authtoken': 'foobar123'}} + ] + self.blink.get_auth_token() + self.assertEqual(self.blink.region_id, 'piri') + self.assertEqual(self.blink.region, 'UNKNOWN')