diff --git a/python/dotpromptz/tests/dotpromptz/dotprompt_test.py b/python/dotpromptz/tests/dotpromptz/dotprompt_test.py index df38d1681..7867e29db 100644 --- a/python/dotpromptz/tests/dotpromptz/dotprompt_test.py +++ b/python/dotpromptz/tests/dotpromptz/dotprompt_test.py @@ -39,10 +39,12 @@ import pytest from dotpromptz.dotprompt import Dotprompt, _identify_partials -from dotpromptz.typing import ModelConfigT, ParsedPrompt, PromptMetadata, ToolDefinition +from dotpromptz.typing import (ModelConfigT, ParsedPrompt, PromptMetadata, + ToolDefinition, PromptInputConfig, DataArgument) from handlebarrz import HelperFn + @pytest.fixture def mock_handlebars() -> Generator[Mock, None, None]: """Create a mock Handlebars instance.""" @@ -143,6 +145,25 @@ def test_define_tool(mock_handlebars: Mock) -> None: # Ensure chaining works. assert result == dotprompt +class TestCompileRender(IsolatedAsyncioTestCase): + async def test_compile_render_mock(self) -> str: + """should compile a template string into a render function.""" + dotprompt = Dotprompt() + template_source = 'hello {{name}} ({{@state.name}}, {{@auth.email}})' + + render_fn = dotprompt._handlebars.compile(template_source) + + result = render_fn( + data=DataArgument[dict[str, Any]]( + input={'name': 'foo'}, + context={'auth': {'email': 'a@b.c'}}, + ), + options=PromptMetadata(input=PromptInputConfig()),) + + assert result == "hello foo (bar, a@b.c)" # No input provided, so name is empty string. + + + @patch('dotpromptz.dotprompt.parse_document') def test_parse(mock_parse_document: Mock, mock_handlebars: Mock) -> None: