def test_unicorn_args_and_kwargs(): # args after the component name get ignored token = Token(TokenType.TEXT, "unicorn 'todo' '1' 2 hello='world' test=3 '4'") unicorn_node = unicorn(None, token) assert unicorn_node.kwargs == {"hello": "world", "test": 3}
def test_unicorn_render_with_invalid_html(): token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentKwargsWithHtmlEntity' test_kwarg=test_var.nested", ) unicorn_node = unicorn(Parser([]), token) context = {"test_var": {"nested": "variable!"}} actual = unicorn_node.render(Context(context)) assert "->variable!<-" in actual
def test_unicorn_render_kwarg(): token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentKwargs' test_kwarg='tested!'", ) unicorn_node = unicorn(None, token) context = {} actual = unicorn_node.render(context) assert "->tested!<-" in actual
def test_unicorn_render_kwarg(): token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentKwargs' test_kwarg='tested!'", ) unicorn_node = unicorn(Parser([]), token) context = {} actual = unicorn_node.render(Context(context)) assert "<b>tested!</b>" in actual
def test_unicorn_render_context_variable(): token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentKwargs' test_kwarg=test_var.nested", ) unicorn_node = unicorn(None, token) context = {"test_var": {"nested": "variable!"}} actual = unicorn_node.render(context) assert "->variable!<-" in actual
def test_unicorn_render_id_use_pk(): token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentModel' model_id=model.id", ) unicorn_node = unicorn(None, token) context = {"model": {"pk": 123}} actual = unicorn_node.render(context) assert "==123==" in actual
def test_unicorn_render_child_component_no_script_tag(settings): settings.DEBUG = True token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentKwargs' parent=view", ) unicorn_node = unicorn(None, token) view = FakeComponentParent(component_name="test", component_id="asdf") context = {"view": view} html = unicorn_node.render(context) assert "<script" not in html
def test_unicorn_render_component_one_script_tag(settings): settings.DEBUG = True token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentKwargs'", ) unicorn_node = unicorn(None, token) context = {} html = unicorn_node.render(context) assert "<script" in html assert len(re.findall("<script", html)) == 1
def test_unicorn_render_parent_component_one_script_tag(settings): settings.DEBUG = True token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentParent'", ) unicorn_node = unicorn(None, token) context = {} html = unicorn_node.render(context) assert '<script type="module"' in html assert len(re.findall('<script type="module"', html)) == 1
def test_unicorn_render_calls_no_mount_call(settings): settings.DEBUG = True token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentParent'", ) unicorn_node = unicorn(Parser([]), token) context = {} html = unicorn_node.render(Context(context)) assert '<script type="module"' in html assert len(re.findall('<script type="module"', html)) == 1 assert '"calls":[]' in html
def test_unicorn_render_calls_with_arg(settings): settings.DEBUG = True token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentCalls2'", ) unicorn_node = unicorn(None, token) context = {} html = unicorn_node.render(context) assert '<script type="module"' in html assert len(re.findall('<script type="module"', html)) == 1 assert '"calls":[{"fn":"testCall2","args":["hello"]}]' in html
def test_unicorn_render_calls_no_mount_call(settings): settings.DEBUG = True token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentParent'", ) unicorn_node = unicorn(None, token) context = {} html = unicorn_node.render(context) assert "<script" in html assert len(re.findall("<script", html)) == 1 assert '"calls":[]' in html
def test_unicorn_render_with_component_name_from_context(): token = Token( TokenType.TEXT, "unicorn component_name", ) unicorn_node = unicorn(Parser([]), token) context = { "component_name": "tests.templatetags.test_unicorn_render.FakeComponent" } html = unicorn_node.render(Context(context)) assert '<script type="module"' in html assert len(re.findall('<script type="module"', html)) == 1
def test_unicorn_render_parent_with_key(settings): settings.DEBUG = True token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentKwargs' parent=view key='blob'", ) unicorn_node = unicorn(None, token) view = FakeComponentParent(component_name="test", component_id="asdf") context = {"view": view} unicorn_node.render(context) assert ( unicorn_node.component_id == "asdf:tests.templatetags.test_unicorn_render.FakeComponentKwargs:blob")
def test_unicorn_render_parent_with_pk(settings): settings.DEBUG = True token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentKwargs' parent=view pk=99", ) unicorn_node = unicorn(Parser([]), token) view = FakeComponentParent(component_name="test", component_id="asdf") context = {"view": view} unicorn_node.render(Context(context)) assert ( unicorn_node.component_id == "asdf:tests.templatetags.test_unicorn_render.FakeComponentKwargs:99")
def test_unicorn_render_parent_with_model_pk(settings): settings.DEBUG = True token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentKwargs' parent=view model=model", ) unicorn_node = unicorn(None, token) view = FakeComponentParent(component_name="test", component_id="asdf") flavor = Flavor(pk=187) context = {"view": view, "model": flavor} unicorn_node.render(context) assert ( unicorn_node.component_id == "asdf:tests.templatetags.test_unicorn_render.FakeComponentKwargs:187")
def test_unicorn_render_with_invalid_component_name_from_context(): token = Token( TokenType.TEXT, "unicorn bad_component_name", ) unicorn_node = unicorn(Parser([]), token) context = { "component_name": "tests.templatetags.test_unicorn_render.FakeComponent" } with pytest.raises(ComponentNotValid) as e: unicorn_node.render(Context(context)) assert ( e.exconly() == "django_unicorn.errors.ComponentNotValid: Component template is not valid: bad_component_name." )
def test_unicorn_render_hash(settings): settings.DEBUG = True token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentParent'", ) unicorn_node = unicorn(None, token) context = {} html = unicorn_node.render(context) assert '<script type="module"' in html assert len(re.findall('<script type="module"', html)) == 1 assert '"hash":"' in html # Assert that the content hash is correct script_idx = html.index("<script") rendered_content = html[:script_idx] expected_hash = generate_checksum(rendered_content) assert f'"hash":"{expected_hash}"' in html
def test_unicorn_render_parent_with_model_id(settings): settings.DEBUG = True token = Token( TokenType.TEXT, "unicorn 'tests.templatetags.test_unicorn_render.FakeComponentKwargs' parent=view model=model", ) unicorn_node = unicorn(None, token) view = FakeComponentParent(component_name="test", component_id="asdf") # Fake a model that only has an id class Model: def __init__(self): self.id = 178 def to_json(self): return {"id": self.id} context = {"view": view, "model": Model()} unicorn_node.render(context) assert ( unicorn_node.component_id == "asdf:tests.templatetags.test_unicorn_render.FakeComponentKwargs:178")
def test_unicorn(): token = Token(TokenType.TEXT, "unicorn 'todo'") unicorn_node = unicorn(Parser([]), token) assert unicorn_node.component_name.resolve({}) == "todo" assert len(unicorn_node.kwargs) == 0
def test_unicorn_kwargs(): token = Token(TokenType.TEXT, "unicorn 'todo' blob='blob'") unicorn_node = unicorn(None, token) assert unicorn_node.kwargs == {"blob": "blob"}
def test_unicorn(): token = Token(TokenType.TEXT, "unicorn 'todo'") unicorn_node = unicorn(None, token) assert unicorn_node.component_name == "todo" assert len(unicorn_node.kwargs) == 0