ytdl-sub/tests/unit/script/test_script_builder.py
2023-12-13 14:23:32 -08:00

55 lines
2 KiB
Python

import re
import pytest
from ytdl_sub.script.script import Script
from ytdl_sub.script.script import ScriptBuilder
from ytdl_sub.script.types.map import Map
from ytdl_sub.script.types.resolvable import String
from ytdl_sub.script.utils.exceptions import ScriptBuilderMissingDefinitions
from ytdl_sub.script.utils.exceptions import VariableDoesNotExist
class TestScriptBuilder:
def test_partial_update_script(self):
# to be resolved later
entry_map = Map({String("title"): String("the title")})
script = ScriptBuilder(
{
"entry": "{ {} }",
"title": "{%map_get(entry, 'title', '')}",
"resolved_override": "{override} mom",
}
)
assert script.partial_build().resolve(unresolvable={"entry"})
with pytest.raises(
ScriptBuilderMissingDefinitions,
match=re.escape("resolved_override is missing the following definitions: override"),
):
script.build()
script.add({"override": "hi"})
script.add_resolved({"entry": entry_map})
script.build()
# script.resolve(unresolvable={"entry"}, update=True)
# assert script.get("override") == String("hi")
# assert script.get("resolved_override") == String("hi mom")
#
# script.add(
# {
# "new_variable_titlecase": "{%titlecase(new_variable_upper)}",
# "new_variable": "{resolved_override} {title}",
# "new_variable_upper": "{%upper(new_variable)}",
# }
# ).resolve(resolved={"entry": entry_map}, update=True)
#
# assert script.get("title") == String("the title")
# assert script.get("new_variable") == String("hi mom the title")
# assert script.get("new_variable_upper") == String("HI MOM THE TITLE")
# assert script.get("new_variable_titlecase") == String("Hi Mom The Title")
# assert script.get("entry") == entry_map