Пример #1
0
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
Пример #3
0
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
Пример #5
0
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
Пример #6
0
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
Пример #7
0
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
Пример #8
0
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
Пример #9
0
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
Пример #11
0
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
Пример #12
0
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
Пример #14
0
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")
Пример #16
0
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."
    )
Пример #18
0
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
Пример #19
0
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")
Пример #20
0
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
Пример #21
0
def test_unicorn_kwargs():
    token = Token(TokenType.TEXT, "unicorn 'todo' blob='blob'")
    unicorn_node = unicorn(None, token)

    assert unicorn_node.kwargs == {"blob": "blob"}
Пример #22
0
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