158 lines
4.7 KiB
Gherkin
158 lines
4.7 KiB
Gherkin
Feature: Inheritance
|
|
As a designer
|
|
I want to be able to build more complex page html layouts
|
|
with shared template code
|
|
that render correctly to the client
|
|
|
|
Background:
|
|
Given I have the site: "test site" set up
|
|
|
|
Scenario: Liquid Inheritance with a single block
|
|
Given a page named "above-and-below" with the template:
|
|
"""
|
|
<div class="header"></div>
|
|
<div class="body">
|
|
{% block body %}{% endblock %}
|
|
</div>
|
|
<div class="footer"></div>
|
|
"""
|
|
And a page named "hello-world-with-layout" with the template:
|
|
"""
|
|
{% extends 'above-and-below' %}
|
|
{% block body %}Hello World{% endblock %}
|
|
"""
|
|
When I view the rendered page at "/hello-world-with-layout"
|
|
Then the rendered output should look like:
|
|
"""
|
|
<div class="header"></div>
|
|
<div class="body">
|
|
Hello World
|
|
</div>
|
|
<div class="footer"></div>
|
|
"""
|
|
|
|
Scenario: Update a parent page and see modifications in descendants
|
|
Given a page named "base" with the template:
|
|
"""
|
|
My application say: {% block something %}Lorem ipsum{% endblock %}
|
|
"""
|
|
And a page named "hello-world" with the template:
|
|
"""
|
|
{% extends 'base' %}
|
|
{% block something %}Hello World{% endblock %}
|
|
"""
|
|
When I update the "base" page with the template:
|
|
"""
|
|
My application says: {% block something %}Lorem ipsum{% endblock %}
|
|
"""
|
|
When I view the rendered page at "/hello-world"
|
|
Then the rendered output should look like:
|
|
"""
|
|
My application says: Hello World
|
|
"""
|
|
|
|
Scenario: Liquid Inheritance with multiple blocks
|
|
Given a page named "layout-with-sidebar" with the template:
|
|
"""
|
|
<div class="header"></div>
|
|
<div class="content">
|
|
<div class="sidebar">
|
|
{% block sidebar %}DEFAULT SIDEBAR CONTENT{% endblock %}
|
|
</div>
|
|
<div class="body">
|
|
{% block body %}DEFAULT BODY CONTENT{% endblock %}
|
|
</div>
|
|
</div>
|
|
<div class="footer"></div>
|
|
"""
|
|
And a page named "hello-world-multiblocks" with the template:
|
|
"""
|
|
{% extends 'layout-with-sidebar' %}
|
|
{% block body %}Hello world{% endblock %}
|
|
"""
|
|
When I view the rendered page at "/hello-world-multiblocks"
|
|
Then the rendered output should look like:
|
|
"""
|
|
<div class="header"></div>
|
|
<div class="content">
|
|
<div class="sidebar">
|
|
DEFAULT SIDEBAR CONTENT
|
|
</div>
|
|
<div class="body">
|
|
Hello world
|
|
</div>
|
|
</div>
|
|
<div class="footer"></div>
|
|
"""
|
|
|
|
Scenario: Multiple inheritance (layout extending another layout)
|
|
Given a page named "layout-with-sidebar" with the template:
|
|
"""
|
|
<div class="header"></div>
|
|
<div class="content">
|
|
<div class="sidebar">{% block sidebar %}DEFAULT SIDEBAR CONTENT{% endblock %}</div>
|
|
<div class="body">
|
|
{% block body %}DEFAULT BODY CONTENT{% endblock %}
|
|
</div>
|
|
</div>
|
|
<div class="footer"></div>
|
|
"""
|
|
And a page named "custom-layout-with-sidebar" with the template:
|
|
"""
|
|
{% extends 'layout-with-sidebar' %}
|
|
{% block sidebar %}Custom sidebar{% endblock %}
|
|
{% block body %}Hello{% endblock %}
|
|
"""
|
|
And a page named "hello-world-multiblocks" with the template:
|
|
"""
|
|
{% extends 'custom-layout-with-sidebar' %}
|
|
{% block body %}{{ block.super }} world{% endblock %}
|
|
"""
|
|
When I view the rendered page at "/hello-world-multiblocks"
|
|
Then the rendered output should look like:
|
|
"""
|
|
<div class="header"></div>
|
|
<div class="content">
|
|
<div class="sidebar">Custom sidebar</div>
|
|
<div class="body">
|
|
Hello world
|
|
</div>
|
|
</div>
|
|
<div class="footer"></div>
|
|
"""
|
|
|
|
Scenario: Page extending a layout with multiple embedded blocks which extends another template
|
|
Given a page named "layout-with-sidebar" with the template:
|
|
"""
|
|
<div class="header"></div>
|
|
<div class="content">
|
|
<div class="sidebar">{% block sidebar %}DEFAULT SIDEBAR CONTENT{% endblock %}</div>
|
|
<div class="body">
|
|
{% block body %}Hello{% endblock %}
|
|
</div>
|
|
</div>
|
|
<div class="footer"></div>
|
|
"""
|
|
And a page named "custom-layout-with-sidebar" with the template:
|
|
"""
|
|
{% extends 'layout-with-sidebar' %}
|
|
{% block body %}{{ block.super }} {% block main %}mister{% endblock %}{% endblock %}
|
|
"""
|
|
And a page named "hello-world-multiblocks" with the template:
|
|
"""
|
|
{% extends 'custom-layout-with-sidebar' %}
|
|
{% block main %}{{ block.super }} Jacques{% endblock %}
|
|
"""
|
|
When I view the rendered page at "/hello-world-multiblocks"
|
|
Then the rendered output should look like:
|
|
"""
|
|
<div class="header"></div>
|
|
<div class="content">
|
|
<div class="sidebar">DEFAULT SIDEBAR CONTENT</div>
|
|
<div class="body">
|
|
Hello mister Jacques
|
|
</div>
|
|
</div>
|
|
<div class="footer"></div>
|
|
"""
|