diff options
author | Gibheer <gibheer@gmail.com> | 2013-02-12 07:38:26 +0100 |
---|---|---|
committer | Gibheer <gibheer@gmail.com> | 2013-02-12 08:29:33 +0100 |
commit | f18ab69a91cb736efc59fa82b8ae88f61bd1abe2 (patch) | |
tree | 9e4be9eeb585c81ddd5dc4d36ace9283c0b616cb /spec | |
parent | 8ff98ff9dd6fef4007f5be9d79d68368509094fd (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')
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 |