File: frontmatter_defaults.feature

package info (click to toggle)
jekyll 2.2.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 2,908 kB
  • ctags: 687
  • sloc: ruby: 6,811; sh: 121; xml: 106; makefile: 35
file content (136 lines) | stat: -rw-r--r-- 6,377 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
Feature: frontmatter defaults
  Scenario: Use default for frontmatter variables internally
    Given I have a _layouts directory
    And I have a pretty layout that contains "THIS IS THE LAYOUT: {{content}}"

    And I have a _posts directory
    And I have the following post:
      | title             | date       | content          |
      | default layout    | 2013-09-11 | just some post   |
    And I have an "index.html" page with title "some title" that contains "just some page"

    And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {layout: "pretty"}}]"

    When I run jekyll build
    Then the _site directory should exist
    And I should see "THIS IS THE LAYOUT: <p>just some post</p>" in "_site/2013/09/11/default-layout.html"
    And I should see "THIS IS THE LAYOUT: just some page" in "_site/index.html"

  Scenario: Use default for frontmatter variables in Liquid
    Given I have a _posts directory
    And I have the following post:
      | title        | date       | content                                          |
      | default data | 2013-09-11 | <p>{{page.custom}}</p><div>{{page.author}}</div> |
    And I have an "index.html" page that contains "just {{page.custom}} by {{page.author}}"
    And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {custom: "some special data", author: "Ben"}}]"
    When I run jekyll build
    Then the _site directory should exist
    And I should see "<p>some special data</p><div>Ben</div>" in "_site/2013/09/11/default-data.html"
    And I should see "just some special data by Ben" in "_site/index.html"

  Scenario: Override frontmatter defaults by path
    Given I have a _layouts directory
    And I have a root layout that contains "root: {{ content }}"
    And I have a subfolder layout that contains "subfolder: {{ content }}"

    And I have a _posts directory
    And I have the following post:
      | title | date       | content               |
      | about | 2013-10-14 | info on {{page.description}} |
    And I have a special/_posts directory
    And I have the following post in "special":
      | title | date       | path  | content               |
      | about | 2013-10-14 | local | info on {{page.description}} |

    And I have an "index.html" page with title "overview" that contains "Overview for {{page.description}}"
    And I have an "special/index.html" page with title "section overview" that contains "Overview for {{page.description}}"

    And I have a configuration file with "defaults" set to "[{scope: {path: "special"}, values: {layout: "subfolder", description: "the special section"}}, {scope: {path: ""}, values: {layout: "root", description: "the webpage"}}]"

    When I run jekyll build
    Then the _site directory should exist
    And I should see "root: <p>info on the webpage</p>" in "_site/2013/10/14/about.html"
    And I should see "subfolder: <p>info on the special section</p>" in "_site/special/2013/10/14/about.html"
    And I should see "root: Overview for the webpage" in "_site/index.html"
    And I should see "subfolder: Overview for the special section" in "_site/special/index.html"

  Scenario: Override frontmatter defaults by type
    Given I have a _posts directory
    And I have the following post:
      | title          | date       | content |
      | this is a post | 2013-10-14 | blabla  |
    And I have an "index.html" page that contains "interesting stuff"
    And I have a configuration file with "defaults" set to "[{scope: {path: "", type: "post"}, values: {permalink: "/post.html"}}, {scope: {path: "", type: "page"}, values: {permalink: "/page.html"}}, {scope: {path: ""}, values: {permalink: "/perma.html"}}]"
    When I run jekyll build
    Then I should see "blabla" in "_site/post.html"
    And I should see "interesting stuff" in "_site/page.html"
    But the "_site/perma.html" file should not exist

  Scenario: Actual frontmatter overrides defaults
    Given I have a _posts directory
    And I have the following post:
      | title    | date       | permalink         | author   | content                   |
      | override | 2013-10-14 | /frontmatter.html | some guy | a blog by {{page.author}} |
    And I have an "index.html" page with permalink "override.html" that contains "nothing"
    And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {permalink: "/perma.html", author: "Chris"}}]"
    When I run jekyll build
    Then I should see "a blog by some guy" in "_site/frontmatter.html"
    And I should see "nothing" in "_site/override.html"
    But the "_site/perma.html" file should not exist

  Scenario: Use frontmatter defaults in collections
    Given I have a _slides directory
    And I have a "index.html" file that contains "nothing"
    And I have a "_slides/slide1.html" file with content: 
    """
    Value: {{ page.myval }}
    """
    And I have a "_config.yml" file with content:
    """
      collections:
        slides:
          output: true
      defaults:
        -
          scope:
            path: ""
            type: slides
          values:
            myval: "Test"
    """
    When I run jekyll build
    Then the _site directory should exist
    And I should see "Value: Test" in "_site/slides/slide1.html"

  Scenario: Override frontmatter defaults inside a collection
    Given I have a _slides directory
    And I have a "index.html" file that contains "nothing"
    And I have a "_slides/slide2.html" file with content: 
    """
    ---
    myval: Override
    ---
    Value: {{ page.myval }}
    """
    And I have a "_config.yml" file with content:
    """
      collections:
        slides:
          output: true
      defaults:
        -
          scope:
            path: ""
            type: slides
          values:
            myval: "Test"
    """
    When I run jekyll build
    Then the _site directory should exist
    And I should see "Value: Override" in "_site/slides/slide2.html"

  Scenario: Deep merge frontmatter defaults
    Given I have an "index.html" page with fruit "{orange: 1}" that contains "Fruits: {{ page.fruit.orange | plus: page.fruit.apple }}"
    And I have a configuration file with "defaults" set to "[{scope: {path: ""}, values: {fruit: {apple: 2}}}]"
    When I run jekyll build
    Then I should see "Fruits: 3" in "_site/index.html"