aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuillaume2017-09-18 11:11:36 +0200
committerGuillaume2017-09-18 11:11:36 +0200
commit06ad1bb051cabb4575306f7397287ea77d70e109 (patch)
tree83c794c3120fd8b7413b749cba2a5553dff756bf
parent1e58dfdbfbecccda78e2fe3854b2ba04a72bd511 (diff)
parent60ad22fa8db3c1f2cbfe532a73deca4b97232a25 (diff)
downloadchouette-core-06ad1bb051cabb4575306f7397287ea77d70e109.tar.bz2
Merge branch '4467_compliance_control_crud' into 4466-compliance_control_sets
-rw-r--r--app/controllers/compliance_controls_controller.rb22
-rw-r--r--app/models/compliance_control.rb1
-rw-r--r--app/models/compliance_control_set.rb1
-rw-r--r--app/views/compliance_controls/edit.html.slim0
-rw-r--r--app/views/compliance_controls/index.html.slim0
-rw-r--r--app/views/compliance_controls/new.html.slim0
-rw-r--r--app/views/compliance_controls/show.html.slim0
-rw-r--r--config/routes.rb4
-rw-r--r--spec/controllers/compliance_controls_controller_spec.rb59
-rw-r--r--spec/factories/compliance_controls.rb4
-rw-r--r--spec/models/compliance_control_set_spec.rb1
11 files changed, 90 insertions, 2 deletions
diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb
new file mode 100644
index 000000000..d198f2cdb
--- /dev/null
+++ b/app/controllers/compliance_controls_controller.rb
@@ -0,0 +1,22 @@
+class ComplianceControlsController < BreadcrumbController
+ defaults resource_class: ComplianceControl
+ belongs_to :compliance_control_set
+
+ def create
+ create!(notice: t('notice.compliance_control.created'))
+ end
+
+ def update
+ path = compliance_control_set_compliance_control_path(parent, resource)
+ update!(notice: t('notice.compliance_control.updated')) { path }
+ end
+
+ def destroy
+ destroy!(notice: t('notice.compliance_control.destroyed'))
+ end
+
+ private
+ def compliance_control_params
+ params.require(:compliance_control).permit(:name, :code, :criticity, :comment, :control_attributes)
+ end
+end
diff --git a/app/models/compliance_control.rb b/app/models/compliance_control.rb
index 64556b524..685a00706 100644
--- a/app/models/compliance_control.rb
+++ b/app/models/compliance_control.rb
@@ -3,6 +3,7 @@ class ComplianceControl < ActiveRecord::Base
belongs_to :compliance_control_block
enum criticity: [:info, :warning, :error]
+
validates :criticity, presence: true
validates :name, presence: true
validates :code, presence: true
diff --git a/app/models/compliance_control_set.rb b/app/models/compliance_control_set.rb
index 7801eb612..ca112531d 100644
--- a/app/models/compliance_control_set.rb
+++ b/app/models/compliance_control_set.rb
@@ -1,3 +1,4 @@
class ComplianceControlSet < ActiveRecord::Base
belongs_to :organisation
+ has_many :compliance_controls
end
diff --git a/app/views/compliance_controls/edit.html.slim b/app/views/compliance_controls/edit.html.slim
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/app/views/compliance_controls/edit.html.slim
diff --git a/app/views/compliance_controls/index.html.slim b/app/views/compliance_controls/index.html.slim
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/app/views/compliance_controls/index.html.slim
diff --git a/app/views/compliance_controls/new.html.slim b/app/views/compliance_controls/new.html.slim
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/app/views/compliance_controls/new.html.slim
diff --git a/app/views/compliance_controls/show.html.slim b/app/views/compliance_controls/show.html.slim
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/app/views/compliance_controls/show.html.slim
diff --git a/config/routes.rb b/config/routes.rb
index 314f99888..97e0257c2 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -71,6 +71,10 @@ ChouetteIhm::Application.routes.draw do
resources :api_keys, :only => [:edit, :update, :new, :create, :destroy]
+ resources :compliance_control_sets do
+ resources :compliance_controls
+ end
+
resources :stop_area_referentials, :only => [:show] do
post :sync, on: :member
resources :stop_areas
diff --git a/spec/controllers/compliance_controls_controller_spec.rb b/spec/controllers/compliance_controls_controller_spec.rb
new file mode 100644
index 000000000..165c00329
--- /dev/null
+++ b/spec/controllers/compliance_controls_controller_spec.rb
@@ -0,0 +1,59 @@
+require 'rails_helper'
+
+RSpec.describe ComplianceControlsController, type: :controller do
+ login_user
+
+ let(:compliance_control) { create :compliance_control }
+ let(:compliance_control_set) { compliance_control.compliance_control_set }
+
+ describe "GET show" do
+ it 'should be successful' do
+ get :show, compliance_control_set_id: compliance_control_set.id, id: compliance_control.id
+ expect(response).to be_success
+ end
+ end
+
+ describe "GET index" do
+ it 'should be successful' do
+ get :index, compliance_control_set_id: compliance_control_set.id
+ expect(response).to be_success
+ end
+ end
+
+ describe 'GET #edit' do
+ it 'should be successful' do
+ get :edit, compliance_control_set_id: compliance_control_set.id, id: compliance_control.id
+ expect(response).to be_success
+ end
+ end
+
+ describe 'GET #new' do
+ it 'should be successful' do
+ get :new, compliance_control_set_id: compliance_control_set.id
+ expect(response).to be_success
+ end
+ end
+
+ describe 'POST #create' do
+ it 'should be successful' do
+ post :create, compliance_control_set_id: compliance_control_set.id, compliance_control: build(:compliance_control).as_json
+ expect(response).to have_http_status(302)
+ expect(flash[:notice]).to eq(I18n.t('notice.compliance_control.created'))
+ end
+ end
+
+ describe 'POST #update' do
+ it 'should be successful' do
+ post :update, compliance_control_set_id: compliance_control_set.id, id: compliance_control.id, compliance_control: compliance_control.as_json
+ expect(response).to redirect_to compliance_control_set_compliance_control_path(compliance_control_set, compliance_control)
+ expect(flash[:notice]).to eq(I18n.t('notice.compliance_control.updated'))
+ end
+ end
+
+ describe 'DELETE #destroy' do
+ it 'should be successful' do
+ delete :destroy, compliance_control_set_id: compliance_control_set.id, id: compliance_control.id
+ expect(flash[:notice]).to eq I18n.t('notice.compliance_control.destroyed')
+ end
+ end
+end
diff --git a/spec/factories/compliance_controls.rb b/spec/factories/compliance_controls.rb
index 28b760383..8aa16b674 100644
--- a/spec/factories/compliance_controls.rb
+++ b/spec/factories/compliance_controls.rb
@@ -1,8 +1,8 @@
FactoryGirl.define do
factory :compliance_control do
sequence(:name) { |n| "Compliance control #{n}" }
- type "Type"
- criticity :info
+ type "ComplianceControl"
+ criticity :warning
code "code"
comment "Text"
association :compliance_control_set
diff --git a/spec/models/compliance_control_set_spec.rb b/spec/models/compliance_control_set_spec.rb
index fb46bc65a..8ec57fdc0 100644
--- a/spec/models/compliance_control_set_spec.rb
+++ b/spec/models/compliance_control_set_spec.rb
@@ -6,4 +6,5 @@ RSpec.describe ComplianceControlSet, type: :model do
end
it { should belong_to :organisation }
+ it { should have_many :compliance_controls }
end