diff options
| author | Luc Donnet | 2018-03-30 18:30:46 +0200 |
|---|---|---|
| committer | GitHub | 2018-03-30 18:30:46 +0200 |
| commit | 48b92a8446d715d5e69fb235d811929fa3f19c07 (patch) | |
| tree | cf2619e6278a07d18c11baebadcfa8916812d990 | |
| parent | c19ceea327dbccef26f50b5f02cc806d193da086 (diff) | |
| parent | 0fe85a4effbfddff399d09d41ed929c235ed310d (diff) | |
| download | chouette-core-48b92a8446d715d5e69fb235d811929fa3f19c07.tar.bz2 | |
Merge pull request #360 from af83/new-uniqueness-validation-for-ccblocks
New uniqueness validation for ccblocks
| -rw-r--r-- | app/controllers/compliance_control_blocks_controller.rb | 8 | ||||
| -rw-r--r-- | app/models/compliance_control_block.rb | 2 | ||||
| -rw-r--r-- | config/locales/compliance_control_blocks.en.yml | 10 | ||||
| -rw-r--r-- | config/locales/compliance_control_blocks.fr.yml | 10 | ||||
| -rw-r--r-- | spec/features/compliance_control_sets_spec.rb | 2 | ||||
| -rw-r--r-- | spec/lib/compliance_control_set_cloner_spec.rb | 2 | ||||
| -rw-r--r-- | spec/lib/compliance_control_set_copier_spec.rb | 2 | ||||
| -rw-r--r-- | spec/models/compliance_control_block_spec.rb | 12 |
8 files changed, 45 insertions, 3 deletions
diff --git a/app/controllers/compliance_control_blocks_controller.rb b/app/controllers/compliance_control_blocks_controller.rb index 9eee8dfaf..b5ba2d65d 100644 --- a/app/controllers/compliance_control_blocks_controller.rb +++ b/app/controllers/compliance_control_blocks_controller.rb @@ -4,6 +4,14 @@ class ComplianceControlBlocksController < ChouetteController belongs_to :compliance_control_set actions :all, :except => [:show, :index] + after_action :display_errors, only: [:create, :update] + + def display_errors + unless @compliance_control_block.errors[:condition_attributes].empty? + flash[:error] = @compliance_control_block.errors[:condition_attributes].join(', ') + end + end + private def compliance_control_block_params diff --git a/app/models/compliance_control_block.rb b/app/models/compliance_control_block.rb index d7d84fd06..bc5d6fd4a 100644 --- a/app/models/compliance_control_block.rb +++ b/app/models/compliance_control_block.rb @@ -12,6 +12,8 @@ class ComplianceControlBlock < ActiveRecord::Base validates :transport_mode, presence: true validates :compliance_control_set, presence: true + validates_uniqueness_of :condition_attributes, scope: :compliance_control_set_id + def name ApplicationController.helpers.transport_mode_text(self) end diff --git a/config/locales/compliance_control_blocks.en.yml b/config/locales/compliance_control_blocks.en.yml index 275f05106..0ec979549 100644 --- a/config/locales/compliance_control_blocks.en.yml +++ b/config/locales/compliance_control_blocks.en.yml @@ -9,6 +9,12 @@ en: compliance_control_blocks: transport_mode: Transport mode sub_transport_mode: Transport submode + errors: + models: + compliance_control_block: + attributes: + condition_attributes: + taken: The same compliance control block already exists in this compliance control set compliance_control_blocks: clone: prefix: 'Copy of' @@ -16,8 +22,12 @@ en: destroy_confirm: Are you sure you want to destroy this block ? new: title: Create a control block + create: + title: Create a control block edit: title: "Edit the control block : %{name}" + update: + title: "Edit the control block : %{name}" metas: control: zero: "No controls" diff --git a/config/locales/compliance_control_blocks.fr.yml b/config/locales/compliance_control_blocks.fr.yml index a6720881f..5ce5b4729 100644 --- a/config/locales/compliance_control_blocks.fr.yml +++ b/config/locales/compliance_control_blocks.fr.yml @@ -9,6 +9,12 @@ fr: compliance_control_blocks: transport_mode: Mode de transport transport_submode: Sous-mode de transport + errors: + models: + compliance_control_block: + attributes: + condition_attributes: + taken: Un groupe de contrôle identique existe déjà au sein de ce jeu de contrôles compliance_control_blocks: clone: prefix: 'Copie de' @@ -16,8 +22,12 @@ fr: destroy_confirm: Etes vous sûr de supprimer ce bloc ? new: title: Créer un groupe de contrôle(s) + create: + title: Créer un groupe de contrôle(s) edit: title: "Editer le groupe de contrôle : %{name}" + update: + title: "Editer le groupe de contrôle : %{name}" metas: control: zero: "Aucun contrôle" diff --git a/spec/features/compliance_control_sets_spec.rb b/spec/features/compliance_control_sets_spec.rb index 0f4597db3..306f363a5 100644 --- a/spec/features/compliance_control_sets_spec.rb +++ b/spec/features/compliance_control_sets_spec.rb @@ -12,7 +12,7 @@ RSpec.describe "ComplianceControlSets", type: :feature do let(:other_control_cset) { create :compliance_control_set, organisation: other_orga } let(:blox){ - 2.times.map{ | _ | create :compliance_control_block, compliance_control_set: control_set } + 2.times.map{ |n| create :compliance_control_block, compliance_control_set: control_set, transport_mode: StifTransportModeEnumerations.transport_modes[n], transport_submode: StifTransportSubmodeEnumerations.transport_submodes[n] } } before do diff --git a/spec/lib/compliance_control_set_cloner_spec.rb b/spec/lib/compliance_control_set_cloner_spec.rb index 7efe27659..0d3561e0e 100644 --- a/spec/lib/compliance_control_set_cloner_spec.rb +++ b/spec/lib/compliance_control_set_cloner_spec.rb @@ -49,7 +49,7 @@ RSpec.describe ComplianceControlSetCloner do context 'Directed Acyclic Graph is copied correctly' do let(:source_blox){ - 3.times.map{ |_| create :compliance_control_block, compliance_control_set: source_set } + 3.times.map{ |n| create :compliance_control_block, compliance_control_set: source_set, transport_mode: StifTransportModeEnumerations.transport_modes[n], transport_submode: StifTransportSubmodeEnumerations.transport_submodes[n] } } let(:direct_ccs){ 3.times.map{ |n| create :generic_attribute_control_min_max, compliance_control_set: source_set, name: "direct #{n.succ}", code: "direct-#{n.succ}" } diff --git a/spec/lib/compliance_control_set_copier_spec.rb b/spec/lib/compliance_control_set_copier_spec.rb index 0f15d86d0..d1a56cd7f 100644 --- a/spec/lib/compliance_control_set_copier_spec.rb +++ b/spec/lib/compliance_control_set_copier_spec.rb @@ -23,7 +23,7 @@ RSpec.describe ComplianceControlSetCopier do context 'Directed Acyclic Graph is copied correctly' do let(:cc_blox){ - 3.times.map{ |_| create :compliance_control_block, compliance_control_set: cc_set } + 3.times.map{ |n| create :compliance_control_block, compliance_control_set: cc_set, transport_mode: StifTransportModeEnumerations.transport_modes[n], transport_submode: StifTransportSubmodeEnumerations.transport_submodes[n] } } let!(:direct_ccs){ 3.times.map{ |n| create :compliance_control, compliance_control_set: cc_set, name: "direct #{n.succ}", code: "direct-#{n.succ}" } diff --git a/spec/models/compliance_control_block_spec.rb b/spec/models/compliance_control_block_spec.rb index 4abe0ed9c..089d78434 100644 --- a/spec/models/compliance_control_block_spec.rb +++ b/spec/models/compliance_control_block_spec.rb @@ -17,4 +17,16 @@ RSpec.describe ComplianceControlBlock, type: :model do it { should_not allow_values( *%w{ demandResponseBus nightus irportLinkBus highrequencyBus expressBUs Shuttle suburban regioalRail interregion4lRail }) .for(:transport_submode) } + + context "transport mode & submode uniqueness" do + let(:cc_block) {create :compliance_control_block, transport_mode: 'bus', transport_submode: 'nightBus'} + let(:cc_set1) { cc_block.compliance_control_set } + let(:cc_set2) { create :compliance_control_set } + + it "sould be unique in a compliance control set" do + expect( ComplianceControlBlock.new(transport_mode: 'bus', transport_submode: 'nightBus', compliance_control_set: cc_set1) ).not_to be_valid + expect( ComplianceControlBlock.new(transport_mode: 'bus', transport_submode: 'nightBus', compliance_control_set: cc_set2) ).to be_valid + end + +end end |
