107 lines
3.4 KiB
Python
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)
|