aboutsummaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGibheer <gibheer@gmail.com>2013-02-12 07:38:26 +0100
committerGibheer <gibheer@gmail.com>2013-02-12 08:29:33 +0100
commitf18ab69a91cb736efc59fa82b8ae88f61bd1abe2 (patch)
tree9e4be9eeb585c81ddd5dc4d36ace9283c0b616cb /spec
parent8ff98ff9dd6fef4007f5be9d79d68368509094fd (diff)
extracted the building of template tree
This step is a preparation to extend the functionality of the renderer. To make the main class easier, the search for templates and building of the tree is extracted into its own class.
Diffstat (limited to 'spec')
-rw-r--r--spec/unit/zero/renderer/read_template_path_bang_spec.rb8
-rw-r--r--spec/unit/zero/renderer/render_spec.rb2
-rw-r--r--spec/unit/zero/renderer/template_finder/get_templates_spec.rb65
-rw-r--r--spec/unit/zero/renderer/template_finder/initialize_spec.rb19
4 files changed, 89 insertions, 5 deletions
diff --git a/spec/unit/zero/renderer/read_template_path_bang_spec.rb b/spec/unit/zero/renderer/read_template_path_bang_spec.rb
index 8655777..948a3cc 100644
--- a/spec/unit/zero/renderer/read_template_path_bang_spec.rb
+++ b/spec/unit/zero/renderer/read_template_path_bang_spec.rb
@@ -1,14 +1,14 @@
require 'spec_helper'
-describe Zero::Renderer, 'read_template_path!' do
+describe Zero::Renderer, '#read_template_path!' do
subject { Zero::Renderer.new(template_path, type_map) }
- let(:template_path) { 'foo' }
+ let(:template_path) { 'foo/' }
let(:file_list) { ['foo/welcome/index.html.erb'] }
before :each do
Dir.stub(:[]) do |arg|
if arg == 'foo/**/*.*'
- file_list
+ file_list
else
[]
end
@@ -58,7 +58,7 @@ describe Zero::Renderer, 'read_template_path!' do
end
it 'creates an empty templates list without templates in path' do
- subject = Zero::Renderer.new("bar", {})
+ subject = Zero::Renderer.new("bar/", {})
subject.read_template_path!
subject.templates.should eq({})
diff --git a/spec/unit/zero/renderer/render_spec.rb b/spec/unit/zero/renderer/render_spec.rb
index 30d2225..3270ac3 100644
--- a/spec/unit/zero/renderer/render_spec.rb
+++ b/spec/unit/zero/renderer/render_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
describe Zero::Renderer, '#render' do
subject { Zero::Renderer.new(template_path, type_map) }
- let(:template_path) { 'spec/fixtures/templates' }
+ let(:template_path) { 'spec/fixtures/templates/' }
let(:type_map) {{
'html' => ['text/html', 'text/xml', '*/*'],
'json' => ['application/json', 'plain/text']
diff --git a/spec/unit/zero/renderer/template_finder/get_templates_spec.rb b/spec/unit/zero/renderer/template_finder/get_templates_spec.rb
new file mode 100644
index 0000000..5928e66
--- /dev/null
+++ b/spec/unit/zero/renderer/template_finder/get_templates_spec.rb
@@ -0,0 +1,65 @@
+require 'spec_helper'
+
+describe Zero::Renderer::TemplateFinder, '#initialize' do
+ subject { described_class.new(template_path, type_map) }
+ let(:template_path) { 'foo/' }
+ let(:file_list) { ['foo/welcome/index.html.erb'] }
+
+ before :each do
+ Dir.stub(:[]) do |arg|
+ if arg == 'foo/**/*.*'
+ file_list
+ else
+ []
+ end
+ end
+ end
+
+ shared_examples_for 'a template loader' do
+ it 'creates a template tree' do
+ subject.get_templates['welcome/index'].should eq(result)
+ end
+ end
+
+ context 'without mapping' do
+ let(:type_map) { {} }
+ let(:result) { { 'html' => 'foo/welcome/index.html.erb' } }
+
+ it_behaves_like 'a template loader'
+ end
+
+ context 'with a single mapping' do
+ let(:type_map) { {'html' => 'text/html' } }
+ let(:result) { { 'text/html' => 'foo/welcome/index.html.erb' } }
+
+ it_behaves_like 'a template loader'
+ end
+
+ context 'with multiple mappings' do
+ let(:type_map) { {'html' => ['text/html', 'text/xml'] } }
+ let(:result) { {
+ 'text/html' => 'foo/welcome/index.html.erb',
+ 'text/xml' => 'foo/welcome/index.html.erb'
+ } }
+
+ it_behaves_like 'a template loader'
+ end
+
+ context 'with default template' do
+ let(:file_list) {['foo/welcome/index.erb']}
+ let(:type_map) { {'default' => ['text/html', 'text/xml'] } }
+ let(:result) { {
+ 'text/html' => 'foo/welcome/index.erb',
+ 'text/xml' => 'foo/welcome/index.erb'
+ } }
+
+ it_behaves_like 'a template loader'
+ end
+
+ it 'creates an empty templates list without templates in path' do
+ subject = Zero::Renderer.new("bar/", {})
+ subject.read_template_path!
+
+ subject.templates.should eq({})
+ end
+end
diff --git a/spec/unit/zero/renderer/template_finder/initialize_spec.rb b/spec/unit/zero/renderer/template_finder/initialize_spec.rb
new file mode 100644
index 0000000..5ed9502
--- /dev/null
+++ b/spec/unit/zero/renderer/template_finder/initialize_spec.rb
@@ -0,0 +1,19 @@
+require 'spec_helper'
+
+describe Zero::Renderer::TemplateFinder, '#initialize' do
+ subject { described_class.new(template_path, type_map) }
+ let(:template_path) { 'foo/' }
+ let(:type_map) { {'html' => ['text/html']} }
+
+ its(:path) { should be(template_path) }
+ its(:path_regex) { should eq(/#{template_path}/) }
+ its(:type_map) { should be(type_map) }
+
+ context 'with broken path' do
+ let(:template_path) { 'foo' }
+
+ it "raises an error" do
+ expect { subject }.to raise_error(ArgumentError, "Has to end on '/'!")
+ end
+ end
+end