aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/decorators/compliance_control_decorator.rb36
-rw-r--r--app/decorators/compliance_control_set_decorator.rb23
-rw-r--r--app/policies/compliance_control_policy.rb10
-rw-r--r--app/policies/compliance_control_set_policy.rb16
-rw-r--r--config/locales/compliance_control_sets.en.yml2
-rw-r--r--config/locales/compliance_controls.en.yml6
-rw-r--r--config/locales/compliance_controls.fr.yml6
-rw-r--r--spec/policies/compliance_control_policy_spec.rb19
-rw-r--r--spec/policies/compliance_control_set_policy_spec.rb23
-rw-r--r--spec/support/pundit/shared_examples.rb20
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 41971d9e9..44034f122 100644
--- a/config/locales/compliance_controls.en.yml
+++ b/config/locales/compliance_controls.en.yml
@@ -25,6 +25,12 @@ en:
title: "Add a new compliance control"
edit:
title: "Update compliance control"
+ 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 3fa83a147..88e26c152 100644
--- a/config/locales/compliance_controls.fr.yml
+++ b/config/locales/compliance_controls.fr.yml
@@ -25,6 +25,12 @@ fr:
title: "Editer un contrôle"
select_type:
title: "Sélectionner un type de contrôle"
+ 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