174 lines
7.6 KiB
Python
174 lines
7.6 KiB
Python
"""
|
|
Tests the system initialization and attributes of
|
|
the main Blink system. Tests if we properly catch
|
|
any communication related errors at startup.
|
|
"""
|
|
|
|
import unittest
|
|
from unittest import mock
|
|
import blinkpy
|
|
import tests.mock_responses as mresp
|
|
import helpers.constants as const
|
|
|
|
USERNAME = 'foobar'
|
|
PASSWORD = 'deadbeef'
|
|
|
|
|
|
class TestBlinkSetup(unittest.TestCase):
|
|
"""Test the Blink class in blinkpy."""
|
|
|
|
def setUp(self):
|
|
"""Set up Blink module."""
|
|
self.blink_no_cred = blinkpy.Blink()
|
|
self.blink = blinkpy.Blink(username=USERNAME,
|
|
password=PASSWORD)
|
|
|
|
def tearDown(self):
|
|
"""Clean up after test."""
|
|
self.blink = None
|
|
self.blink_no_cred = None
|
|
|
|
def test_initialization(self):
|
|
"""Verify we can initialize blink."""
|
|
# pylint: disable=protected-access
|
|
self.assertEqual(self.blink._username, USERNAME)
|
|
# pylint: disable=protected-access
|
|
self.assertEqual(self.blink._password, PASSWORD)
|
|
|
|
def test_no_credentials(self):
|
|
"""Check that we throw an exception when no username/password."""
|
|
with self.assertRaises(blinkpy.BlinkAuthenticationException):
|
|
self.blink_no_cred.get_auth_token()
|
|
with self.assertRaises(blinkpy.BlinkAuthenticationException):
|
|
self.blink_no_cred.setup_system()
|
|
# pylint: disable=protected-access
|
|
self.blink_no_cred._username = USERNAME
|
|
with self.assertRaises(blinkpy.BlinkAuthenticationException):
|
|
self.blink_no_cred.get_auth_token()
|
|
|
|
def test_no_auth_header(self):
|
|
"""Check that we throw an excepetion when no auth header given."""
|
|
# pylint: disable=unused-variable
|
|
(region_id, region), = mresp.LOGIN_RESPONSE['region'].items()
|
|
self.blink.urls = blinkpy.BlinkURLHandler(region_id)
|
|
with self.assertRaises(blinkpy.BlinkException):
|
|
self.blink.get_ids()
|
|
with self.assertRaises(blinkpy.BlinkException):
|
|
self.blink.get_summary()
|
|
|
|
@mock.patch('blinkpy.blinkpy.getpass.getpass')
|
|
def test_manual_login(self, getpwd):
|
|
"""Check that we can manually use the login() function."""
|
|
getpwd.return_value = PASSWORD
|
|
with mock.patch('builtins.input', return_value=USERNAME):
|
|
self.blink_no_cred.login()
|
|
# pylint: disable=protected-access
|
|
self.assertEqual(self.blink_no_cred._username, USERNAME)
|
|
# pylint: disable=protected-access
|
|
self.assertEqual(self.blink_no_cred._password, PASSWORD)
|
|
|
|
@mock.patch('blinkpy.blinkpy.requests.post',
|
|
side_effect=mresp.mocked_requests_post)
|
|
@mock.patch('blinkpy.blinkpy.requests.get',
|
|
side_effect=mresp.mocked_requests_get)
|
|
def test_bad_request(self, mock_get, mock_post):
|
|
"""Check that we raise an Exception with a bad request."""
|
|
with self.assertRaises(blinkpy.BlinkException):
|
|
# pylint: disable=protected-access
|
|
blinkpy.blinkpy._request(None, reqtype='bad')
|
|
|
|
with self.assertRaises(blinkpy.BlinkAuthenticationException):
|
|
# pylint: disable=protected-access
|
|
blinkpy.blinkpy._request(None, reqtype='post', is_retry=True)
|
|
|
|
@mock.patch('blinkpy.blinkpy.requests.post',
|
|
side_effect=mresp.mocked_requests_post)
|
|
@mock.patch('blinkpy.blinkpy.requests.get',
|
|
side_effect=mresp.mocked_requests_get)
|
|
def test_system_bad_refresh(self, mock_get, mock_post):
|
|
"""Checks for handling of bad keys."""
|
|
self.blink.setup_system()
|
|
self.blink.urls.home_url = 'use_bad_response'
|
|
self.assertEqual(self.blink.refresh(), 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)
|
|
def test_full_setup(self, mock_get, mock_post):
|
|
"""Check that we can set Blink up properly."""
|
|
self.blink.setup_system()
|
|
|
|
# Get all test values
|
|
authtoken = mresp.LOGIN_RESPONSE['authtoken']['authtoken']
|
|
(region_id, region), = mresp.LOGIN_RESPONSE['region'].items()
|
|
host = region_id + '.' + const.BLINK_URL
|
|
network_id = mresp.NETWORKS_RESPONSE['networks'][0]['id']
|
|
account_id = mresp.NETWORKS_RESPONSE['networks'][0]['account_id']
|
|
test_urls = blinkpy.BlinkURLHandler(region_id)
|
|
test_cameras = mresp.get_test_cameras(test_urls.base_url)
|
|
test_camera_id = mresp.get_test_id_table()
|
|
|
|
# Check that all links have been set properly
|
|
self.assertEqual(self.blink.region_id, region_id)
|
|
self.assertEqual(self.blink.urls.base_url, test_urls.base_url)
|
|
self.assertEqual(self.blink.urls.home_url, test_urls.home_url)
|
|
self.assertEqual(self.blink.urls.event_url, test_urls.event_url)
|
|
self.assertEqual(self.blink.urls.network_url, test_urls.network_url)
|
|
self.assertEqual(self.blink.urls.networks_url, test_urls.networks_url)
|
|
|
|
# Check that all properties have been set after startup
|
|
# pylint: disable=protected-access
|
|
self.assertEqual(self.blink._token, authtoken)
|
|
# pylint: disable=protected-access
|
|
self.assertEqual(self.blink._host, host)
|
|
self.assertEqual(self.blink.network_id, str(network_id))
|
|
self.assertEqual(self.blink.account_id, str(account_id))
|
|
self.assertEqual(self.blink.region, region)
|
|
|
|
# Verify we have initialized all the cameras
|
|
self.assertEqual(self.blink.id_table, test_camera_id)
|
|
for camera in test_cameras:
|
|
self.assertTrue(camera in self.blink.cameras)
|
|
|
|
@mock.patch('blinkpy.blinkpy.requests.post',
|
|
side_effect=mresp.mocked_requests_post)
|
|
@mock.patch('blinkpy.blinkpy.requests.get',
|
|
side_effect=mresp.mocked_requests_get)
|
|
def test_arm_disarm_system(self, mock_get, mock_post):
|
|
"""Check that we can arm/disarm the system"""
|
|
self.blink.setup_system()
|
|
self.blink.arm = False
|
|
self.assertIs(self.blink.arm, False)
|
|
self.blink.arm = True
|
|
self.assertIs(self.blink.arm, True)
|
|
|
|
@mock.patch('blinkpy.blinkpy.requests.post',
|
|
side_effect=mresp.mocked_requests_post)
|
|
@mock.patch('blinkpy.blinkpy.requests.get',
|
|
side_effect=mresp.mocked_requests_get)
|
|
def test_check_online_status(self, mock_get, mock_post):
|
|
"""Check that we can get our online status."""
|
|
self.blink.setup_system()
|
|
expected_status = const.ONLINE[mresp.RESPONSE['syncmodule']['status']]
|
|
self.assertIs(self.blink.online, expected_status)
|
|
|
|
@mock.patch('blinkpy.blinkpy.requests.post',
|
|
side_effect=mresp.mocked_requests_post)
|
|
@mock.patch('blinkpy.blinkpy.requests.get',
|
|
side_effect=mresp.mocked_requests_get)
|
|
def test_setup_backup_subdomain(self, mock_get, mock_post):
|
|
"""Check that we can use the 'rest.piri' subdomain."""
|
|
test_urls = blinkpy.BlinkURLHandler('rest.piri')
|
|
with mock.patch('helpers.constants.LOGIN_URL',
|
|
return_value=const.LOGIN_URL + 'NO'):
|
|
self.blink.setup_system()
|
|
self.assertEqual(self.blink.region_id, 'rest.piri')
|
|
# pylint: disable=protected-access
|
|
self.assertEqual(self.blink._host, 'rest.piri.' + const.BLINK_URL)
|
|
self.assertEqual(self.blink.urls.base_url, test_urls.base_url)
|
|
self.assertEqual(self.blink.urls.home_url, test_urls.home_url)
|
|
self.assertEqual(self.blink.urls.event_url, test_urls.event_url)
|
|
self.assertEqual(self.blink.urls.network_url, test_urls.network_url)
|
|
self.assertEqual(self.blink.urls.networks_url, test_urls.networks_url)
|