Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add pytest and coverage #68

Merged
merged 19 commits into from Mar 25, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Expand Up @@ -106,3 +106,6 @@ venv.bak/
# macOS files
._*
.DS_Store

# VS Code
.vscode/
6 changes: 2 additions & 4 deletions Makefile
Expand Up @@ -3,8 +3,7 @@
black:
pipenv run black teslajsonpy
coverage:
#Not implemented yet
#pipenv run py.test -s --verbose --cov-report term-missing --cov-report xml --cov=teslajsonpy tests
pipenv run pytest -s --verbose --cov-report term-missing --cov-report xml --cov=teslajsonpy tests
clean:
rm -rf dist/ build/ .egg teslajsonpy.egg-info/
init:
Expand All @@ -23,7 +22,6 @@ publish:
pipenv run twine upload dist/*
rm -rf dist/ build/ .egg teslajsonpy.egg-info/
test:
#Not implemented yet
#pipenv run py.test
pipenv run pytest
typing:
pipenv run mypy --ignore-missing-imports teslajsonpy
2 changes: 2 additions & 0 deletions Pipfile
Expand Up @@ -8,6 +8,8 @@ detox = "*"
mypy = "*"
pydocstyle = "*"
pylint = "*"
pytest = "*"
pytest-asyncio = "*"
pytest-cov = "*"
tox = "*"
twine = "*"
Expand Down
23 changes: 12 additions & 11 deletions teslajsonpy/sentry_mode.py
Expand Up @@ -31,34 +31,35 @@ def __init__(self, data, controller):
"""
super().__init__(data, controller)
self.__manual_update_time = 0
self.__sentry_mode_available = False
self.__sentry_mode = False
self.type = "sentry mode switch"
self.hass_type = "switch"
self.name = self._name()
self.uniq_name = self._uniq_name()
self.__sentry_mode = (
self.sentry_mode_available
and "vehicle_state" in data
and "sentry_mode" in data["vehicle_state"]
and data["vehicle_state"]["sentry_mode"]
)

async def async_update(self, wake_if_asleep=False):
"""Update the sentry mode of the vehicle."""
await super().async_update(wake_if_asleep=wake_if_asleep)
last_update = self._controller.get_last_update_time(self._id)
if last_update >= self.__manual_update_time:
data = self._controller.get_state_params(self._id)
if data and "sentry_mode_available" in data:
self.__sentry_mode_available = data["sentry_mode_available"]
if self.__sentry_mode_available and "sentry_mode" in data:
self.__sentry_mode = data["sentry_mode"]
if self.sentry_mode_available and "sentry_mode" in data:
self.__sentry_mode = data["sentry_mode"]
else:
self.__sentry_mode_available = False
self.__sentry_mode = False

def available(self):
"""Return whether the sentry mode is available."""
return self.__sentry_mode_available
return self.sentry_mode_available

def is_on(self):
"""Return whether the sentry mode is enabled, always False if sentry mode is not available."""
return self.__sentry_mode_available and self.__sentry_mode
return self.sentry_mode_available and self.__sentry_mode

@staticmethod
def has_battery():
Expand All @@ -67,7 +68,7 @@ def has_battery():

async def enable_sentry_mode(self):
"""Enable the sentry mode."""
if self.__sentry_mode_available and not self.__sentry_mode:
if self.sentry_mode_available and not self.__sentry_mode:
data = await self._controller.command(
self._id, "set_sentry_mode", {"on": True}, wake_if_asleep=True
)
Expand All @@ -77,7 +78,7 @@ async def enable_sentry_mode(self):

async def disable_sentry_mode(self):
"""Disable the sentry mode."""
if self.__sentry_mode_available and self.__sentry_mode:
if self.sentry_mode_available and self.__sentry_mode:
data = await self._controller.command(
self._id, "set_sentry_mode", {"on": False}, wake_if_asleep=True
)
Expand Down
6 changes: 5 additions & 1 deletion teslajsonpy/vehicle.py
Expand Up @@ -40,7 +40,11 @@ def __init__(self, data, controller):
self._state = data["state"]
self._car_type = f"Model {str(self._vin[3]).upper()}"
self._car_version = ""
self._sentry_mode_available = False
self._sentry_mode_available = (
"vehicle_state" in data
and "sentry_mode_available" in data["vehicle_state"]
and data["vehicle_state"]["sentry_mode_available"]
)
self._controller = controller
self.should_poll = True
self.type = "device"
Expand Down
7 changes: 7 additions & 0 deletions tests/__init__.py
@@ -0,0 +1,7 @@
# SPDX-License-Identifier: Apache-2.0
"""
Python Package for controlling Tesla API.

For more details about this api, please refer to the documentation at
https://github.com/zabuldon/teslajsonpy
"""