ytdl-sub/tests/unit/plugins/test_date_range.py
Jesse Bannon 57fd6901e4
[DEV] Linter: Use ruff over black and isort (#1445)
Will eventually replace pylint with ruff
2026-03-09 11:39:01 -07:00

107 lines
3.4 KiB
Python

import re
from typing import Any, Dict
import pytest
from conftest import get_match_filters
from ytdl_sub.config.config_file import ConfigFile
from ytdl_sub.subscriptions.subscription import Subscription
from ytdl_sub.utils.exceptions import ValidationException
@pytest.fixture
def preset_dict(output_directory) -> Dict[str, Any]:
return {
"download": "https://your.name.here",
"output_options": {"output_directory": output_directory, "file_name": "will_error.mp4"},
}
class TestDateRange:
@pytest.mark.parametrize("date_range_type", ["upload_date", "release_date"])
def test_date_range_type(
self,
default_config: ConfigFile,
preset_dict: Dict[str, Any],
output_directory: str,
date_range_type: str,
):
preset_dict["date_range"] = {
"before": "20250530",
"after": "20250510",
"type": date_range_type,
}
sub = Subscription.from_dict(
config=default_config,
preset_name="test_date_range",
preset_dict=preset_dict,
)
metadata_filter, metadata_breaking_filter = get_match_filters(
subscription=sub, dry_run=False, download_filters=False
)
assert metadata_filter == [
f"!is_live & !is_upcoming & !post_live & {date_range_type} < 20250530"
]
assert metadata_breaking_filter == [f"{date_range_type} >= 20250510"]
download_filter, download_breaking_filter = get_match_filters(
subscription=sub, dry_run=False, download_filters=True
)
assert not download_filter
assert not download_breaking_filter
def test_date_range_breaks_false(
self,
default_config: ConfigFile,
preset_dict: Dict[str, Any],
output_directory: str,
):
preset_dict["date_range"] = {
"before": "20250530",
"after": "20250510",
"breaks": False,
}
sub = Subscription.from_dict(
config=default_config,
preset_name="test_date_range",
preset_dict=preset_dict,
)
metadata_filter, metadata_breaking_filter = get_match_filters(
subscription=sub, dry_run=False, download_filters=False
)
assert metadata_filter == [
"!is_live & !is_upcoming & !post_live & upload_date < 20250530 & upload_date >= 20250510"
]
assert not metadata_breaking_filter
download_filter, download_breaking_filter = get_match_filters(
subscription=sub, dry_run=False, download_filters=True
)
assert not download_filter
assert not download_breaking_filter
def test_date_range_invalid_type(
self,
default_config: ConfigFile,
preset_dict: Dict[str, Any],
output_directory: str,
):
preset_dict["date_range"] = {
"before": "20250530",
"after": "20250510",
"type": "no",
}
error_msg = (
"Validation error in test_date_range.date_range.type: "
"Must be one of the following values: release_date, upload_date"
)
with pytest.raises(ValidationException, match=re.escape(error_msg)):
Subscription.from_dict(
config=default_config,
preset_name="test_date_range",
preset_dict=preset_dict,
).download(dry_run=False)