diff options
| author | Xinhui | 2017-12-07 15:25:43 +0100 |
|---|---|---|
| committer | Xinhui | 2017-12-07 15:25:43 +0100 |
| commit | 3f2575c44c6a059ae03412f38b7263450fb58024 (patch) | |
| tree | ff6e6cb9a9468c3cb3c8fd1aa30713f08cde7ec6 | |
| parent | a022425cf375387338020549698863d2112b61f6 (diff) | |
| download | chouette-core-3f2575c44c6a059ae03412f38b7263450fb58024.tar.bz2 | |
TimeTable decorator policy spec5150_decorator_policy
Refs #5150
| -rw-r--r-- | app/decorators/time_table_decorator.rb | 22 | ||||
| -rw-r--r-- | spec/decorators/time_table_decorator_spec.rb | 66 |
2 files changed, 77 insertions, 11 deletions
diff --git a/app/decorators/time_table_decorator.rb b/app/decorators/time_table_decorator.rb index c6eeac176..720ea30d8 100644 --- a/app/decorators/time_table_decorator.rb +++ b/app/decorators/time_table_decorator.rb @@ -10,18 +10,18 @@ class TimeTableDecorator < Draper::Decorator def action_links links = [] - if object.calendar - links << Link.new( - content: h.t('actions.actualize'), - href: h.actualize_referential_time_table_path( - context[:referential], - object - ), - method: :post - ) - end + if h.policy(object).actualize? && object.calendar + links << Link.new( + content: h.t('actions.actualize'), + href: h.actualize_referential_time_table_path( + context[:referential], + object + ), + method: :post + ) + end - if h.policy(object).edit? + if h.policy(object).update? links << Link.new( content: h.t('actions.combine'), href: h.new_referential_time_table_time_table_combination_path( diff --git a/spec/decorators/time_table_decorator_spec.rb b/spec/decorators/time_table_decorator_spec.rb new file mode 100644 index 000000000..d89b27ffa --- /dev/null +++ b/spec/decorators/time_table_decorator_spec.rb @@ -0,0 +1,66 @@ +require 'spec_helper' + +describe TimeTableDecorator do + let(:object) { build_stubbed :time_table, calendar: build_stubbed(:calendar) } + let(:user) { build_stubbed :user } + + describe 'action links' do + before do + allow(helpers).to receive(:actualize_referential_time_table_path).and_return('/actualize_path') + allow(helpers).to receive(:new_referential_time_table_time_table_combination_path).and_return('/combine_path') + allow(helpers).to receive(:duplicate_referential_time_table_path).and_return('/duplicate_path') + allow(helpers).to receive(:referential_time_table_path).and_return('/show_path') + allow(helpers).to receive(:destroy_link_content).and_return('destroy_link_content') + end + + context 'for authorized user' do + before do + stub_policy([actualize?: true, duplicate?: true, update?: true, destroy?: true]) + end + + it 'should render actualize link' do + expect(subject.action_links.map(&:content)).to include(I18n.t('actions.actualize')) + expect_action_link_hrefs.to include('/actualize_path') + end + + it 'should render combine link' do + expect(subject.action_links.map(&:content)).to include(I18n.t('actions.combine')) + expect_action_link_hrefs.to include('/combine_path') + end + + it 'should not render duplicate link' do + expect(subject.action_links.map(&:content)).to include(I18n.t('actions.duplicate')) + expect_action_link_hrefs.to include('/duplicate_path') + end + + it 'should render destroy link' do + expect(subject.action_links.map(&:content)).to include('destroy_link_content') + end + end + + context 'for unauthorized user' do + before do + stub_policy([actualize?: false, duplicate?: false, update?: false, destroy?: false]) + end + + it 'should not render actualize link' do + expect(subject.action_links.map(&:content)).to_not include(I18n.t('actions.actualize')) + expect_action_link_hrefs.to_not include('/actualize_path') + end + + it 'should not render combine link' do + expect(subject.action_links.map(&:content)).to_not include(I18n.t('actions.combine')) + expect_action_link_hrefs.to_not include('/combine_path') + end + + it 'should not render duplicate link' do + expect(subject.action_links.map(&:content)).to_not include(I18n.t('actions.duplicate')) + expect_action_link_hrefs.to_not include('/duplicate_path') + end + + it 'should not render destroy link' do + expect(subject.action_links.map(&:content)).to_not include('destroy_link_content') + end + end + end +end |
