diff options
| author | cedricnjanga | 2017-10-25 12:22:00 +0200 | 
|---|---|---|
| committer | cedricnjanga | 2017-11-09 12:27:09 +0100 | 
| commit | 464a5c70450e4054c12f4d5b58477bb9386917f2 (patch) | |
| tree | 7d5cbfe36958f26c9fae1f0464e7dfcc19b64337 | |
| parent | 4dbe0a7b5acf4e244016d58d59a96aca36035263 (diff) | |
| download | chouette-core-464a5c70450e4054c12f4d5b58477bb9386917f2.tar.bz2 | |
Refs #4776 Add policies to ComplianceControl and ComplianceControlSet
| -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 | 
