mirror of
https://github.com/middleman/middleman.git
synced 2022-11-09 12:20:27 -05:00
4fe0732713
* Use "Given" instead of "And" as first scenario step * Remove unnecessary step The following step already invokes this step * Remove setup in feature that doesn't do anything As this referenced "i18n-test-app", but later we run "i18n-mixed-sources", these steps weren't doing anything. * Avoid referencing the same fixture twice The step "the Server is running at" invokes the "a fixture app" step, followed by "the Server is running" step.
265 lines
7.7 KiB
Gherkin
265 lines
7.7 KiB
Gherkin
Feature: Collections
|
|
Scenario: Lazy query
|
|
Given a fixture app "collections-app"
|
|
And a file named "config.rb" with:
|
|
"""
|
|
articles1 = collection :articles1, resources.select { |r|
|
|
matcher = ::Middleman::Util::UriTemplates.uri_template('blog1/{year}-{month}-{day}-{title}.html')
|
|
::Middleman::Util::UriTemplates.extract_params(matcher, ::Middleman::Util.normalize_path(r.url))
|
|
}
|
|
|
|
everything = resources.select do |r|
|
|
true
|
|
end
|
|
|
|
def get_tags(resource)
|
|
if resource.data.tags.is_a? String
|
|
resource.data.tags.split(',').map(&:strip)
|
|
else
|
|
resource.data.tags
|
|
end
|
|
end
|
|
|
|
def group_lookup(resource, sum)
|
|
results = Array(get_tags(resource)).map(&:to_s).map(&:to_sym)
|
|
|
|
results.each do |k|
|
|
sum[k] ||= []
|
|
sum[k] << resource
|
|
end
|
|
end
|
|
|
|
tags = everything
|
|
.select { |resource| resource.data.tags }
|
|
.each_with_object({}, &method(:group_lookup))
|
|
|
|
class Wrapper
|
|
attr_reader :stuff
|
|
|
|
def initialize
|
|
@stuff = Set.new
|
|
end
|
|
|
|
def <<((k, v))
|
|
@stuff << k
|
|
self
|
|
end
|
|
end
|
|
|
|
collection :wrapped, tags.reduce(Wrapper.new, :<<)
|
|
|
|
set :tags, tags # Expose to templates
|
|
|
|
collection :first_tag, tags.keys.sort.first
|
|
"""
|
|
And a file named "source/index.html.erb" with:
|
|
"""
|
|
<% collection(:articles1).each do |article| %>
|
|
Article1: <%= article.data.title %>
|
|
<% end %>
|
|
|
|
Tag Count: <%= collection(:wrapped).stuff.length %>
|
|
|
|
<% config[:tags].value.each do |k, items| %>
|
|
Tag: <%= k %> (<%= items.length %>)
|
|
<% items.each do |article| %>
|
|
Article (<%= k %>): <%= article.data.title %>
|
|
<% end %>
|
|
<% end %>
|
|
|
|
First Tag: <%= collection(:first_tag) %>
|
|
"""
|
|
Given the Server is running
|
|
When I go to "index.html"
|
|
Then I should see 'Article1: Blog1 Newer Article'
|
|
And I should see 'Article1: Blog1 Another Article'
|
|
And I should see 'Tag: foo (4)'
|
|
And I should see 'Article (foo): Blog1 Newer Article'
|
|
And I should see 'Article (foo): Blog1 Another Article'
|
|
And I should see 'Article (foo): Blog2 Newer Article'
|
|
And I should see 'Article (foo): Blog2 Another Article'
|
|
And I should see 'Tag: bar (2)'
|
|
And I should see 'Article (bar): Blog1 Newer Article'
|
|
And I should see 'Article (bar): Blog2 Newer Article'
|
|
And I should see 'Tag: 120 (1)'
|
|
And I should see 'Article (120): Blog1 Another Article'
|
|
And I should see 'First Tag: 120'
|
|
And I should see 'Tag Count: 3'
|
|
|
|
Scenario: Collected resources update with file changes
|
|
Given a fixture app "collections-app"
|
|
And a file named "config.rb" with:
|
|
"""
|
|
collection :articles, resources.select { |r|
|
|
matcher = ::Middleman::Util::UriTemplates.uri_template('blog2/{year}-{month}-{day}-{title}.html')
|
|
::Middleman::Util::UriTemplates.extract_params(matcher, ::Middleman::Util.normalize_path(r.url))
|
|
}
|
|
"""
|
|
And a file named "source/index.html.erb" with:
|
|
"""
|
|
<% collection(:articles).each do |article| %>
|
|
Article: <%= article.data.title || article.file_descriptor[:relative_path] %>
|
|
<% end %>
|
|
"""
|
|
Given the Server is running
|
|
When I go to "index.html"
|
|
Then I should not see "Article: index.html.erb"
|
|
Then I should see 'Article: Blog2 Newer Article'
|
|
And I should see 'Article: Blog2 Another Article'
|
|
|
|
And the file "source/blog2/2011-01-02-another-article.html.markdown" has the contents
|
|
"""
|
|
---
|
|
title: "Blog3 Another Article"
|
|
date: "2011-01-02"
|
|
tags:
|
|
- foo
|
|
---
|
|
|
|
Another Article Content
|
|
|
|
"""
|
|
When I go to "index.html"
|
|
Then I should see "Article: Blog2 Newer Article"
|
|
And I should not see "Article: Blog2 Another Article"
|
|
And I should see 'Article: Blog3 Another Article'
|
|
|
|
And the file "source/blog2/2011-01-01-new-article.html.markdown" is removed
|
|
When I go to "index.html"
|
|
Then I should not see "Article: Blog2 Newer Article"
|
|
And I should see 'Article: Blog3 Another Article'
|
|
|
|
And the file "source/blog2/2014-01-02-yet-another-article.html.markdown" has the contents
|
|
"""
|
|
---
|
|
title: "Blog2 Yet Another Article"
|
|
date: "2011-01-02"
|
|
tags:
|
|
- foo
|
|
---
|
|
|
|
Yet Another Article Content
|
|
"""
|
|
When I go to "index.html"
|
|
And I should see 'Article: Blog3 Another Article'
|
|
And I should see 'Article: Blog2 Yet Another Article'
|
|
|
|
Scenario: Work with local helpers
|
|
Given a fixture app "collections-app"
|
|
And a file named "config.rb" with:
|
|
"""
|
|
module TestHelper
|
|
def help_me
|
|
"ok"
|
|
end
|
|
end
|
|
|
|
include TestHelper
|
|
|
|
data.articles.each_with_index do |a, i|
|
|
proxy "/#{i}-#{help_me}.html", a
|
|
end
|
|
"""
|
|
And a file named "data/articles.yaml" with:
|
|
"""
|
|
---
|
|
- "/blog1/2011-01-01-new-article.html"
|
|
- "/blog2/2011-01-02-another-article.html"
|
|
"""
|
|
Given the Server is running
|
|
When I go to "0-ok.html"
|
|
Then I should see 'Newer Article Content'
|
|
When I go to "1-ok.html"
|
|
Then I should see 'Another Article Content'
|
|
|
|
Scenario: Collected data update with file changes
|
|
Given a fixture app "collections-app"
|
|
And a file named "config.rb" with:
|
|
"""
|
|
data.articles.each_with_index do |a, i|
|
|
proxy "/#{i}.html", a
|
|
end
|
|
"""
|
|
And a file named "data/articles.yaml" with:
|
|
"""
|
|
---
|
|
- "/blog1/2011-01-01-new-article.html"
|
|
- "/blog2/2011-01-02-another-article.html"
|
|
"""
|
|
Given the Server is running
|
|
When I go to "0.html"
|
|
Then I should see 'Newer Article Content'
|
|
When I go to "1.html"
|
|
Then I should see 'Another Article Content'
|
|
When I go to "2.html"
|
|
Then I should see 'Not Found'
|
|
|
|
When the file "data/articles.yaml" has the contents
|
|
"""
|
|
---
|
|
- "/blog1/2011-01-01-new-article.html"
|
|
"""
|
|
When I go to "0.html"
|
|
Then I should see 'Newer Article Content'
|
|
When I go to "1.html"
|
|
Then I should see 'Not Found'
|
|
When I go to "2.html"
|
|
Then I should see 'Not Found'
|
|
|
|
When the file "data/articles.yaml" has the contents
|
|
"""
|
|
---
|
|
- "/blog2/2011-01-02-another-article.html"
|
|
- "/blog1/2011-01-01-new-article.html"
|
|
- "/blog2/2011-01-01-new-article.html"
|
|
"""
|
|
When I go to "0.html"
|
|
Then I should see 'Another Article Content'
|
|
When I go to "1.html"
|
|
Then I should see 'Newer Article Content'
|
|
When I go to "2.html"
|
|
Then I should see 'Again'
|
|
|
|
Scenario: Arbitrary live datasets
|
|
Given a fixture app "collections-app"
|
|
And a file named "config.rb" with:
|
|
"""
|
|
ignore "/description_template.html"
|
|
|
|
live {
|
|
Dir[File.join(root, "descriptions/*.txt")]
|
|
}.each do |description_name|
|
|
base = File.basename(description_name, '.txt')
|
|
proxy "#{base}.html", "/description_template.html", locals: {
|
|
contents: File.read(description_name)
|
|
}
|
|
end
|
|
"""
|
|
And a file named "source/description_template.html.erb" with:
|
|
"""
|
|
<%= contents %>
|
|
"""
|
|
And a file named "descriptions/test1.txt" with:
|
|
"""
|
|
Test1
|
|
"""
|
|
Given the Server is running
|
|
When I go to "test1.html"
|
|
Then I should see 'Test1'
|
|
When I go to "test2.html"
|
|
Then I should see 'Not Found'
|
|
|
|
When the file "descriptions/test2.txt" has the contents
|
|
"""
|
|
Test2
|
|
"""
|
|
When I go to "test1.html"
|
|
Then I should see 'Test1'
|
|
When I go to "test2.html"
|
|
Then I should see 'Test2'
|
|
|
|
When the file "descriptions/test1.txt" is removed
|
|
When I go to "test1.html"
|
|
Then I should see 'Not Found'
|
|
When I go to "test2.html"
|
|
Then I should see 'Test2'
|