mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
Apply all todoist custom project filters for calendar events (#117454)
Co-authored-by: Robert Resch <robert@resch.dev>
This commit is contained in:
parent
bcd1243686
commit
f934fea754
@ -436,7 +436,7 @@ class TodoistProjectData:
|
|||||||
|
|
||||||
self._coordinator = coordinator
|
self._coordinator = coordinator
|
||||||
self._name = project_data[CONF_NAME]
|
self._name = project_data[CONF_NAME]
|
||||||
# If no ID is defined, fetch all tasks.
|
# If no ID is defined, this is a custom project.
|
||||||
self._id = project_data.get(CONF_ID)
|
self._id = project_data.get(CONF_ID)
|
||||||
|
|
||||||
# All labels the user has defined, for easy lookup.
|
# All labels the user has defined, for easy lookup.
|
||||||
@ -497,6 +497,13 @@ class TodoistProjectData:
|
|||||||
SUMMARY: data.content,
|
SUMMARY: data.content,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
self._project_id_whitelist
|
||||||
|
and data.project_id not in self._project_id_whitelist
|
||||||
|
):
|
||||||
|
# Project isn't in `include_projects` filter.
|
||||||
|
return None
|
||||||
|
|
||||||
# All task Labels (optional parameter).
|
# All task Labels (optional parameter).
|
||||||
task[LABELS] = [
|
task[LABELS] = [
|
||||||
label.name for label in self._labels if label.name in data.labels
|
label.name for label in self._labels if label.name in data.labels
|
||||||
@ -625,10 +632,7 @@ class TodoistProjectData:
|
|||||||
tasks = self._coordinator.data
|
tasks = self._coordinator.data
|
||||||
if self._id is None:
|
if self._id is None:
|
||||||
project_task_data = [
|
project_task_data = [
|
||||||
task
|
task for task in tasks if self.create_todoist_task(task) is not None
|
||||||
for task in tasks
|
|
||||||
if not self._project_id_whitelist
|
|
||||||
or task.project_id in self._project_id_whitelist
|
|
||||||
]
|
]
|
||||||
else:
|
else:
|
||||||
project_task_data = [task for task in tasks if task.project_id == self._id]
|
project_task_data = [task for task in tasks if task.project_id == self._id]
|
||||||
|
@ -366,6 +366,73 @@ async def test_task_due_datetime(
|
|||||||
assert await response.json() == []
|
assert await response.json() == []
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("todoist_config", "due", "start", "end", "expected_response"),
|
||||||
|
[
|
||||||
|
(
|
||||||
|
{"custom_projects": [{"name": "Test", "labels": ["Label1"]}]},
|
||||||
|
Due(date="2023-03-30", is_recurring=False, string="Mar 30"),
|
||||||
|
"2023-03-28T00:00:00.000Z",
|
||||||
|
"2023-04-01T00:00:00.000Z",
|
||||||
|
[get_events_response({"date": "2023-03-30"}, {"date": "2023-03-31"})],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{"custom_projects": [{"name": "Test", "labels": ["custom"]}]},
|
||||||
|
Due(date="2023-03-30", is_recurring=False, string="Mar 30"),
|
||||||
|
"2023-03-28T00:00:00.000Z",
|
||||||
|
"2023-04-01T00:00:00.000Z",
|
||||||
|
[],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{"custom_projects": [{"name": "Test", "include_projects": ["Name"]}]},
|
||||||
|
Due(date="2023-03-30", is_recurring=False, string="Mar 30"),
|
||||||
|
"2023-03-28T00:00:00.000Z",
|
||||||
|
"2023-04-01T00:00:00.000Z",
|
||||||
|
[get_events_response({"date": "2023-03-30"}, {"date": "2023-03-31"})],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{"custom_projects": [{"name": "Test", "due_date_days": 1}]},
|
||||||
|
Due(date="2023-03-30", is_recurring=False, string="Mar 30"),
|
||||||
|
"2023-03-28T00:00:00.000Z",
|
||||||
|
"2023-04-01T00:00:00.000Z",
|
||||||
|
[get_events_response({"date": "2023-03-30"}, {"date": "2023-03-31"})],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{"custom_projects": [{"name": "Test", "due_date_days": 1}]},
|
||||||
|
Due(
|
||||||
|
date=(dt_util.now() + timedelta(days=2)).strftime("%Y-%m-%d"),
|
||||||
|
is_recurring=False,
|
||||||
|
string="Mar 30",
|
||||||
|
),
|
||||||
|
dt_util.now().isoformat(),
|
||||||
|
(dt_util.now() + timedelta(days=5)).isoformat(),
|
||||||
|
[],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
ids=[
|
||||||
|
"in_labels_whitelist",
|
||||||
|
"not_in_labels_whitelist",
|
||||||
|
"in_include_projects",
|
||||||
|
"in_due_date_days",
|
||||||
|
"not_in_due_date_days",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
async def test_events_filtered_for_custom_projects(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
hass_client: ClientSessionGenerator,
|
||||||
|
start: str,
|
||||||
|
end: str,
|
||||||
|
expected_response: dict[str, Any],
|
||||||
|
) -> None:
|
||||||
|
"""Test we filter out tasks from custom projects based on their config."""
|
||||||
|
client = await hass_client()
|
||||||
|
response = await client.get(
|
||||||
|
get_events_url("calendar.test", start, end),
|
||||||
|
)
|
||||||
|
assert response.status == HTTPStatus.OK
|
||||||
|
assert await response.json() == expected_response
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("due", "setup_platform"),
|
("due", "setup_platform"),
|
||||||
[
|
[
|
||||||
|
Loading…
x
Reference in New Issue
Block a user