mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-23 11:43:34 +00:00
6a86ffbbba
This will catch common issues with pytest code. * Use `match` when using `pytest.raises()` for base exception types like `TypeError` or `ValueError` * Use tuples for `parametrize()` * Enforces `pytest.raises()` to contain simple statements, using `noqa` to skip this on some cases for now. * Fixes incorrect exception type (valueerror instead of typeerror) for iotdimmer. * Adds check valid types for `iotbulb.set_hsv` and `color` smart module. * Consolidate exception messages for common interface modules.
87 lines
2.3 KiB
Python
87 lines
2.3 KiB
Python
import datetime
|
|
from unittest.mock import Mock
|
|
|
|
from kasa.iot.modules import Usage
|
|
|
|
|
|
def test_usage_convert_stat_data():
|
|
usage = Usage(None, module="usage")
|
|
|
|
test_data = []
|
|
assert usage._convert_stat_data(test_data, "day") == {}
|
|
|
|
test_data = [
|
|
{"year": 2016, "month": 5, "day": 2, "time": 20},
|
|
{"year": 2016, "month": 5, "day": 4, "time": 30},
|
|
]
|
|
d = usage._convert_stat_data(test_data, "day")
|
|
assert len(d) == len(test_data)
|
|
assert isinstance(d, dict)
|
|
k, v = d.popitem()
|
|
assert isinstance(k, int)
|
|
assert isinstance(v, int)
|
|
assert k == 4
|
|
assert v == 30
|
|
|
|
|
|
def test_usage_today():
|
|
"""Test fetching the usage for today.
|
|
|
|
This test uses inline data since the fixtures
|
|
will not have data for the current day.
|
|
"""
|
|
emeter_data = {
|
|
"get_daystat": {
|
|
"day_list": [],
|
|
"err_code": 0,
|
|
}
|
|
}
|
|
|
|
class MockUsage(Usage):
|
|
@property
|
|
def data(self):
|
|
return emeter_data
|
|
|
|
usage = MockUsage(Mock(), "usage")
|
|
assert usage.usage_today is None
|
|
now = datetime.datetime.now()
|
|
emeter_data["get_daystat"]["day_list"].extend(
|
|
[
|
|
{"day": now.day - 1, "time": 200, "month": now.month - 1, "year": now.year},
|
|
{"day": now.day, "time": 500, "month": now.month, "year": now.year},
|
|
{"day": now.day + 1, "time": 100, "month": now.month + 1, "year": now.year},
|
|
]
|
|
)
|
|
assert usage.usage_today == 500
|
|
|
|
|
|
def test_usage_this_month():
|
|
"""Test fetching the usage for this month.
|
|
|
|
This test uses inline data since the fixtures
|
|
will not have data for the current month.
|
|
"""
|
|
emeter_data = {
|
|
"get_monthstat": {
|
|
"month_list": [],
|
|
"err_code": 0,
|
|
}
|
|
}
|
|
|
|
class MockUsage(Usage):
|
|
@property
|
|
def data(self):
|
|
return emeter_data
|
|
|
|
usage = MockUsage(Mock(), "usage")
|
|
assert usage.usage_this_month is None
|
|
now = datetime.datetime.now()
|
|
emeter_data["get_monthstat"]["month_list"].extend(
|
|
[
|
|
{"time": 200, "month": now.month - 1, "year": now.year},
|
|
{"time": 500, "month": now.month, "year": now.year},
|
|
{"time": 100, "month": now.month + 1, "year": now.year},
|
|
]
|
|
)
|
|
assert usage.usage_this_month == 500
|