range_overlapping_validator_spec.rb 1.55 KB
require 'rails_helper'

describe RangeOverlappingValidator, :type => :model do
  describe 'methods' do
    describe 'validate' do
      let(:metric_configuration) { FactoryGirl.build(:metric_configuration) }
      let(:range) { FactoryGirl.build(:mezuro_range, beginning: '-INF', end: 0.0, metric_configuration_id: metric_configuration.id) }

      before :each do
        BeginningUniquenessValidator.any_instance.stubs(:validate_each)
        GreaterThanBeginningValidator.any_instance.stubs(:validate_each)
      end

      context 'not overlapping' do
        let!(:not_overlapping_range) { FactoryGirl.build(:mezuro_range, id: 31, beginning: 0.0, end: 'INF', metric_configuration_id: metric_configuration.id) }

        before :each do
          MezuroRange.expects(:ranges_of).with(metric_configuration.id).returns([range, not_overlapping_range])
        end

        it 'is expected to not return errors' do
          range.save
          expect(range.errors).to be_empty
        end
      end


      context 'overlapping' do
        let!(:overlapping_range) { FactoryGirl.build(:mezuro_range, id: 31, beginning: '-INF', end: 'INF', metric_configuration_id: metric_configuration.id) }

        before :each do
          MezuroRange.expects(:ranges_of).with(metric_configuration.id).returns([range, overlapping_range])
        end

        it 'is expected to return errors' do
          range.save
          expect(range.errors[:beginning]).to eq(["There is already a #{range.class} within these boundaries! Please, choose another interval."])
        end
      end
    end
  end
end