aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/compliance_control_blocks_controller.rb41
-rw-r--r--app/controllers/compliance_controls_controller.rb13
-rw-r--r--app/decorators/compliance_control_set_decorator.rb2
-rw-r--r--app/models/compliance_check_resource.rb3
-rw-r--r--app/models/compliance_check_set.rb2
-rw-r--r--app/models/compliance_control_set.rb1
-rw-r--r--app/models/concerns/stif_netex_attributes_support.rb2
-rw-r--r--app/views/compliance_control_blocks/_form.html.slim9
-rw-r--r--app/views/compliance_control_blocks/edit.html.slim11
-rw-r--r--app/views/compliance_control_blocks/new.html.slim11
-rw-r--r--app/views/compliance_controls/select_type.html.slim8
-rw-r--r--config/locales/compliance_control_blocks.en.yml15
-rw-r--r--config/locales/compliance_control_blocks.fr.yml15
-rw-r--r--config/routes.rb5
-rw-r--r--db/migrate/20170928144257_add_status_to_compliance_check_message.rb5
-rw-r--r--db/migrate/20170928144740_add_compliance_check_set_to_compliance_check_resource.rb5
-rw-r--r--lib/stif/permission_translator.rb1
-rw-r--r--spec/controllers/compliance_control_blocks_controller_spec.rb47
-rw-r--r--spec/controllers/compliance_controls_controller_spec.rb9
-rw-r--r--spec/factories/compliance_check_resources.rb1
-rw-r--r--spec/models/compliance_check_resource_spec.rb2
-rw-r--r--spec/support/permissions.rb29
22 files changed, 213 insertions, 24 deletions
diff --git a/app/controllers/compliance_control_blocks_controller.rb b/app/controllers/compliance_control_blocks_controller.rb
new file mode 100644
index 000000000..2456eceba
--- /dev/null
+++ b/app/controllers/compliance_control_blocks_controller.rb
@@ -0,0 +1,41 @@
+class ComplianceControlBlocksController < BreadcrumbController
+ defaults resource_class: ComplianceControlBlock
+ belongs_to :compliance_control_set
+
+ def new
+ @compliance_control_set = parent
+ @compliance_control_block = ComplianceControlBlock.new(compliance_control_set: @compliance_control_set)
+ end
+
+ def create
+ create! do |success, failure|
+ success.html { redirect_to compliance_control_set_path(@compliance_control_set) }
+ failure.html { render :action => :new }
+ end
+ end
+
+ def update
+ update! do |success, failure|
+ success.html { redirect_to compliance_control_set_path(@compliance_control_set) }
+ failure.html { render :action => :edit }
+ end
+ end
+
+ def destroy
+ destroy! do |format|
+ format.html { redirect_to compliance_control_set_path(@compliance_control_set) }
+ end
+ end
+
+ private
+
+ def create_resource compliance_control_block
+ compliance_control_block.transport_mode = params[:compliance_control_block][:transport_mode]
+ super
+ end
+
+ def compliance_control_block_params
+ params.require(:compliance_control_block).permit(:transport_mode)
+ end
+
+end \ No newline at end of file
diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb
index 846dbb253..be8b773e2 100644
--- a/app/controllers/compliance_controls_controller.rb
+++ b/app/controllers/compliance_controls_controller.rb
@@ -2,15 +2,14 @@ class ComplianceControlsController < BreadcrumbController
defaults resource_class: ComplianceControl
belongs_to :compliance_control_set
- def new
- @compliance_control_set = parent
- @compliance_control = GenericAttributeControl::MinMax.new
- @compliance_control.build_compliance_control_block
+ def select_type
+ @sti_subclasses = ComplianceControl.subclasses
end
- def update
- path = compliance_control_set_compliance_control_path(parent, resource)
- update!(notice: t('notice.compliance_control.updated')) { path }
+ def new
+ redirect_to(action: :select_type) unless params[:sti_class]
+ @compliance_control_set = parent
+ @compliance_control = params[:sti_class].constantize.new
end
private
diff --git a/app/decorators/compliance_control_set_decorator.rb b/app/decorators/compliance_control_set_decorator.rb
index f9e4de836..6a9040358 100644
--- a/app/decorators/compliance_control_set_decorator.rb
+++ b/app/decorators/compliance_control_set_decorator.rb
@@ -23,7 +23,7 @@ class ComplianceControlSetDecorator < Draper::Decorator
# if h.policy(ComplianceControl).create?
links << Link.new(
content: h.t('compliance_control_sets.actions.add_compliance_control'),
- href: h.new_compliance_control_set_compliance_control_path(object.id)
+ href: h.select_type_compliance_control_set_compliance_controls_path(object.id)
)
# end
links
diff --git a/app/models/compliance_check_resource.rb b/app/models/compliance_check_resource.rb
index 7826f00c3..a5c0c7d27 100644
--- a/app/models/compliance_check_resource.rb
+++ b/app/models/compliance_check_resource.rb
@@ -1,5 +1,8 @@
class ComplianceCheckResource < ActiveRecord::Base
extend Enumerize
+ belongs_to :compliance_check_set
enumerize :status, in: %w[new successful warning failed]
+
+ validates_presence_of :compliance_check_set
end
diff --git a/app/models/compliance_check_set.rb b/app/models/compliance_check_set.rb
index 3c62221f0..f1f4a9f94 100644
--- a/app/models/compliance_check_set.rb
+++ b/app/models/compliance_check_set.rb
@@ -6,6 +6,8 @@ class ComplianceCheckSet < ActiveRecord::Base
belongs_to :workbench
belongs_to :parent, polymorphic: true
+ has_many :compliance_check_set
+
enumerize :status, in: %w[new pending successful warning failed running aborted canceled]
scope :where_created_at_between, ->(start_date, end_date) do
diff --git a/app/models/compliance_control_set.rb b/app/models/compliance_control_set.rb
index f8f491cba..40e269146 100644
--- a/app/models/compliance_control_set.rb
+++ b/app/models/compliance_control_set.rb
@@ -1,5 +1,6 @@
class ComplianceControlSet < ActiveRecord::Base
belongs_to :organisation
+ has_many :compliance_control_blocks, dependent: :destroy
has_many :compliance_controls, dependent: :destroy
validates :name, presence: true
diff --git a/app/models/concerns/stif_netex_attributes_support.rb b/app/models/concerns/stif_netex_attributes_support.rb
index 0d569b613..076acf491 100644
--- a/app/models/concerns/stif_netex_attributes_support.rb
+++ b/app/models/concerns/stif_netex_attributes_support.rb
@@ -49,7 +49,7 @@ module StifNetexAttributesSupport
end
def provider_id
- self.referential.workbench.organisation.name.parameterize.underscore
+ self.referential.workbench.organisation.code.underscore.parameterize
end
def boiv_id
diff --git a/app/views/compliance_control_blocks/_form.html.slim b/app/views/compliance_control_blocks/_form.html.slim
new file mode 100644
index 000000000..b20b5d0cc
--- /dev/null
+++ b/app/views/compliance_control_blocks/_form.html.slim
@@ -0,0 +1,9 @@
+= simple_form_for [@compliance_control_set, @compliance_control_block], html: { class: 'form-horizontal', id: 'compliance_control_block_form' }, wrapper: :horizontal_form do |f|
+ .row
+ .col-lg-12
+ = f.input :transport_mode, as: :select, collection: ComplianceControlBlock.transport_modes
+ / = f.input :sub_transport_mode
+
+ .separator
+
+ = f.button :submit, t('actions.submit'), class: 'btn btn-default formSubmitr', form: 'compliance_control_block_form'
diff --git a/app/views/compliance_control_blocks/edit.html.slim b/app/views/compliance_control_blocks/edit.html.slim
new file mode 100644
index 000000000..fbd42e7f3
--- /dev/null
+++ b/app/views/compliance_control_blocks/edit.html.slim
@@ -0,0 +1,11 @@
+/ PageHeader
+= pageheader 'modele-calendrier',
+ t('compliance_control_blocks.edit.title')
+
+
+/ PageContent
+.page_content
+ .container-fluid
+ .row
+ .col-lg-8.col-lg-offset-2.col-md-8.col-md-offset-2.col-sm-10.col-sm-offset-1
+ = render 'form' \ No newline at end of file
diff --git a/app/views/compliance_control_blocks/new.html.slim b/app/views/compliance_control_blocks/new.html.slim
new file mode 100644
index 000000000..654a0dc7f
--- /dev/null
+++ b/app/views/compliance_control_blocks/new.html.slim
@@ -0,0 +1,11 @@
+/ PageHeader
+= pageheader 'modele-calendrier',
+ t('compliance_control_blocks.new.title')
+
+
+/ PageContent
+.page_content
+ .container-fluid
+ .row
+ .col-lg-8.col-lg-offset-2.col-md-8.col-md-offset-2.col-sm-10.col-sm-offset-1
+ = render 'form' \ No newline at end of file
diff --git a/app/views/compliance_controls/select_type.html.slim b/app/views/compliance_controls/select_type.html.slim
new file mode 100644
index 000000000..66a38279d
--- /dev/null
+++ b/app/views/compliance_controls/select_type.html.slim
@@ -0,0 +1,8 @@
+= form_tag(new_compliance_control_set_compliance_control_path, method: :get) do
+ - @sti_subclasses.each do |klass|
+ = radio_button_tag(:sti_class, klass)
+ = label_tag(:sti_class, klass)
+ end
+ = submit_tag("suivant")
+end
+
diff --git a/config/locales/compliance_control_blocks.en.yml b/config/locales/compliance_control_blocks.en.yml
new file mode 100644
index 000000000..8d5667df4
--- /dev/null
+++ b/config/locales/compliance_control_blocks.en.yml
@@ -0,0 +1,15 @@
+fr:
+ activerecord:
+ models:
+ compliance_control_blocks: Control blocks
+ attributes:
+ compliance_control_blocks:
+ transport_mode: Transport mode
+ sub_transport_mode: Transport submode
+ compliance_control_blocks:
+ actions:
+ destroy_confirm: Are you sure you want to destroy this block ?
+ new:
+ title: Create a control block
+ edit:
+ title: "Edit the control block : %{compliance_control_block}" \ No newline at end of file
diff --git a/config/locales/compliance_control_blocks.fr.yml b/config/locales/compliance_control_blocks.fr.yml
new file mode 100644
index 000000000..beb2497b2
--- /dev/null
+++ b/config/locales/compliance_control_blocks.fr.yml
@@ -0,0 +1,15 @@
+fr:
+ activerecord:
+ models:
+ compliance_control_blocks: Groupes de contrôles
+ attributes:
+ compliance_control_blocks:
+ transport_mode: Mode de transport
+ sub_transport_mode: Sous-mode de transport
+ compliance_control_blocks:
+ actions:
+ destroy_confirm: Etes vous sûr de supprimer ce bloc ?
+ new:
+ title: Créer un groupe de contrôle(s)
+ edit:
+ title: "Editer le groupe de contrôle : %{compliance_control_block}" \ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index 9ee85d6e8..cc3896da9 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -72,7 +72,10 @@ ChouetteIhm::Application.routes.draw do
resources :api_keys, :only => [:edit, :update, :new, :create, :destroy]
resources :compliance_control_sets do
- resources :compliance_controls, except: :index
+ resources :compliance_controls, except: :index do
+ get :select_type, on: :collection
+ end
+ resources :compliance_control_blocks, :except => [:show, :index]
end
resources :stop_area_referentials, :only => [:show] do
diff --git a/db/migrate/20170928144257_add_status_to_compliance_check_message.rb b/db/migrate/20170928144257_add_status_to_compliance_check_message.rb
new file mode 100644
index 000000000..bb4101229
--- /dev/null
+++ b/db/migrate/20170928144257_add_status_to_compliance_check_message.rb
@@ -0,0 +1,5 @@
+class AddStatusToComplianceCheckMessage < ActiveRecord::Migration
+ def change
+ add_column :compliance_check_messages, :status, :string
+ end
+end
diff --git a/db/migrate/20170928144740_add_compliance_check_set_to_compliance_check_resource.rb b/db/migrate/20170928144740_add_compliance_check_set_to_compliance_check_resource.rb
new file mode 100644
index 000000000..0abcc6ae4
--- /dev/null
+++ b/db/migrate/20170928144740_add_compliance_check_set_to_compliance_check_resource.rb
@@ -0,0 +1,5 @@
+class AddComplianceCheckSetToComplianceCheckResource < ActiveRecord::Migration
+ def change
+ add_reference :compliance_check_resources, :compliance_check_set, index: true, foreign_key: true
+ end
+end
diff --git a/lib/stif/permission_translator.rb b/lib/stif/permission_translator.rb
index 095f726bd..121e89694 100644
--- a/lib/stif/permission_translator.rb
+++ b/lib/stif/permission_translator.rb
@@ -30,6 +30,7 @@ module Stif
api_keys
compliance_controls
compliance_controls_sets
+ compliance_controls_blocks
compliance_check_sets
]
end
diff --git a/spec/controllers/compliance_control_blocks_controller_spec.rb b/spec/controllers/compliance_control_blocks_controller_spec.rb
new file mode 100644
index 000000000..54617e768
--- /dev/null
+++ b/spec/controllers/compliance_control_blocks_controller_spec.rb
@@ -0,0 +1,47 @@
+require 'rails_helper'
+
+RSpec.describe ComplianceControlBlocksController, type: :controller do
+ login_user
+
+
+ let(:compliance_control_block) { create(:compliance_control_block) }
+ let!(:compliance_control_set) { compliance_control_block.compliance_control_set }
+ let(:compliance_control_block_params) { compliance_control_block.as_json.merge(transport_mode: "bus") }
+
+ describe 'GET #new' do
+ it 'should be successful' do
+ get :new, compliance_control_set_id: compliance_control_set.id, id: compliance_control_block.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_block: compliance_control_block_params
+ expect(response).to redirect_to compliance_control_set_path(compliance_control_set)
+ end
+ end
+
+ describe 'GET #edit' do
+ it 'should be successful' do
+ get :edit, compliance_control_set_id: compliance_control_set.id, id: compliance_control_block.id
+ expect(response).to be_success
+ end
+ end
+
+ describe 'POST #update' do
+ it 'should be successful' do
+ post :update, compliance_control_set_id: compliance_control_set.id, id: compliance_control_block.id, compliance_control_block: compliance_control_block_params
+ expect(response).to redirect_to compliance_control_set_path(compliance_control_set)
+ end
+ end
+
+ describe 'DELETE #destroy' do
+ it 'should be successful' do
+ expect {
+ delete :destroy, compliance_control_set_id: compliance_control_set.id, id: compliance_control_block.id
+ }.to change(ComplianceControlBlock, :count).by(-1)
+ expect(response).to redirect_to compliance_control_set_path(compliance_control_set)
+ end
+ end
+end
diff --git a/spec/controllers/compliance_controls_controller_spec.rb b/spec/controllers/compliance_controls_controller_spec.rb
index a39408ccb..d8368c3d0 100644
--- a/spec/controllers/compliance_controls_controller_spec.rb
+++ b/spec/controllers/compliance_controls_controller_spec.rb
@@ -24,7 +24,14 @@ RSpec.describe ComplianceControlsController, type: :controller do
describe 'GET #new' do
it 'should be successful' do
- get :new, compliance_control_set_id: compliance_control_set.id
+ get :new, compliance_control_set_id: compliance_control_set.id, sti_class: 'GenericAttributeControl::MinMax'
+ expect(response).to be_success
+ end
+ end
+
+ describe 'GET #select_type' do
+ it 'should be successful' do
+ get :select_type, compliance_control_set_id: compliance_control_set.id
expect(response).to be_success
end
end
diff --git a/spec/factories/compliance_check_resources.rb b/spec/factories/compliance_check_resources.rb
index 813153be2..95be48de4 100644
--- a/spec/factories/compliance_check_resources.rb
+++ b/spec/factories/compliance_check_resources.rb
@@ -2,5 +2,6 @@ FactoryGirl.define do
factory :compliance_check_resource do
status :new
sequence(:name) { |n| "Compliance check resource #{n}" }
+ association :compliance_check_set
end
end
diff --git a/spec/models/compliance_check_resource_spec.rb b/spec/models/compliance_check_resource_spec.rb
index a9366bea2..40e209db0 100644
--- a/spec/models/compliance_check_resource_spec.rb
+++ b/spec/models/compliance_check_resource_spec.rb
@@ -4,4 +4,6 @@ RSpec.describe ComplianceCheckResource, type: :model do
it 'should have a valid factory' do
expect(FactoryGirl.build(:compliance_check_resource)).to be_valid
end
+
+ it { should validate_presence_of(:compliance_check_set) }
end
diff --git a/spec/support/permissions.rb b/spec/support/permissions.rb
index 13666aca3..7d09e16cb 100644
--- a/spec/support/permissions.rb
+++ b/spec/support/permissions.rb
@@ -13,19 +13,22 @@ module Support
def _permitted_resources
%w[
- api_keys
- access_points
- connection_links
- calendars
- footnotes
- imports
- journey_patterns
- referentials
- routes
- routing_constraint_zones
- time_tables
- vehicle_journeys
- compliance_controls
+ access_points
+ connection_links
+ calendars
+ footnotes
+ imports
+ journey_patterns
+ referentials
+ routes
+ routing_constraint_zones
+ time_tables
+ vehicle_journeys
+ api_keys
+ compliance_controls
+ compliance_controls_sets
+ compliance_controls_blocks
+ compliance_check_sets
]
end
end