diff options
Diffstat (limited to 'spec/models')
21 files changed, 212 insertions, 245 deletions
diff --git a/spec/models/chouette/access_link_spec.rb b/spec/models/chouette/access_link_spec.rb index 5a31b8f0c..d0f351480 100644 --- a/spec/models/chouette/access_link_spec.rb +++ b/spec/models/chouette/access_link_spec.rb @@ -5,9 +5,9 @@ describe Chouette::AccessLink, :type => :model do it { is_expected.to validate_uniqueness_of :objectid } - describe '#objectid' do - subject { super().objectid } - it { is_expected.to be_kind_of(Chouette::StifNetexObjectid) } + describe '#get_objectid' do + subject { super().get_objectid } + it {is_expected.to be_kind_of(Chouette::Objectid::StifNetex)} end it { is_expected.to validate_presence_of :name } diff --git a/spec/models/chouette/access_point_spec.rb b/spec/models/chouette/access_point_spec.rb index e0f4b1501..a6798ec3b 100644 --- a/spec/models/chouette/access_point_spec.rb +++ b/spec/models/chouette/access_point_spec.rb @@ -4,8 +4,9 @@ describe Chouette::AccessPoint, :type => :model do subject { create(:access_point) } describe '#objectid' do - subject { super().objectid } - it { is_expected.to be_kind_of(Chouette::StifReflexObjectid) } + it "should have the same class as stop_area objectid" do + expect(subject.objectid.class).to eq(subject.stop_area.objectid.class) + end end it { is_expected.to validate_presence_of :name } diff --git a/spec/models/chouette/connection_link_spec.rb b/spec/models/chouette/connection_link_spec.rb index 57eb7d66c..04c15b42e 100644 --- a/spec/models/chouette/connection_link_spec.rb +++ b/spec/models/chouette/connection_link_spec.rb @@ -9,9 +9,9 @@ describe Chouette::ConnectionLink, :type => :model do it { is_expected.to validate_uniqueness_of :objectid } - describe '#objectid' do - subject { super().objectid } - it { is_expected.to be_kind_of(Chouette::StifNetexObjectid) } + describe '#get_objectid' do + subject { super().get_objectid } + it {is_expected.to be_kind_of(Chouette::Objectid::StifNetex)} end it { is_expected.to validate_presence_of :name } diff --git a/spec/models/chouette/line_spec.rb b/spec/models/chouette/line_spec.rb index 2e5882012..bc7b6e0c7 100644 --- a/spec/models/chouette/line_spec.rb +++ b/spec/models/chouette/line_spec.rb @@ -10,16 +10,11 @@ describe Chouette::Line, :type => :model do describe '#display_name' do it 'should display local_id, number, name and company name' do - display_name = "#{subject.objectid.local_id} - #{subject.number} - #{subject.name} - #{subject.company.try(:name)}" + display_name = "#{subject.get_objectid.local_id} - #{subject.number} - #{subject.name} - #{subject.company.try(:name)}" expect(subject.display_name).to eq(display_name) end end - describe '#objectid' do - subject { super().objectid } - it { is_expected.to be_kind_of(Chouette::StifCodifligneObjectid) } - end - # it { should validate_numericality_of :objectversion } # describe ".last_stop_areas_parents" do diff --git a/spec/models/chouette/object_id_spec.rb b/spec/models/chouette/object_id_spec.rb deleted file mode 100644 index dd8b66388..000000000 --- a/spec/models/chouette/object_id_spec.rb +++ /dev/null @@ -1,149 +0,0 @@ -require 'spec_helper' - -describe Chouette::ObjectId, :type => :model do - - def objectid(value = "abc:StopArea:abc123") - Chouette::ObjectId.new value - end - - subject { objectid } - - context "when invalid" do - - subject { objectid("abc") } - - it { is_expected.not_to be_valid } - - describe '#parts' do - subject { super().parts } - it { is_expected.to be_nil } - end - - describe '#system_id' do - subject { super().system_id } - it { is_expected.to be_nil } - end - - end - - context "when with spaces in last part" do - - subject { objectid("abc:Line:Aze toto") } - - it { is_expected.not_to be_valid } - - - end - - context "when with spaces in first part" do - - subject { objectid("ae abc:Line:Aze") } - - it { is_expected.not_to be_valid } - - - end - - context "when with spaces in middle part" do - - subject { objectid("aeabc:Li ne:Aze") } - - it { is_expected.not_to be_valid } - - - end - - context "when invalid in first part" do - - subject { objectid("Abc_+19:Line:Abc") } - - it { is_expected.not_to be_valid } - end - - context "when invalid in middle part" do - - subject { objectid("Abc_19:Li56ne:Abc") } - - it { is_expected.not_to be_valid } - end - - context "when invalid in last part" do - - subject { objectid("Abc_19:Line:Ab+c") } - - it { is_expected.not_to be_valid } - end - context "when valid" do - - subject { objectid("Abc_19:Line:Abc_12-") } - - it { is_expected.to be_valid } - end - - describe "#parts" do - - it "should be the 3 parts of the ObjectId" do - expect(objectid("abc:StopArea:abc123").parts).to eq(%w{abc StopArea abc123}) - end - - end - - describe "#system_id" do - - it "should be the first ObjectId parts" do - expect(objectid("first:second:third").system_id).to eq("first") - end - - end - - describe "#object_type" do - - it "should be the second ObjectId parts" do - expect(objectid("first:second:third").object_type).to eq("second") - end - - end - - describe "#local_id" do - - it "should be the third ObjectId parts" do - expect(objectid("first:second:third").local_id).to eq("third") - end - - end - - it "should be valid when parts are found" do - allow(subject).to receive_messages :parts => "dummy" - expect(subject).to be_valid - end - - describe ".create" do - - let(:given_system_id) { "systemId" } - let(:given_object_type) { "objectType" } - let(:given_local_id) { "localId" } - - subject { Chouette::ObjectId.create(given_system_id, given_object_type, given_local_id) } - - it "should return ObjectId attributes" do - expect(subject.send(:system_id)).to eq(given_system_id) - expect(subject.send(:object_type)).to eq(given_object_type) - expect(subject.send(:local_id)).to eq(given_local_id) - end - - end - - describe ".new" do - - it "should return an existing ObjectId" do - expect(Chouette::ObjectId.new(objectid)).to eq(objectid) - end - - it "should create an empty ObjectId with nil" do - expect(Chouette::ObjectId.new(nil)).to be_empty - end - - end - - -end diff --git a/spec/models/chouette/objectid/netex_spec.rb b/spec/models/chouette/objectid/netex_spec.rb new file mode 100644 index 000000000..3aee13624 --- /dev/null +++ b/spec/models/chouette/objectid/netex_spec.rb @@ -0,0 +1,10 @@ +require 'spec_helper' + +describe Chouette::Objectid::Netex, :type => :model do + subject { Chouette::Objectid::Netex.new(object_type: 'Route', local_id: SecureRandom.uuid) } + it { should validate_presence_of :provider_id } + it { should validate_presence_of :object_type } + it { should validate_presence_of :local_id } + it { should validate_presence_of :creation_id } + it { is_expected.to be_valid } +end
\ No newline at end of file diff --git a/spec/models/chouette/objectid/stif_codifligne_spec.rb b/spec/models/chouette/objectid/stif_codifligne_spec.rb new file mode 100644 index 000000000..533af3556 --- /dev/null +++ b/spec/models/chouette/objectid/stif_codifligne_spec.rb @@ -0,0 +1,10 @@ +require 'spec_helper' + +describe Chouette::Objectid::StifCodifligne, :type => :model do + subject { Chouette::Objectid::StifCodifligne.new(object_type: 'Line', local_id: 'C02008', sync_id: 'CODIFLIGNE', provider_id: 'STIF') } + it { should validate_presence_of :provider_id } + it { should validate_presence_of :object_type } + it { should validate_presence_of :local_id } + it { should validate_presence_of :sync_id } + it { is_expected.to be_valid } +end
\ No newline at end of file diff --git a/spec/models/chouette/objectid/stif_netex_spec.rb b/spec/models/chouette/objectid/stif_netex_spec.rb new file mode 100644 index 000000000..1d361ca86 --- /dev/null +++ b/spec/models/chouette/objectid/stif_netex_spec.rb @@ -0,0 +1,10 @@ +require 'spec_helper' + +describe Chouette::Objectid::StifNetex, :type => :model do + subject { Chouette::Objectid::StifNetex.new(object_type: 'Route', local_id: '13') } + it { should validate_presence_of :provider_id } + it { should validate_presence_of :object_type } + it { should validate_presence_of :local_id } + it { should validate_presence_of :creation_id } + it { is_expected.to be_valid } +end
\ No newline at end of file diff --git a/spec/models/chouette/objectid/stif_reflex_spec.rb b/spec/models/chouette/objectid/stif_reflex_spec.rb new file mode 100644 index 000000000..0846f27fa --- /dev/null +++ b/spec/models/chouette/objectid/stif_reflex_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe Chouette::Objectid::StifReflex, :type => :model do + subject { Chouette::Objectid::StifReflex.new(country_code: 'FR', zip_code: '78517', object_type: 'ZDL', local_id: '50015386', provider_id: 'STIF') } + it { should validate_presence_of :provider_id } + it { should validate_presence_of :object_type } + it { should validate_presence_of :local_id } + it { should validate_presence_of :country_code } + it { should validate_presence_of :zip_code } + it { is_expected.to be_valid } +end
\ No newline at end of file diff --git a/spec/models/chouette/route/route_base_spec.rb b/spec/models/chouette/route/route_base_spec.rb index cac2880e8..79daeb6c2 100644 --- a/spec/models/chouette/route/route_base_spec.rb +++ b/spec/models/chouette/route/route_base_spec.rb @@ -5,11 +5,6 @@ RSpec.describe Chouette::Route, :type => :model do it_behaves_like 'checksum support', :route end - describe '#objectid' do - subject { super().objectid } - it { is_expected.to be_kind_of(Chouette::StifNetexObjectid) } - end - it { is_expected.to enumerize(:direction).in(:straight_forward, :backward, :clockwise, :counter_clockwise, :north, :north_west, :west, :south_west, :south, :south_east, :east, :north_east) } it { is_expected.to enumerize(:wayback).in(:outbound, :inbound) } diff --git a/spec/models/chouette/route/route_duplication_spec.rb b/spec/models/chouette/route/route_duplication_spec.rb index 5bcd13fc8..ee45b5005 100644 --- a/spec/models/chouette/route/route_duplication_spec.rb +++ b/spec/models/chouette/route/route_duplication_spec.rb @@ -1,9 +1,4 @@ -# From Chouette import what we need ™ -Route = Chouette::Route -StopArea = Chouette::StopArea -StopPoint = Chouette::StopPoint - -RSpec.describe Route do +RSpec.describe Chouette::Route do let!( :route ){ create :route } @@ -11,7 +6,7 @@ RSpec.describe Route do describe 'properties' do it 'same attribute values' do route.duplicate - expect( values_for_create(Route.last, except: %w{objectid name checksum checksum_source}) ).to eq( values_for_create( route, except: %w{objectid name checksum checksum_source} ) ) + expect( values_for_create(Chouette::Route.last, except: %w{objectid name checksum checksum_source}) ).to eq( values_for_create( route, except: %w{objectid name checksum checksum_source} ) ) end it 'and others cannot' do expect{ route.duplicate name: 'YAN', line_id: 42 }.to raise_error(ArgumentError) @@ -23,13 +18,13 @@ RSpec.describe Route do describe 'side_effects' do it { - expect{ route.duplicate }.to change{Route.count}.by(1) + expect{ route.duplicate }.to change{Chouette::Route.count}.by(1) } it 'duplicates its stop points' do - expect{ route.duplicate }.to change{StopPoint.count}.by(route.stop_points.count) + expect{ route.duplicate }.to change{Chouette::StopPoint.count}.by(route.stop_points.count) end it 'does bot duplicate the stop areas' do - expect{ route.duplicate }.not_to change{StopArea.count} + expect{ route.duplicate }.not_to change{Chouette::StopArea.count} end end diff --git a/spec/models/chouette/stop_area_spec.rb b/spec/models/chouette/stop_area_spec.rb index a3a398bfb..1e0b4af84 100644 --- a/spec/models/chouette/stop_area_spec.rb +++ b/spec/models/chouette/stop_area_spec.rb @@ -7,11 +7,6 @@ describe Chouette::StopArea, :type => :model do let!(:commercial_stop_point) { create :stop_area, :area_type => "lda" } let!(:stop_place) { create :stop_area, :area_type => "zdlp" } - describe '#objectid' do - subject { super().objectid } - it { should be_kind_of(Chouette::StifReflexObjectid) } - end - it { should belong_to(:stop_area_referential) } it { should validate_presence_of :name } it { should validate_numericality_of :latitude } diff --git a/spec/models/chouette/stop_point_spec.rb b/spec/models/chouette/stop_point_spec.rb index 329e76a75..f48173e65 100644 --- a/spec/models/chouette/stop_point_spec.rb +++ b/spec/models/chouette/stop_point_spec.rb @@ -9,8 +9,8 @@ describe StopPoint, :type => :model do it { is_expected.to validate_presence_of :stop_area } describe '#objectid' do - subject { super().objectid } - it { is_expected.to be_kind_of(Chouette::StifNetexObjectid) } + subject { super().get_objectid } + it { is_expected.to be_kind_of(Chouette::Objectid::StifNetex) } end describe "#destroy" do diff --git a/spec/models/chouette/trident_active_record_spec.rb b/spec/models/chouette/trident_active_record_spec.rb deleted file mode 100644 index d5e30594d..000000000 --- a/spec/models/chouette/trident_active_record_spec.rb +++ /dev/null @@ -1,57 +0,0 @@ -require 'spec_helper' - -describe Chouette::TridentActiveRecord, :type => :model do - subject { create(:time_table) } - - it { should validate_presence_of :objectid } - it { should validate_uniqueness_of :objectid } - - describe "#default_values" do - let(:object) { build(:time_table, objectid: nil) } - - it 'should fill __pending_id__' do - object.default_values - expect(object.objectid.include?('__pending_id__')).to be_truthy - end - end - - describe "#objectid" do - let(:object) { build(:time_table, objectid: nil) } - - it 'should build objectid on create' do - object.save - id = "#{object.provider_id}:#{object.model_name}:#{object.local_id}:#{object.boiv_id}" - expect(object.objectid).to eq(id) - end - - it 'should call build_objectid on after save' do - expect(object).to receive(:build_objectid) - object.save - end - - it 'should not build new objectid is already set' do - id = "first:TimeTable:1-1:LOC" - object.objectid = id - object.save - expect(object.objectid).to eq(id) - end - - it 'should call default_values on create' do - expect(object).to receive(:default_values) - object.save - end - - it 'should not call default_values on update' do - object = create(:time_table) - expect(object).to_not receive(:default_values) - object.touch - end - - it 'should create a new objectid when cleared' do - object.save - object.objectid = nil - object.save - expect(object.objectid).to be_truthy - end - end -end diff --git a/spec/models/chouette/vehicle_journey_at_stop_spec.rb b/spec/models/chouette/vehicle_journey_at_stop_spec.rb index 03e6fcb7d..df8a630fe 100644 --- a/spec/models/chouette/vehicle_journey_at_stop_spec.rb +++ b/spec/models/chouette/vehicle_journey_at_stop_spec.rb @@ -51,7 +51,7 @@ RSpec.describe Chouette::VehicleJourneyAtStop, type: :model do ) error_message = I18n.t( 'vehicle_journey_at_stops.errors.day_offset_must_not_exceed_max', - short_id: at_stop.vehicle_journey.objectid.short_id, + short_id: at_stop.vehicle_journey.get_objectid.short_id, max: bad_offset ) diff --git a/spec/models/chouette/vehicle_journey_spec.rb b/spec/models/chouette/vehicle_journey_spec.rb index 52f2ab42d..86aa475f0 100644 --- a/spec/models/chouette/vehicle_journey_spec.rb +++ b/spec/models/chouette/vehicle_journey_spec.rb @@ -1,6 +1,7 @@ require 'spec_helper' describe Chouette::VehicleJourney, :type => :model do + it "must be valid with an at-stop day offset of 1" do vehicle_journey = create( :vehicle_journey, @@ -94,10 +95,13 @@ describe Chouette::VehicleJourney, :type => :model do expect { Chouette::VehicleJourney.state_update(route, collection) }.to change {Chouette::VehicleJourney.count}.by(1) + expect(collection.last['objectid']).not_to be_nil - vj = Chouette::VehicleJourney.find_by(objectid: collection.last['objectid']) - expect(vj.published_journey_name).to eq 'dummy' + obj = Chouette::VehicleJourney.last + obj.run_callbacks(:commit) + + expect(obj.published_journey_name).to eq 'dummy' end it 'should save vehicle_journey_at_stops of newly created vj' do diff --git a/spec/models/concerns/objectid_support_spec.rb b/spec/models/concerns/objectid_support_spec.rb new file mode 100644 index 000000000..fabeeec11 --- /dev/null +++ b/spec/models/concerns/objectid_support_spec.rb @@ -0,0 +1,138 @@ +RSpec.describe ObjectidSupport do + + context 'when referential has an objectid format of stif_netex' do + let(:object) { create(:time_table, objectid: nil) } + + context "#objectid_format" do + it "should be stif_netex" do + expect(object.referential.objectid_format).to eq('stif_netex') + end + end + + it 'should fill __pending_id__' do + expect(object.objectid.include?('__pending_id__')).to be_truthy + end + + context "#get_objectid" do + + before(:each) do + object.run_callbacks(:commit) + end + + it "should be valid" do + expect(object.get_objectid).to be_valid + end + + it "should have the same local id than the object" do + expect(object.get_objectid.local_id).to eq(object.local_id) + end + + it "should be a Chouette::Objectid::StifNetex" do + expect(object.get_objectid).to be_kind_of(Chouette::Objectid::StifNetex) + end + + context "#to_s" do + it "should return a string" do + expect(object.get_objectid.to_s).to be_kind_of(String) + end + + it "should be the same as the db attribute" do + expect(object.get_objectid.to_s).to eq(object.read_attribute(:objectid)) + expect(object.get_objectid.to_s).to eq(object.objectid) + end + + context "#objectid" do + + it 'should build objectid on create' do + object.save + object.run_callbacks(:commit) + objectid = object.get_objectid + id = "#{objectid.provider_id}:#{objectid.object_type}:#{objectid.local_id}:#{objectid.creation_id}" + expect(object.read_attribute(:objectid)).to eq(id) + end + + it 'should not build new objectid is already set' do + id = "first:TimeTable:1-1:LOC" + object.attributes = {objectid: id} + object.save + expect(object.objectid).to eq(id) + end + + it 'should create a new objectid when cleared' do + object.save + object.attributes = { objectid: nil} + object.save + expect(object.objectid).to be_truthy + end + end + end + end + end + + context 'when referential has an objectid format of netex' do + before(:all) do + Referential.first.update(objectid_format: 'netex') + end + + let(:object) { create(:time_table, objectid: nil) } + + + context "#objectid_format" do + it "should be netex" do + expect(object.referential.objectid_format).to eq('netex') + end + end + + context "#get_objectid" do + + it "should be valid" do + expect(object.get_objectid).to be_valid + end + + it "should have the same local id than the object" do + expect(object.get_objectid.local_id).to match(/\w+-\w+-\w+-\w+-\w+/) + end + + it "should be a Chouette::Objectid::StifNetex" do + expect(object.get_objectid).to be_kind_of(Chouette::Objectid::Netex) + end + + context "#to_s" do + it "should return a string" do + expect(object.get_objectid.to_s).to be_kind_of(String) + end + + it "should be the same as the db attribute" do + expect(object.get_objectid.to_s).to eq(object.read_attribute(:objectid)) + expect(object.get_objectid.to_s).to eq(object.objectid) + end + + context "#objectid" do + + it 'should build objectid on create' do + object.save + object.run_callbacks(:commit) + objectid = object.get_objectid + id = "#{objectid.provider_id}:#{objectid.object_type}:#{objectid.local_id}:#{objectid.creation_id}" + expect(object.read_attribute(:objectid)).to eq(id) + end + + it 'should not build new objectid is already set' do + id = "first:TimeTable:1-1:LOC" + object.attributes = {objectid: id} + object.save + expect(object.objectid).to eq(id) + end + + it 'should create a new objectid when cleared' do + object.save + object.attributes = { objectid: nil} + object.save + expect(object.objectid).to be_truthy + end + end + end + end + end + +end
\ No newline at end of file diff --git a/spec/models/line_referential_spec.rb b/spec/models/line_referential_spec.rb index 8f8714f8f..46434a7ab 100644 --- a/spec/models/line_referential_spec.rb +++ b/spec/models/line_referential_spec.rb @@ -7,5 +7,6 @@ RSpec.describe LineReferential, type: :model do it { is_expected.to have_many(:line_referential_syncs) } it { is_expected.to have_many(:workbenches) } it { should validate_presence_of(:sync_interval) } + it { should validate_presence_of(:objectid_format) } end diff --git a/spec/models/referential_spec.rb b/spec/models/referential_spec.rb index ad9c43010..d0b1d6447 100644 --- a/spec/models/referential_spec.rb +++ b/spec/models/referential_spec.rb @@ -12,6 +12,12 @@ describe Referential, :type => :model do it { should belong_to(:workbench) } it { should belong_to(:referential_suite) } + context "validation" do + subject { build_stubbed(:referential) } + + it { should validate_presence_of(:objectid_format) } + end + context ".referential_ids_in_periode" do it 'should retrieve referential id in periode range' do range = ref.metadatas.first.periodes.sample diff --git a/spec/models/stop_area_referential_spec.rb b/spec/models/stop_area_referential_spec.rb index 271badff8..dd2bdce20 100644 --- a/spec/models/stop_area_referential_spec.rb +++ b/spec/models/stop_area_referential_spec.rb @@ -7,4 +7,5 @@ RSpec.describe StopAreaReferential, :type => :model do it { is_expected.to have_many(:stop_area_referential_syncs) } it { is_expected.to have_many(:workbenches) } + it { should validate_presence_of(:objectid_format) } end diff --git a/spec/models/workbench_spec.rb b/spec/models/workbench_spec.rb index 037537b60..3b9ed6b07 100644 --- a/spec/models/workbench_spec.rb +++ b/spec/models/workbench_spec.rb @@ -7,6 +7,7 @@ RSpec.describe Workbench, :type => :model do it { should validate_presence_of(:name) } it { should validate_presence_of(:organisation) } + it { should validate_presence_of(:objectid_format) } it { should belong_to(:organisation) } it { should belong_to(:line_referential) } |
