* Support TekSavvy Unlimited Plans Support TekSavvy account usage for unlimited plans. Seeing cap limit to 0 will now provide unlimited behaviour on usage calculations. * Add unit tests to sensor.teksavvy Add coverage unit tests to TekSavvy Sensor component, none existing previously.
185 lines
6.9 KiB
Python
185 lines
6.9 KiB
Python
"""Tests for the TekSavvy sensor platform."""
|
|
import asyncio
|
|
from homeassistant.bootstrap import async_setup_component
|
|
from homeassistant.components.sensor.teksavvy import TekSavvyData
|
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
|
|
|
|
|
@asyncio.coroutine
|
|
def test_capped_setup(hass, aioclient_mock):
|
|
"""Test the default setup."""
|
|
config = {'platform': 'teksavvy',
|
|
'api_key': 'NOTAKEY',
|
|
'total_bandwidth': 400,
|
|
'monitored_variables': [
|
|
'usage',
|
|
'usage_gb',
|
|
'limit',
|
|
'onpeak_download',
|
|
'onpeak_upload',
|
|
'onpeak_total',
|
|
'offpeak_download',
|
|
'offpeak_upload',
|
|
'offpeak_total',
|
|
'onpeak_remaining']}
|
|
|
|
result = '{"odata.metadata":"http://api.teksavvy.com/web/Usage/$metadata'\
|
|
'#UsageSummaryRecords","value":[{'\
|
|
'"StartDate":"2018-01-01T00:00:00",'\
|
|
'"EndDate":"2018-01-31T00:00:00",'\
|
|
'"OID":"999999","IsCurrent":true,'\
|
|
'"OnPeakDownload":226.75,'\
|
|
'"OnPeakUpload":8.82,'\
|
|
'"OffPeakDownload":36.24,"OffPeakUpload":1.58'\
|
|
'}]}'
|
|
aioclient_mock.get("https://api.teksavvy.com/"
|
|
"web/Usage/UsageSummaryRecords?"
|
|
"$filter=IsCurrent%20eq%20true",
|
|
text=result)
|
|
|
|
yield from async_setup_component(hass, 'sensor', {'sensor': config})
|
|
|
|
state = hass.states.get('sensor.teksavvy_data_limit')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '400'
|
|
|
|
state = hass.states.get('sensor.teksavvy_off_peak_download')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '36.24'
|
|
|
|
state = hass.states.get('sensor.teksavvy_off_peak_upload')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '1.58'
|
|
|
|
state = hass.states.get('sensor.teksavvy_off_peak_total')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '37.82'
|
|
|
|
state = hass.states.get('sensor.teksavvy_on_peak_download')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '226.75'
|
|
|
|
state = hass.states.get('sensor.teksavvy_on_peak_upload')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '8.82'
|
|
|
|
state = hass.states.get('sensor.teksavvy_on_peak_total')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '235.57'
|
|
|
|
state = hass.states.get('sensor.teksavvy_usage_ratio')
|
|
assert state.attributes.get('unit_of_measurement') == '%'
|
|
assert state.state == '56.69'
|
|
|
|
state = hass.states.get('sensor.teksavvy_usage')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '226.75'
|
|
|
|
state = hass.states.get('sensor.teksavvy_remaining')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '173.25'
|
|
|
|
|
|
@asyncio.coroutine
|
|
def test_unlimited_setup(hass, aioclient_mock):
|
|
"""Test the default setup."""
|
|
config = {'platform': 'teksavvy',
|
|
'api_key': 'NOTAKEY',
|
|
'total_bandwidth': 0,
|
|
'monitored_variables': [
|
|
'usage',
|
|
'usage_gb',
|
|
'limit',
|
|
'onpeak_download',
|
|
'onpeak_upload',
|
|
'onpeak_total',
|
|
'offpeak_download',
|
|
'offpeak_upload',
|
|
'offpeak_total',
|
|
'onpeak_remaining']}
|
|
|
|
result = '{"odata.metadata":"http://api.teksavvy.com/web/Usage/$metadata'\
|
|
'#UsageSummaryRecords","value":[{'\
|
|
'"StartDate":"2018-01-01T00:00:00",'\
|
|
'"EndDate":"2018-01-31T00:00:00",'\
|
|
'"OID":"999999","IsCurrent":true,'\
|
|
'"OnPeakDownload":226.75,'\
|
|
'"OnPeakUpload":8.82,'\
|
|
'"OffPeakDownload":36.24,"OffPeakUpload":1.58'\
|
|
'}]}'
|
|
aioclient_mock.get("https://api.teksavvy.com/"
|
|
"web/Usage/UsageSummaryRecords?"
|
|
"$filter=IsCurrent%20eq%20true",
|
|
text=result)
|
|
|
|
yield from async_setup_component(hass, 'sensor', {'sensor': config})
|
|
|
|
state = hass.states.get('sensor.teksavvy_data_limit')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == 'inf'
|
|
|
|
state = hass.states.get('sensor.teksavvy_off_peak_download')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '36.24'
|
|
|
|
state = hass.states.get('sensor.teksavvy_off_peak_upload')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '1.58'
|
|
|
|
state = hass.states.get('sensor.teksavvy_off_peak_total')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '37.82'
|
|
|
|
state = hass.states.get('sensor.teksavvy_on_peak_download')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '226.75'
|
|
|
|
state = hass.states.get('sensor.teksavvy_on_peak_upload')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '8.82'
|
|
|
|
state = hass.states.get('sensor.teksavvy_on_peak_total')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '235.57'
|
|
|
|
state = hass.states.get('sensor.teksavvy_usage')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == '226.75'
|
|
|
|
state = hass.states.get('sensor.teksavvy_usage_ratio')
|
|
assert state.attributes.get('unit_of_measurement') == '%'
|
|
assert state.state == '0'
|
|
|
|
state = hass.states.get('sensor.teksavvy_remaining')
|
|
assert state.attributes.get('unit_of_measurement') == 'GB'
|
|
assert state.state == 'inf'
|
|
|
|
|
|
@asyncio.coroutine
|
|
def test_bad_return_code(hass, aioclient_mock):
|
|
"""Test handling a return code that isn't HTTP OK."""
|
|
aioclient_mock.get("https://api.teksavvy.com/"
|
|
"web/Usage/UsageSummaryRecords?"
|
|
"$filter=IsCurrent%20eq%20true",
|
|
status=404)
|
|
|
|
tsd = TekSavvyData(hass.loop, async_get_clientsession(hass),
|
|
'notakey', 400)
|
|
|
|
result = yield from tsd.async_update()
|
|
assert result is False
|
|
|
|
|
|
@asyncio.coroutine
|
|
def test_bad_json_decode(hass, aioclient_mock):
|
|
"""Test decoding invalid json result."""
|
|
aioclient_mock.get("https://api.teksavvy.com/"
|
|
"web/Usage/UsageSummaryRecords?"
|
|
"$filter=IsCurrent%20eq%20true",
|
|
text='this is not json')
|
|
|
|
tsd = TekSavvyData(hass.loop, async_get_clientsession(hass),
|
|
'notakey', 400)
|
|
|
|
result = yield from tsd.async_update()
|
|
assert result is False
|