Split up tests, added cache test

This commit is contained in:
Kevin Fronczak
2018-09-27 11:07:31 -04:00
parent 451d725946
commit 1b1235210e
3 changed files with 177 additions and 51 deletions
-37
View File
@@ -75,38 +75,6 @@ class TestBlinkFunctions(unittest.TestCase):
self.config = {}
self.camera = None
def test_get_videos(self):
"""Test video access."""
self.blink.sync.return_value = [
{
'camera_name': 'foobar',
'address': '/new/test.mp4',
'thumbnail': '/test/thumb'
}
]
self.blink.sync.get_videos()
self.assertEqual(self.blink.sync.videos['foobar'][0]['clip'],
'/new/test.mp4')
self.assertEqual(self.blink.sync.videos['foobar'][0]['thumb'],
'/test/thumb')
@mock.patch('blinkpy.sync_module.BlinkSyncModule.refresh')
@mock.patch('blinkpy.sync_module.BlinkSyncModule._summary_request')
@mock.patch('blinkpy.sync_module.BlinkSyncModule._video_request')
def test_get_cameras(self, vid_req, req, refresh):
"""Test camera extraction."""
refresh.return_value = True
req.return_value = {'devices': [self.config]}
vid_req.return_value = [
{
'camera_name': 'foobar',
'address': '/new.mp4',
'thumbnail': '/new'
}
]
self.blink.sync.get_cameras()
self.assertTrue('foobar' in self.blink.sync.cameras)
def test_image_refresh(self):
"""Test image refresh function."""
self.blink.sync.return_value = {'devices': [self.config]}
@@ -114,11 +82,6 @@ class TestBlinkFunctions(unittest.TestCase):
self.assertEqual(image,
'https://rest.test.{}/test.jpg'.format(BLINK_URL))
def test_video_count(self):
"""Test video count function."""
self.blink.sync.return_value = {'count': 1}
self.assertEqual(self.blink.sync.video_count, 1)
@mock.patch('blinkpy.sync_module.BlinkSyncModule.camera_config_request')
@mock.patch('blinkpy.sync_module.BlinkSyncModule._video_request')
def test_refresh(self, vid_req, req):
@@ -50,9 +50,13 @@ class TestBlinkCameraSetup(unittest.TestCase):
'region_id': 'test'
}
header = {
'Host': 'abc.zxc',
'TOKEN_AUTH': mresp.LOGIN_RESPONSE['authtoken']['authtoken']
}
self.blink.urls = BlinkURLHandler('test')
self.blink.network_id = '0000'
self.blink.sync = BlinkSyncModule(self.blink, dict(), self.blink.urls)
self.sync = BlinkSyncModule(self.blink, header, self.blink.urls)
def tearDown(self):
"""Clean up after test."""
@@ -68,12 +72,12 @@ class TestBlinkCameraSetup(unittest.TestCase):
"""Tests all property set/recall."""
self.blink.urls = BlinkURLHandler('test')
self.blink.sync.cameras = {
'foobar': BlinkCamera(self.camera_config, self.blink.sync)
self.sync.cameras = {
'foobar': BlinkCamera(self.camera_config, self.sync)
}
for name in self.blink.sync.cameras:
camera = self.blink.sync.cameras[name]
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')
@@ -102,8 +106,8 @@ class TestBlinkCameraSetup(unittest.TestCase):
camera_config['temp'] = 60
camera_config['battery'] = 0
camera_config['notifications'] = 4
for name in self.blink.sync.cameras:
camera = self.blink.sync.cameras[name]
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(
@@ -124,9 +128,9 @@ class TestBlinkCameraSetup(unittest.TestCase):
def test_camera_case(self):
"""Tests camera case sensitivity."""
camera_object = BlinkCamera(self.camera_config, self.blink.sync)
self.blink.sync.cameras['foobar'] = camera_object
self.assertEqual(camera_object, self.blink.sync.cameras['fOoBaR'])
camera_object = BlinkCamera(self.camera_config, self.sync)
self.sync.cameras['foobar'] = camera_object
self.assertEqual(camera_object, self.sync.cameras['fOoBaR'])
@mock.patch('blinkpy.sync_module.BlinkSyncModule.camera_config_request',
return_value=CAMERA_CFG)
@@ -134,12 +138,12 @@ class TestBlinkCameraSetup(unittest.TestCase):
"""Tests camera attributes."""
self.blink.urls = BlinkURLHandler('test')
self.blink.sync.cameras = {
'foobar': BlinkCamera(self.camera_config, self.blink.sync)
self.sync.cameras = {
'foobar': BlinkCamera(self.camera_config, self.sync)
}
for name in self.blink.sync.cameras:
camera = self.blink.sync.cameras[name]
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')
@@ -160,3 +164,55 @@ class TestBlinkCameraSetup(unittest.TestCase):
self.assertEqual(camera_attr['network_id'], '0000')
self.assertEqual(camera_attr['motion_enabled'], True)
self.assertEqual(camera_attr['wifi_strength'], -30)
@mock.patch('blinkpy.camera.BlinkCamera.image_refresh',
side_effect='refresh/url')
@mock.patch('blinkpy.helpers.util.requests.get',
side_effect=mresp.mocked_requests_get)
def test_camera_cache(self, req, img_refresh):
"""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)
+107
View File
@@ -0,0 +1,107 @@
"""Tests camera and system functions."""
import unittest
from unittest import mock
from blinkpy import blinkpy
from blinkpy.sync_module import BlinkSyncModule
from blinkpy.camera import BlinkCamera
USERNAME = 'foobar'
PASSWORD = 'deadbeef'
class MockSyncModule(BlinkSyncModule):
"""Mock http requests from sync module."""
def __init__(self, blink, header):
"""Create mock sync module instance."""
super().__init__(blink, header)
self.blink = blink
self.header = header
self.return_value = None
self.return_value2 = None
def http_get(self, url, stream=False, json=True):
"""Mock get request."""
if stream and self.return_value2 is not None:
return self.return_value2
return self.return_value
def http_post(self, url):
"""Mock post request."""
return self.return_value
class TestBlinkSyncModule(unittest.TestCase):
"""Test BlinkSyncModule 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.camera = BlinkCamera(self.config, self.blink.sync)
def tearDown(self):
"""Clean up after test."""
self.blink = None
self.config = {}
self.camera = None
def test_get_videos(self):
"""Test video access."""
self.blink.sync.return_value = [
{
'camera_name': 'foobar',
'address': '/new/test.mp4',
'thumbnail': '/test/thumb'
}
]
self.blink.sync.get_videos()
self.assertEqual(self.blink.sync.videos['foobar'][0]['clip'],
'/new/test.mp4')
self.assertEqual(self.blink.sync.videos['foobar'][0]['thumb'],
'/test/thumb')
@mock.patch('blinkpy.sync_module.BlinkSyncModule.refresh')
@mock.patch('blinkpy.sync_module.BlinkSyncModule._summary_request')
@mock.patch('blinkpy.sync_module.BlinkSyncModule._video_request')
def test_get_cameras(self, vid_req, req, refresh):
"""Test camera extraction."""
refresh.return_value = True
req.return_value = {'devices': [self.config]}
vid_req.return_value = [
{
'camera_name': 'foobar',
'address': '/new.mp4',
'thumbnail': '/new'
}
]
self.blink.sync.get_cameras()
self.assertTrue('foobar' in self.blink.sync.cameras)
def test_video_count(self):
"""Test video count function."""
self.blink.sync.return_value = {'count': 1}
self.assertEqual(self.blink.sync.video_count, 1)