101 lines
3.5 KiB
Python
101 lines
3.5 KiB
Python
from typing import Callable
|
|
|
|
import pytest
|
|
|
|
from ytdl_sub.config.overrides import Overrides
|
|
from ytdl_sub.entries.entry import Entry
|
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES as v
|
|
from ytdl_sub.entries.script.variable_scripts import ENTRY_INJECTED_VARIABLES
|
|
from ytdl_sub.entries.script.variable_scripts import ENTRY_RELATIVE_VARIABLES
|
|
from ytdl_sub.entries.script.variable_scripts import UNRESOLVED_VARIABLES
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_overrides_factory() -> Callable[[Entry], Overrides]:
|
|
def _mock_overrides_factory(entry: Entry) -> Overrides:
|
|
overrides = Overrides(name="test", value={})
|
|
overrides.initialize_script(unresolved_variables=set())
|
|
|
|
overrides.add(
|
|
{
|
|
var.variable_name: format_string
|
|
for var, format_string in (
|
|
list(ENTRY_INJECTED_VARIABLES.items()) + list(ENTRY_RELATIVE_VARIABLES.items())
|
|
)
|
|
}
|
|
)
|
|
|
|
overrides.add_entry_kwargs(entry._kwargs)
|
|
return overrides
|
|
|
|
return _mock_overrides_factory
|
|
|
|
|
|
class TestEntry(object):
|
|
def test_entry_to_dict(self, mock_overrides_factory, mock_entry, mock_entry_to_dict):
|
|
out = mock_overrides_factory(mock_entry).to_dict()
|
|
assert out == mock_entry_to_dict
|
|
|
|
def test_entry_missing_kwarg(self, mock_entry):
|
|
key = "dne"
|
|
expected_error_msg = f"Expected '{key}' in Entry but does not exist."
|
|
|
|
assert mock_entry.kwargs_contains(key) is False
|
|
with pytest.raises(KeyError, match=expected_error_msg):
|
|
mock_entry.kwargs(key)
|
|
|
|
@pytest.mark.parametrize(
|
|
"upload_date, year_rev, month_rev, day_rev, month_rev_pad, day_rev_pad",
|
|
[
|
|
("20000228", 100, 11, 2, "11", "02"),
|
|
("20200808", 80, 5, 24, "05", "24"),
|
|
],
|
|
)
|
|
def test_entry_reverse_variables(
|
|
self,
|
|
mock_overrides_factory,
|
|
mock_entry_kwargs,
|
|
upload_date,
|
|
year_rev,
|
|
month_rev,
|
|
day_rev,
|
|
month_rev_pad,
|
|
day_rev_pad,
|
|
):
|
|
mock_entry_kwargs["upload_date"] = upload_date
|
|
overrides = mock_overrides_factory(
|
|
Entry(entry_dict=mock_entry_kwargs, working_directory=".")
|
|
)
|
|
|
|
assert overrides.get_int(v.upload_year_truncated_reversed) == year_rev
|
|
assert overrides.get_int(v.upload_month_reversed) == month_rev
|
|
assert overrides.get_int(v.upload_day_reversed) == day_rev
|
|
assert overrides.get_str(v.upload_month_reversed_padded) == month_rev_pad
|
|
assert overrides.get_str(v.upload_day_reversed_padded) == day_rev_pad
|
|
|
|
@pytest.mark.parametrize(
|
|
"upload_date, day_year, day_year_rev, day_year_pad, day_year_rev_pad",
|
|
[
|
|
("20000228", 59, 308, "059", "308"),
|
|
("20210808", 220, 146, "220", "146"),
|
|
],
|
|
)
|
|
def test_entry_upload_day_of_year_variables(
|
|
self,
|
|
mock_overrides_factory,
|
|
mock_entry_kwargs,
|
|
upload_date,
|
|
day_year,
|
|
day_year_rev,
|
|
day_year_pad,
|
|
day_year_rev_pad,
|
|
):
|
|
mock_entry_kwargs["upload_date"] = upload_date
|
|
overrides = mock_overrides_factory(
|
|
Entry(entry_dict=mock_entry_kwargs, working_directory=".")
|
|
)
|
|
|
|
assert overrides.get_int(v.upload_day_of_year) == day_year
|
|
assert overrides.get_int(v.upload_day_of_year_reversed) == day_year_rev
|
|
assert overrides.get_str(v.upload_day_of_year_padded) == day_year_pad
|
|
assert overrides.get_str(v.upload_day_of_year_reversed_padded) == day_year_rev_pad
|