debian-todo/tests/test_filter.py
2026-02-01 14:02:53 +00:00

117 lines
3.9 KiB
Python

"""Tests for TODO list filtering functions."""
import pytest
from debian_todo import filter_todo_list, summarize_sources
class TestFilterTodoList:
"""Tests for filter_todo_list function."""
def test_filters_non_upstream_items(self):
todo_list = [
{":shortname": "newupstream_foo", ":details": "1.0.0", ":source": "foo"},
{":shortname": "rc_bug", ":details": "bug info", ":source": "bar"},
{":shortname": "other_type", ":details": "other", ":source": "baz"},
]
result = filter_todo_list(todo_list)
assert len(result) == 1
assert result[0][":source"] == "foo"
def test_filters_prerelease_by_default(self):
todo_list = [
{":shortname": "newupstream_foo", ":details": "1.0.0", ":source": "foo"},
{":shortname": "newupstream_bar", ":details": "2.0.0rc1", ":source": "bar"},
]
result = filter_todo_list(todo_list)
assert len(result) == 1
assert result[0][":source"] == "foo"
def test_includes_prerelease_when_requested(self):
todo_list = [
{":shortname": "newupstream_foo", ":details": "1.0.0", ":source": "foo"},
{":shortname": "newupstream_bar", ":details": "2.0.0rc1", ":source": "bar"},
]
result = filter_todo_list(todo_list, include_prerelease=True)
assert len(result) == 2
def test_filters_matching_versions(self):
# When normalized versions match, the item should be filtered out
todo_list = [
{
":shortname": "newupstream_foo",
":details": "1.0.0 (currently in unstable: 1.0.0-1)",
":source": "foo",
},
]
result = filter_todo_list(todo_list)
assert len(result) == 0
def test_keeps_different_versions(self):
todo_list = [
{
":shortname": "newupstream_foo",
":details": "1.1.0 (currently in unstable: 1.0.0-1)",
":source": "foo",
},
]
result = filter_todo_list(todo_list)
assert len(result) == 1
def test_handles_epoch_in_current(self):
# Epoch should be stripped for comparison
todo_list = [
{
":shortname": "newupstream_foo",
":details": "1.0.0 (currently in unstable: 1:1.0.0-1)",
":source": "foo",
},
]
result = filter_todo_list(todo_list)
assert len(result) == 0
def test_skips_invalid_items(self):
todo_list = [
{":shortname": "newupstream_foo", ":source": "foo"}, # missing :details
{":details": "1.0.0", ":source": "bar"}, # missing :shortname
{":shortname": 123, ":details": "1.0.0", ":source": "baz"}, # wrong type
]
result = filter_todo_list(todo_list)
assert len(result) == 0
def test_empty_list(self):
assert filter_todo_list([]) == []
class TestSummarizeSources:
"""Tests for summarize_sources function."""
def test_extracts_sources(self):
todo_list = [
{":source": "foo", ":shortname": "newupstream_foo"},
{":source": "bar", ":shortname": "newupstream_bar"},
{":source": "baz", ":shortname": "rc_bug"},
]
result = summarize_sources(todo_list)
assert result == {"foo", "bar", "baz"}
def test_deduplicates_sources(self):
todo_list = [
{":source": "foo", ":shortname": "type1"},
{":source": "foo", ":shortname": "type2"},
]
result = summarize_sources(todo_list)
assert result == {"foo"}
def test_skips_non_string_sources(self):
todo_list = [
{":source": "foo"},
{":source": 123},
{":source": None},
{},
]
result = summarize_sources(todo_list)
assert result == {"foo"}
def test_empty_list(self):
assert summarize_sources([]) == set()