diff options
| -rw-r--r-- | app/decorators/compliance_control_decorator.rb | 36 | ||||
| -rw-r--r-- | app/decorators/compliance_control_set_decorator.rb | 23 | ||||
| -rw-r--r-- | app/policies/compliance_control_policy.rb | 10 | ||||
| -rw-r--r-- | app/policies/compliance_control_set_policy.rb | 16 | ||||
| -rw-r--r-- | config/locales/compliance_control_sets.en.yml | 2 | ||||
| -rw-r--r-- | config/locales/compliance_controls.en.yml | 6 | ||||
| -rw-r--r-- | config/locales/compliance_controls.fr.yml | 6 | ||||
| -rw-r--r-- | spec/policies/compliance_control_policy_spec.rb | 19 | ||||
| -rw-r--r-- | spec/policies/compliance_control_set_policy_spec.rb | 23 | ||||
| -rw-r--r-- | spec/support/pundit/shared_examples.rb | 20 |
10 files changed, 109 insertions, 52 deletions
diff --git a/app/decorators/compliance_control_decorator.rb b/app/decorators/compliance_control_decorator.rb index e70ff5350..f56e80417 100644 --- a/app/decorators/compliance_control_decorator.rb +++ b/app/decorators/compliance_control_decorator.rb @@ -2,33 +2,29 @@ class ComplianceControlDecorator < Draper::Decorator delegate_all def action_links + policy = h.policy(object) links = [] - # if h.policy(object).destroy? - links << Link.new( - content: h.destroy_link_content, - href: h.compliance_control_set_compliance_control_path(object.compliance_control_set.id, object.id), - method: :delete, - data: { confirm: h.t('compliance_control_sets.actions.destroy_confirm') } - ) - # end - - # if h.policy(object).edit? - links << Link.new( - content: h.t('compliance_control_sets.actions.edit'), - href: h.edit_compliance_control_set_compliance_control_path(object.compliance_control_set.id, object.id) - ) - # end - - - # if h.policy(object).show? links << Link.new( content: h.t('compliance_control_sets.actions.show'), href: h.compliance_control_set_compliance_control_path(object.compliance_control_set.id, object.id) ) - # end + if policy.edit? + links << Link.new( + content: h.t('compliance_controls.actions.edit'), + href: h.edit_compliance_control_set_compliance_control_path(object.compliance_control_set.id, object.id) + ) + end + + if policy.destroy? + links << Link.new( + content: h.destroy_link_content, + href: h.compliance_control_set_compliance_control_path(object.compliance_control_set.id, object.id), + method: :delete, + data: { confirm: h.t('compliance_controls.actions.destroy_confirm') } + ) + end links end - end diff --git a/app/decorators/compliance_control_set_decorator.rb b/app/decorators/compliance_control_set_decorator.rb index 7515316ce..73d65d54a 100644 --- a/app/decorators/compliance_control_set_decorator.rb +++ b/app/decorators/compliance_control_set_decorator.rb @@ -2,30 +2,31 @@ class ComplianceControlSetDecorator < Draper::Decorator delegate_all def action_links + policy = h.policy(object) links = [] - # if policy.clone? + if policy.edit? + links << Link.new( + content: h.t('compliance_control_sets.actions.edit'), + href: h.edit_compliance_control_set_path(object.id) + ) + end + + if policy.clone? links << Link.new( content: h.t('actions.clone'), href: h.clone_compliance_control_set_path(object.id) ) - # end + end - # if h.policy(object).destroy? + if policy.destroy? links << Link.new( content: h.destroy_link_content, href: h.compliance_control_set_path(object.id), method: :delete, data: { confirm: h.t('compliance_control_sets.actions.destroy_confirm') } ) - # end - - # if h.policy(object).edit? - links << Link.new( - content: h.t('compliance_control_sets.actions.edit'), - href: h.edit_compliance_control_set_path(object.id) - ) - # end + end links end diff --git a/app/policies/compliance_control_policy.rb b/app/policies/compliance_control_policy.rb index 09250f013..a09760128 100644 --- a/app/policies/compliance_control_policy.rb +++ b/app/policies/compliance_control_policy.rb @@ -6,17 +6,15 @@ class ComplianceControlPolicy < ApplicationPolicy end def destroy? - # user.has_permission?('compliance_controls.destroy') - true + user.has_permission?('compliance_controls.destroy') end def create? - # user.has_permission?('compliance_controls.create') - true + user.has_permission?('compliance_controls.create') end def update? - # user.has_permission?('compliance_controls.update') - true + user.has_permission?('compliance_controls.update') end + end diff --git a/app/policies/compliance_control_set_policy.rb b/app/policies/compliance_control_set_policy.rb index 12b829aa4..6288a2ff2 100644 --- a/app/policies/compliance_control_set_policy.rb +++ b/app/policies/compliance_control_set_policy.rb @@ -4,4 +4,20 @@ class ComplianceControlSetPolicy < ApplicationPolicy scope end end + + def destroy? + user.has_permission?('compliance_controls_sets.destroy') + end + + def create? + user.has_permission?('compliance_controls_sets.create') + end + + def update? + user.has_permission?('compliance_controls_sets.update') + end + + def clone? + create? + end end diff --git a/config/locales/compliance_control_sets.en.yml b/config/locales/compliance_control_sets.en.yml index 7361edacf..10c4f5e9a 100644 --- a/config/locales/compliance_control_sets.en.yml +++ b/config/locales/compliance_control_sets.en.yml @@ -17,7 +17,7 @@ en: destroy: Destroy add_compliance_control: Compliance Control add_compliance_control_block: Compliance Control Block - destroy_confirm: Are you sur ? + destroy_confirm: Are you sure ? filters: name: 'Enter name ...' search_no_results: 'No compliance control set found' diff --git a/config/locales/compliance_controls.en.yml b/config/locales/compliance_controls.en.yml index abf1c8f82..9615bbf69 100644 --- a/config/locales/compliance_controls.en.yml +++ b/config/locales/compliance_controls.en.yml @@ -30,6 +30,12 @@ en: title: "Update compliance control" metas: no_prerequisite: "None" + actions: + new: Add + edit: Edit + show: Show + destroy: Destroy + destroy_confirm: Are you sure ? route_control/zdl_stop_area: messages: 3_route_1: "The route with %{source_objectid} objectid connect the stop points %{target_0_label} (%{target_0_objectid}) and %{target_1_label} (%{target_1_objectid}) which belong to the same ZDL" diff --git a/config/locales/compliance_controls.fr.yml b/config/locales/compliance_controls.fr.yml index acb7a6383..e23f879f5 100644 --- a/config/locales/compliance_controls.fr.yml +++ b/config/locales/compliance_controls.fr.yml @@ -29,6 +29,12 @@ fr: title: "Sélectionner un type de contrôle" metas: no_prerequisite: "Aucun" + actions: + new: Ajouter + edit: Editer + show: Consulter + destroy: Supprimer + destroy_confirm: Etes vous sûr de supprimer ce contrôle ? route_control/zdl_stop_area: messages: 3_route_1: "L'itinéraire %{source_objectid} dessert successivement les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}) de la même zone de lieu" diff --git a/spec/policies/compliance_control_policy_spec.rb b/spec/policies/compliance_control_policy_spec.rb index d7c80143d..c66fa8f93 100644 --- a/spec/policies/compliance_control_policy_spec.rb +++ b/spec/policies/compliance_control_policy_spec.rb @@ -2,27 +2,18 @@ require 'rails_helper' RSpec.describe ComplianceControlPolicy do - let(:user) { User.new } - - subject { described_class } - - permissions ".scope" do - pending "add some examples to (or delete) #{__FILE__}" - end - - permissions :show? do - pending "add some examples to (or delete) #{__FILE__}" - end + let( :record ){ build_stubbed :compliance_control } + before { stub_policy_scope(record) } permissions :create? do - pending "add some examples to (or delete) #{__FILE__}" + it_behaves_like 'permitted policy outside referential', 'compliance_controls.create' end permissions :update? do - pending "add some examples to (or delete) #{__FILE__}" + it_behaves_like 'permitted policy outside referential', 'compliance_controls.update' end permissions :destroy? do - pending "add some examples to (or delete) #{__FILE__}" + it_behaves_like 'permitted policy outside referential', 'compliance_controls.destroy' end end diff --git a/spec/policies/compliance_control_set_policy_spec.rb b/spec/policies/compliance_control_set_policy_spec.rb new file mode 100644 index 000000000..6ab0bd60c --- /dev/null +++ b/spec/policies/compliance_control_set_policy_spec.rb @@ -0,0 +1,23 @@ +require 'rails_helper' + +RSpec.describe ComplianceControlSetPolicy do + + let( :record ){ build_stubbed :compliance_control_set } + before { stub_policy_scope(record) } + + permissions :create? do + it_behaves_like 'permitted policy outside referential', 'compliance_controls_sets.create' + end + + permissions :update? do + it_behaves_like 'permitted policy outside referential', 'compliance_controls_sets.update' + end + + permissions :clone? do + it_behaves_like 'permitted policy outside referential', 'compliance_controls_sets.create' + end + + permissions :destroy? do + it_behaves_like 'permitted policy outside referential', 'compliance_controls_sets.destroy' + end +end diff --git a/spec/support/pundit/shared_examples.rb b/spec/support/pundit/shared_examples.rb index 49c6845da..49f915626 100644 --- a/spec/support/pundit/shared_examples.rb +++ b/spec/support/pundit/shared_examples.rb @@ -129,3 +129,23 @@ RSpec.shared_examples 'permitted policy' do end end end + +RSpec.shared_examples 'permitted policy outside referential' do + | permission | + + context 'permission absent → ' do + it "denies user" do + expect_it.not_to permit(user_context, record) + end + end + + context 'permission present → ' do + before do + add_permissions(permission, to_user: user) + end + + it 'allows user' do + expect_it.to permit(user_context, record) + end + end +end
\ No newline at end of file |
