spec/seory/dsl_spec.rb in seory-0.0.3 vs spec/seory/dsl_spec.rb in seory-0.0.4
- old
+ new
@@ -1,40 +1,91 @@
require 'spec_helper'
require 'seory/dsl'
describe Seory::Dsl do
- let(:seory_class) { Object.new.extend(Seory::Dsl) }
- before do
- seory_class.describe do
- match 'products#index' do
- title 'My Great Product'
- h1 'Great Product Name'
+ subject(:seory) { seory_class.lookup(controller) }
- misc :option, 'static optional val'
- end
+ context 'with traditional syntax' do
+ let(:seory_class) { Object.new.extend(Seory::Dsl) }
+ before do
+ seory_class.describe do
+ match ->(c) { c.controller_name == 'reports' } do
+ title 'Useful reports'
+ end
- default do
- title 'Misc site'
- h1 { controller.controller_name.upcase }
+ match 'products#index' do
+ title 'My Great Product'
+ h1 'Great Product Name'
- misc(:option) { "dynamic option name at #{controller.controller_name}" }
+ misc :option, 'static optional val'
+ end
+
+ default do
+ title 'Misc site'
+ h1 { controller.controller_name.upcase }
+ h2 'default h2'
+
+ misc(:option) { "dynamic option name at #{controller.controller_name}" }
+ end
end
end
- end
- subject(:seory) { seory_class.lookup(controller) }
+ context 'at reports#index / match with proc' do
+ let(:controller) { double('controller', controller_name: 'reports', action_name: 'index') }
- context 'at products#index' do
- let(:controller) { double('controller', controller_name: 'products', action_name: 'index') }
+ specify { expect(seory.title).to eq 'Useful reports' }
+ end
- specify { expect(seory.title).to eq 'My Great Product' }
- specify { expect(seory.h1).to eq 'Great Product Name' }
- specify { expect(seory.misc(:option)).to eq 'static optional val' }
+ context 'at products#index' do
+ let(:controller) { double('controller', controller_name: 'products', action_name: 'index') }
+
+ specify { expect(seory.title).to eq 'My Great Product' }
+ specify { expect(seory.h1).to eq 'Great Product Name' }
+ specify { expect(seory.misc(:option)).to eq 'static optional val' }
+
+ specify { expect(seory.h2).to eq 'default h2' }
+ end
+
+ context 'at misc#show' do
+ let(:controller) { double('controller', controller_name: 'misc', action_name: 'show') }
+
+ specify { expect(seory.h1).to eq 'MISC' }
+ specify { expect(seory.misc(:option)).to eq 'dynamic option name at misc' }
+ end
end
- context 'at misc#show' do
- let(:controller) { double('controller', controller_name: 'misc', action_name: 'show') }
+ context 'with matcher build dsl syntax' do
+ let(:seory_class) { Object.new.extend(Seory::Dsl) }
+ before do
+ seory_class.describe do
+ match path('/products/special-product') do
+ title 'Special Product Detail'
+ end
- specify { expect(seory.h1).to eq 'MISC' }
- specify { expect(seory.misc(:option)).to eq 'dynamic option name at misc' }
+ match slug('products#show') do
+ title 'Great Product Detail'
+ end
+ end
+ end
+
+ context 'at products#show' do
+ let(:controller) do
+ double('controller', controller_name: 'products', action_name: 'show', params: {id: 42}).tap do |c|
+ allow(c).to receive_message_chain(:request, :fullpath) { '/products/42' }
+ end
+ end
+
+ specify { expect(seory.title).to eq 'Great Product Detail' }
+ end
+
+ context 'at special product with path /products/special-product (although products#show)' do
+ let(:controller) do
+ double('controller', controller_name: 'products', action_name: 'show').tap do |c|
+ allow(c).to receive_message_chain(:request, :fullpath) { '/products/special-product' }
+ end
+ end
+
+ specify { expect(seory.title).to eq 'Special Product Detail' }
+ end
end
+
end