"""Test that Script from next/script renders correctly.""" import pytest import reflex as rx from reflex.components.base.script import Script from reflex.state import BaseState def test_script_inline(): """Test inline scripts are rendered as children.""" component = Script.create("let x = 42") render_dict = component.render() assert render_dict["name"] == "Script" assert not render_dict["contents"] assert len(render_dict["children"]) == 1 assert render_dict["children"][0]["contents"] == '"let x = 42"' def test_script_src(): """Test src prop is rendered without children.""" component = Script.create(src="foo.js") render_dict = component.render() assert render_dict["name"] == "Script" assert not render_dict["contents"] assert not render_dict["children"] assert 'src:"foo.js"' in render_dict["props"] def test_script_neither(): """Specifying neither children nor src is a ValueError.""" with pytest.raises(ValueError): Script.create() class EvState(BaseState): """State for testing event handlers.""" @rx.event def on_ready(self): """Empty event handler.""" pass @rx.event def on_load(self): """Empty event handler.""" pass @rx.event def on_error(self): """Empty event handler.""" pass def test_script_event_handler(): """Test event handlers are rendered as expected.""" component = Script.create( src="foo.js", on_ready=EvState.on_ready, on_load=EvState.on_load, on_error=EvState.on_error, ) render_dict = component.render() assert ( f'onReady:((...args) => (addEvents([(Event("{EvState.get_full_name()}.on_ready", ({{ }}), ({{ }})))], args, ({{ }}))))' in render_dict["props"] ) assert ( f'onLoad:((...args) => (addEvents([(Event("{EvState.get_full_name()}.on_load", ({{ }}), ({{ }})))], args, ({{ }}))))' in render_dict["props"] ) assert ( f'onError:((...args) => (addEvents([(Event("{EvState.get_full_name()}.on_error", ({{ }}), ({{ }})))], args, ({{ }}))))' in render_dict["props"] )