mirror of
https://github.com/home-assistant/core.git
synced 2025-07-13 08:17:08 +00:00
Fix issue when timestamp is None (#130133)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
This commit is contained in:
parent
14285973b8
commit
c4762f3ff4
@ -1,8 +1,8 @@
|
|||||||
"""Services for the seventeentrack integration."""
|
"""Services for the seventeentrack integration."""
|
||||||
|
|
||||||
from typing import Final
|
from typing import Any, Final
|
||||||
|
|
||||||
from pyseventeentrack.package import PACKAGE_STATUS_MAP
|
from pyseventeentrack.package import PACKAGE_STATUS_MAP, Package
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry, ConfigEntryState
|
from homeassistant.config_entries import ConfigEntry, ConfigEntryState
|
||||||
@ -81,18 +81,7 @@ def setup_services(hass: HomeAssistant) -> None:
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
package_to_dict(package)
|
||||||
ATTR_DESTINATION_COUNTRY: package.destination_country,
|
|
||||||
ATTR_ORIGIN_COUNTRY: package.origin_country,
|
|
||||||
ATTR_PACKAGE_TYPE: package.package_type,
|
|
||||||
ATTR_TRACKING_INFO_LANGUAGE: package.tracking_info_language,
|
|
||||||
ATTR_TRACKING_NUMBER: package.tracking_number,
|
|
||||||
ATTR_LOCATION: package.location,
|
|
||||||
ATTR_STATUS: package.status,
|
|
||||||
ATTR_TIMESTAMP: package.timestamp.isoformat(),
|
|
||||||
ATTR_INFO_TEXT: package.info_text,
|
|
||||||
ATTR_FRIENDLY_NAME: package.friendly_name,
|
|
||||||
}
|
|
||||||
for package in live_packages
|
for package in live_packages
|
||||||
if slugify(package.status) in package_states or package_states == []
|
if slugify(package.status) in package_states or package_states == []
|
||||||
]
|
]
|
||||||
@ -110,6 +99,22 @@ def setup_services(hass: HomeAssistant) -> None:
|
|||||||
|
|
||||||
await seventeen_coordinator.client.profile.archive_package(tracking_number)
|
await seventeen_coordinator.client.profile.archive_package(tracking_number)
|
||||||
|
|
||||||
|
def package_to_dict(package: Package) -> dict[str, Any]:
|
||||||
|
result = {
|
||||||
|
ATTR_DESTINATION_COUNTRY: package.destination_country,
|
||||||
|
ATTR_ORIGIN_COUNTRY: package.origin_country,
|
||||||
|
ATTR_PACKAGE_TYPE: package.package_type,
|
||||||
|
ATTR_TRACKING_INFO_LANGUAGE: package.tracking_info_language,
|
||||||
|
ATTR_TRACKING_NUMBER: package.tracking_number,
|
||||||
|
ATTR_LOCATION: package.location,
|
||||||
|
ATTR_STATUS: package.status,
|
||||||
|
ATTR_INFO_TEXT: package.info_text,
|
||||||
|
ATTR_FRIENDLY_NAME: package.friendly_name,
|
||||||
|
}
|
||||||
|
if timestamp := package.timestamp:
|
||||||
|
result[ATTR_TIMESTAMP] = timestamp.isoformat()
|
||||||
|
return result
|
||||||
|
|
||||||
async def _validate_service(config_entry_id):
|
async def _validate_service(config_entry_id):
|
||||||
entry: ConfigEntry | None = hass.config_entries.async_get_entry(config_entry_id)
|
entry: ConfigEntry | None = hass.config_entries.async_get_entry(config_entry_id)
|
||||||
if not entry:
|
if not entry:
|
||||||
|
@ -71,3 +71,32 @@
|
|||||||
]),
|
]),
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
|
# name: test_packages_with_none_timestamp
|
||||||
|
dict({
|
||||||
|
'packages': list([
|
||||||
|
dict({
|
||||||
|
'destination_country': 'Belgium',
|
||||||
|
'friendly_name': 'friendly name 1',
|
||||||
|
'info_text': 'info text 1',
|
||||||
|
'location': 'location 1',
|
||||||
|
'origin_country': 'Belgium',
|
||||||
|
'package_type': 'Registered Parcel',
|
||||||
|
'status': 'In Transit',
|
||||||
|
'tracking_info_language': 'Unknown',
|
||||||
|
'tracking_number': '456',
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'destination_country': 'Belgium',
|
||||||
|
'friendly_name': 'friendly name 2',
|
||||||
|
'info_text': 'info text 1',
|
||||||
|
'location': 'location 1',
|
||||||
|
'origin_country': 'Belgium',
|
||||||
|
'package_type': 'Registered Parcel',
|
||||||
|
'status': 'Delivered',
|
||||||
|
'timestamp': '2020-08-10T10:32:00+00:00',
|
||||||
|
'tracking_info_language': 'Unknown',
|
||||||
|
'tracking_number': '789',
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
})
|
||||||
|
# ---
|
||||||
|
@ -150,6 +150,28 @@ async def test_archive_package(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_packages_with_none_timestamp(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
mock_seventeentrack: AsyncMock,
|
||||||
|
mock_config_entry: MockConfigEntry,
|
||||||
|
snapshot: SnapshotAssertion,
|
||||||
|
) -> None:
|
||||||
|
"""Ensure service returns all packages when non provided."""
|
||||||
|
await _mock_invalid_packages(mock_seventeentrack)
|
||||||
|
await init_integration(hass, mock_config_entry)
|
||||||
|
service_response = await hass.services.async_call(
|
||||||
|
DOMAIN,
|
||||||
|
SERVICE_GET_PACKAGES,
|
||||||
|
{
|
||||||
|
CONFIG_ENTRY_ID_KEY: mock_config_entry.entry_id,
|
||||||
|
},
|
||||||
|
blocking=True,
|
||||||
|
return_response=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert service_response == snapshot
|
||||||
|
|
||||||
|
|
||||||
async def _mock_packages(mock_seventeentrack):
|
async def _mock_packages(mock_seventeentrack):
|
||||||
package1 = get_package(status=10)
|
package1 = get_package(status=10)
|
||||||
package2 = get_package(
|
package2 = get_package(
|
||||||
@ -167,3 +189,19 @@ async def _mock_packages(mock_seventeentrack):
|
|||||||
package2,
|
package2,
|
||||||
package3,
|
package3,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
async def _mock_invalid_packages(mock_seventeentrack):
|
||||||
|
package1 = get_package(
|
||||||
|
status=10,
|
||||||
|
timestamp=None,
|
||||||
|
)
|
||||||
|
package2 = get_package(
|
||||||
|
tracking_number="789",
|
||||||
|
friendly_name="friendly name 2",
|
||||||
|
status=40,
|
||||||
|
)
|
||||||
|
mock_seventeentrack.return_value.profile.packages.return_value = [
|
||||||
|
package1,
|
||||||
|
package2,
|
||||||
|
]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user