Skip to content

Commit

Permalink
test: add pytest and coverage (#68)
Browse files Browse the repository at this point in the history
* initialize pytest framework

* Fix initialization of _sentry_mode_available flag

* fix initialization of sentry_mode flag

remove sentry_mode_available flag to use the property from vehicle

* add tests for sentry mode

add a mock for Tesla server communications

* add .vscode to .gitignore

* add async tests for sentry mode switch

* add unit tests for gps and odometer

* increase gps test coverage

* add unit tests for battery and range sensors

* fix test name in documentation

* add unit tests for binary sensors

* add unit tests for charger switches and sensors

* rename test files

* refactor variable names

* add unit tests for climate and temp sensor

* add unit tests for door lock and charge lock

* add unit tests for vehicle device

* increase test coverage for sensors

* add unit tests for tesla exception

closes #26
  • Loading branch information
hobbe committed Mar 25, 2020
1 parent 2be197d commit a0cf7e1
Show file tree
Hide file tree
Showing 26 changed files with 2,727 additions and 16 deletions.
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
"""

0 comments on commit a0cf7e1

Please sign in to comment.