Ps4 reformat media data (#25172)

* Reformat saved media data/ fix load + save helpers

* Add url constant

* Reformat saved media data

* Add tests for media data

* Refactor

* Revert deleted lines

* Set attrs after checking for lock

* Patch load games.

* remove unneeded imports

* fix tests

* Correct condition

* Handle errors with loading games

* Correct condition

* Fix select source

* add test

* Remove unneeded vars

* line break

* cleanup loading json

* remove test

* move check for dict

* Set games to {}
This commit is contained in:
ktnrg45 2019-07-19 22:36:45 -07:00 committed by Martin Hjelmare
parent 693fa15924
commit 48540fc21e
4 changed files with 200 additions and 24 deletions

View file

@ -1,14 +1,17 @@
"""Tests for the PS4 Integration."""
from unittest.mock import patch
from unittest.mock import MagicMock, patch
from homeassistant import config_entries, data_entry_flow
from homeassistant.components import ps4
from homeassistant.components.media_player.const import (
ATTR_MEDIA_CONTENT_TYPE, ATTR_MEDIA_TITLE, MEDIA_TYPE_GAME)
from homeassistant.components.ps4.const import (
COMMANDS, CONFIG_ENTRY_VERSION as VERSION,
ATTR_MEDIA_IMAGE_URL, COMMANDS, CONFIG_ENTRY_VERSION as VERSION,
DEFAULT_REGION, DOMAIN, PS4_DATA)
from homeassistant.const import (
ATTR_COMMAND, ATTR_ENTITY_ID, CONF_HOST,
ATTR_COMMAND, ATTR_ENTITY_ID, ATTR_LOCKED, CONF_HOST,
CONF_NAME, CONF_REGION, CONF_TOKEN)
from homeassistant.exceptions import HomeAssistantError
from homeassistant.util import location
from homeassistant.setup import async_setup_component
from tests.common import (MockConfigEntry, mock_coro, mock_registry)
@ -63,6 +66,29 @@ MOCK_ENTRY_VERSION_1 = MockConfigEntry(
MOCK_UNIQUE_ID = 'someuniqueid'
MOCK_ID = 'CUSA00123'
MOCK_URL = 'http://someurl.jpeg'
MOCK_TITLE = 'Some Title'
MOCK_TYPE = MEDIA_TYPE_GAME
MOCK_GAMES_DATA_OLD_STR_FORMAT = {'mock_id': 'mock_title',
'mock_id2': 'mock_title2'}
MOCK_GAMES_DATA = {
ATTR_LOCKED: False,
ATTR_MEDIA_CONTENT_TYPE: MEDIA_TYPE_GAME,
ATTR_MEDIA_IMAGE_URL: MOCK_URL,
ATTR_MEDIA_TITLE: MOCK_TITLE}
MOCK_GAMES_DATA_LOCKED = {
ATTR_LOCKED: True,
ATTR_MEDIA_CONTENT_TYPE: MEDIA_TYPE_GAME,
ATTR_MEDIA_IMAGE_URL: MOCK_URL,
ATTR_MEDIA_TITLE: MOCK_TITLE}
MOCK_GAMES = {MOCK_ID: MOCK_GAMES_DATA}
MOCK_GAMES_LOCKED = {MOCK_ID: MOCK_GAMES_DATA_LOCKED}
async def test_ps4_integration_setup(hass):
"""Test PS4 integration is setup."""
@ -147,6 +173,80 @@ async def setup_mock_component(hass):
await hass.async_block_till_done()
def test_games_reformat_to_dict(hass):
"""Test old data format is converted to new format."""
with patch('homeassistant.components.ps4.load_json',
return_value=MOCK_GAMES_DATA_OLD_STR_FORMAT),\
patch('homeassistant.components.ps4.save_json',
side_effect=MagicMock()),\
patch('os.path.isfile', return_value=True):
mock_games = ps4.load_games(hass)
# New format is a nested dict.
assert isinstance(mock_games, dict)
assert mock_games['mock_id'][ATTR_MEDIA_TITLE] == 'mock_title'
assert mock_games['mock_id2'][ATTR_MEDIA_TITLE] == 'mock_title2'
for mock_game in mock_games:
mock_data = mock_games[mock_game]
assert isinstance(mock_data, dict)
assert mock_data
assert mock_data[ATTR_MEDIA_IMAGE_URL] is None
assert mock_data[ATTR_LOCKED] is False
assert mock_data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_GAME
def test_load_games(hass):
"""Test that games are loaded correctly."""
with patch('homeassistant.components.ps4.load_json',
return_value=MOCK_GAMES),\
patch('homeassistant.components.ps4.save_json',
side_effect=MagicMock()),\
patch('os.path.isfile', return_value=True):
mock_games = ps4.load_games(hass)
assert isinstance(mock_games, dict)
mock_data = mock_games[MOCK_ID]
assert isinstance(mock_data, dict)
assert mock_data[ATTR_MEDIA_TITLE] == MOCK_TITLE
assert mock_data[ATTR_MEDIA_IMAGE_URL] == MOCK_URL
assert mock_data[ATTR_LOCKED] is False
assert mock_data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_GAME
def test_loading_games_returns_dict(hass):
"""Test that loading games always returns a dict."""
with patch('homeassistant.components.ps4.load_json',
side_effect=HomeAssistantError),\
patch('homeassistant.components.ps4.save_json',
side_effect=MagicMock()),\
patch('os.path.isfile', return_value=True):
mock_games = ps4.load_games(hass)
assert isinstance(mock_games, dict)
assert not mock_games
with patch('homeassistant.components.ps4.load_json',
return_value='Some String'),\
patch('homeassistant.components.ps4.save_json',
side_effect=MagicMock()),\
patch('os.path.isfile', return_value=True):
mock_games = ps4.load_games(hass)
assert isinstance(mock_games, dict)
assert not mock_games
with patch('homeassistant.components.ps4.load_json',
return_value=[]),\
patch('homeassistant.components.ps4.save_json',
side_effect=MagicMock()),\
patch('os.path.isfile', return_value=True):
mock_games = ps4.load_games(hass)
assert isinstance(mock_games, dict)
assert not mock_games
async def test_send_command(hass):
"""Test send_command service."""
await setup_mock_component(hass)