diff options
| author | Robert | 2017-10-13 18:17:00 +0200 | 
|---|---|---|
| committer | Robert | 2017-10-16 07:50:34 +0200 | 
| commit | 9dd7b4d050b64b6fcaebb2cd3f635593a0cb34c3 (patch) | |
| tree | d20fb589df06d01e46fa8ef4c5313c8cdc7aff94 | |
| parent | c266ee913353d67a3674ed6188c2ff96b44407c1 (diff) | |
| download | chouette-core-9dd7b4d050b64b6fcaebb2cd3f635593a0cb34c3.tar.bz2 | |
Refs: #4720@1.3h;
   Validation implemented for min_max_values with correct I18n'd error messages
Applied to: VehicleJourneyControl::Speed & GenericAttributeControl::MinMax
10 files changed, 139 insertions, 42 deletions
| diff --git a/app/assets/stylesheets/components/_referential_suites.sass b/app/assets/stylesheets/components/_referential_suites.sass new file mode 100644 index 000000000..5e564ea8e --- /dev/null +++ b/app/assets/stylesheets/components/_referential_suites.sass @@ -0,0 +1,69 @@ +table.calendar +  display: table +  width: 100% +  table-layout: fixed +  margin-bottom: 20px + +  th, td +    border: 1px solid $darkgrey +    text-align: center +    padding: 0.35em 0.5em + +  th +    padding: 0.5em + +  thead +    tr +      > th +        border: none + +      &:first-child +        text-transform: uppercase + +  tbody +    tr > td +      &.weekNumber +        border: none +        padding: 0.5em 0.5em 0.5em 0 + +      &.outsideMonth +        color: rgba($darkgrey, 0.35) + +      &.weekend +        font-weight: bold + +      &.selected_period, &.selected_date, &.overlaped_date +        > a +          display: block +          margin: 0 auto +          width: 24px +          height: 24px +          line-height: 24px +          color: $darkgrey +          background-color: rgba($gold, 0.75) +          border-radius: 50% + +          &:hover, &:focus +            color: $darkgrey +            text-decoration: none + +.col-xs-6 +  &:nth-child(2n +1) +    clear: both + +.col-sm-4 +  @media (min-width: 768px) +    &:nth-child(2n +1) +      clear: none +    &:nth-child(3n+1) +      clear: both + +// .col-md-4 +//   @media (min-width: 992px) + +.col-lg-3 +  @media (min-width: 1200px) +    &:nth-child(2n +1), &:nth-child(3n+1) +      clear: none +    &:nth-child(4n+1) +      clear: both diff --git a/app/models/concerns/min_max_values_validation.rb b/app/models/concerns/min_max_values_validation.rb new file mode 100644 index 000000000..c177e55ca --- /dev/null +++ b/app/models/concerns/min_max_values_validation.rb @@ -0,0 +1,13 @@ +module MinMaxValuesValidation +  extend ActiveSupport::Concern + +  included do +    validate :min_max_values_validation +  end + +  def min_max_values_validation +    return true unless minimum && maximum +    return true unless maximum < minimum +    errors.add(:min_max_values, I18n.t('compliance_controls.min_max_values', min: minimum, max: maximum)) +  end +end diff --git a/app/models/generic_attribute_control/min_max.rb b/app/models/generic_attribute_control/min_max.rb index c46ba0453..1f75c2edb 100644 --- a/app/models/generic_attribute_control/min_max.rb +++ b/app/models/generic_attribute_control/min_max.rb @@ -5,10 +5,7 @@ module GenericAttributeControl      validates :minimum, numericality: true, allow_nil: true      validates :maximum, numericality: true, allow_nil: true      #validates :target, presence: true -    validate :min_max_values -    def min_max_values -      true -    end +    include MinMaxValuesValidation      class << self        def attribute_type; :integer end diff --git a/app/models/vehicle_journey_control/speed.rb b/app/models/vehicle_journey_control/speed.rb index 099a46d1d..be9f838e4 100644 --- a/app/models/vehicle_journey_control/speed.rb +++ b/app/models/vehicle_journey_control/speed.rb @@ -4,6 +4,7 @@ module VehicleJourneyControl      validates :minimum, numericality: true, allow_nil: true      validates :maximum, numericality: true, allow_nil: true +    include MinMaxValuesValidation      def self.default_code; "3-VehicleJourney-2" end    end diff --git a/config/locales/compliance_controls.en.yml b/config/locales/compliance_controls.en.yml index cee83afee..02235be33 100644 --- a/config/locales/compliance_controls.en.yml +++ b/config/locales/compliance_controls.en.yml @@ -1,5 +1,6 @@  en:    compliance_controls: +    min_max_values: "the minimum (%{min}) is not supposed to be greater than the maximum (%{max})"      errors:        incoherent_control_sets: "Impossible to assign a control to a set (id: %{direct_set_name}) differing from the one of its group (id: %{indirect_set_name})"      show: diff --git a/config/locales/compliance_controls.fr.yml b/config/locales/compliance_controls.fr.yml index 1f60e0fbc..ce9d15cab 100644 --- a/config/locales/compliance_controls.fr.yml +++ b/config/locales/compliance_controls.fr.yml @@ -1,5 +1,6 @@  fr:    compliance_controls: +    min_max_values: "la valeur de minimum (%{min}) ne doit pas être superieur à la valuer du maximum (%{max})"      errors:        incoherent_control_sets: "Le contrôle ne peut pas être associé à un jeu de contrôle (id: %{direct_set_name}) différent de celui de son groupe (id: %{indirect_set_name})"        mandatory_control_type: "Un type de contrôle doit être sélectionné" diff --git a/spec/models/compliance_control_validations/genric_attribute_validation/min_max_validation_spec.rb b/spec/models/compliance_control_validations/genric_attribute_validation/min_max_validation_spec.rb index 409475a46..4d30d61e3 100644 --- a/spec/models/compliance_control_validations/genric_attribute_validation/min_max_validation_spec.rb +++ b/spec/models/compliance_control_validations/genric_attribute_validation/min_max_validation_spec.rb @@ -3,42 +3,6 @@ RSpec.describe GenericAttributeControl::MinMax do    let( :factory ){ :generic_attribute_control_min_max }    subject{ build factory } -  context "is valid" do -    it 'if no value is provided' do -      expect_it.to be_valid -    end -    it 'if minimum is provided alone' do -      subject.minimum = 42 -      expect_it.to be_valid -    end -    it 'if maximum is provided alone' do -      subject.maximum = 42 -      expect_it.to be_valid -    end - -    it 'if maximum is not smaller than minimum' do -      100.times do -        min = random_int -        max = min + random_int(20) -        subject.assign_attributes maximum: max, minimum: min -        subject.assign_attributes maximum: min, minimum: min -        expect_it.to be_valid -      end -    end -  end - -  context "is invalid" do -    it 'if maximum is smaller than minimum' do -      100.times do -        min = random_int -        max = min - random_int(20) - 1 -        subject.assign_attributes maximum: max, minimum: min -        expect_it.not_to be_valid -      end -    end - -  end - -   +  it_behaves_like 'has min_max_values'  end diff --git a/spec/models/compliance_control_validations/genric_attribute_validation/pattern_validation_spec.rb b/spec/models/compliance_control_validations/genric_attribute_validation/pattern_validation_spec.rb index 82c5c10c3..2a1d8cf5c 100644 --- a/spec/models/compliance_control_validations/genric_attribute_validation/pattern_validation_spec.rb +++ b/spec/models/compliance_control_validations/genric_attribute_validation/pattern_validation_spec.rb @@ -4,7 +4,7 @@ RSpec.describe GenericAttributeControl::Pattern do    subject{ build factory }    context "is valid" do -    if 'the pattern contains a basic regex' do +    it 'if the pattern contains a basic regex' do        subject.pattern = 'hel+o?'        expect_it.to be_valid      end diff --git a/spec/models/compliance_control_validations/vehicle_journey_validation/speed_validation_spec.rb b/spec/models/compliance_control_validations/vehicle_journey_validation/speed_validation_spec.rb new file mode 100644 index 000000000..88316ab37 --- /dev/null +++ b/spec/models/compliance_control_validations/vehicle_journey_validation/speed_validation_spec.rb @@ -0,0 +1,8 @@ +RSpec.describe VehicleJourneyControl::Speed do + +  let( :factory ){ :vehicle_journey_control_speed } +  subject{ build factory } + +  it_behaves_like 'has min_max_values' + +end diff --git a/spec/support/shared_examples/compliance_control_validation.rb b/spec/support/shared_examples/compliance_control_validation.rb new file mode 100644 index 000000000..d4ab9f41d --- /dev/null +++ b/spec/support/shared_examples/compliance_control_validation.rb @@ -0,0 +1,43 @@ +RSpec.shared_examples_for 'has min_max_values' do + +  context "is valid" do +    it 'if no value is provided' do +      expect_it.to be_valid +    end +    it 'if minimum is provided alone' do +      subject.minimum = 42 +      expect_it.to be_valid +    end +    it 'if maximum is provided alone' do +      subject.maximum = 42 +      expect_it.to be_valid +    end + +    it 'if maximum is not smaller than minimum' do +      100.times do +        min = random_int +        max = min + random_int(20) +        subject.assign_attributes maximum: max, minimum: min +        subject.assign_attributes maximum: min, minimum: min +        expect_it.to be_valid +      end +    end +  end + +  context "is invalid" do +    it 'if maximum is smaller than minimum' do +      100.times do +        min = random_int +        max = min - random_int(20) - 1 +        subject.assign_attributes maximum: max, minimum: min +        expect_it.not_to be_valid +      end +    end + +    it 'and has a correct error message' do +      subject.assign_attributes maximum: 1, minimum: 2 +      expect_it.not_to be_valid +        expect( subject.errors.messages[:min_max_values].first ).to match("la valeur de minimum (2) ne doit pas être superieur à la valuer du maximum (1)") +    end +  end +end | 
