diff options
| author | Xinhui | 2017-08-31 15:32:12 +0200 |
|---|---|---|
| committer | Xinhui | 2017-08-31 15:32:12 +0200 |
| commit | 69e786ccb4a08b045708670d712ac1343e053099 (patch) | |
| tree | 6ee3721c67d3cd465ceb4837c248a0edb27ef4a8 | |
| parent | db91d342ccf229f66f1bed2a2fe11bceccff58be (diff) | |
| download | chouette-core-69e786ccb4a08b045708670d712ac1343e053099.tar.bz2 | |
Refactoring objectid support & spec
| -rw-r--r-- | app/models/concerns/stif_netex_attributes_support.rb | 53 | ||||
| -rw-r--r-- | spec/models/chouette/trident_active_record_spec.rb | 132 |
2 files changed, 56 insertions, 129 deletions
diff --git a/app/models/concerns/stif_netex_attributes_support.rb b/app/models/concerns/stif_netex_attributes_support.rb index 5eb5285cf..782a75295 100644 --- a/app/models/concerns/stif_netex_attributes_support.rb +++ b/app/models/concerns/stif_netex_attributes_support.rb @@ -2,14 +2,12 @@ module StifNetexAttributesSupport extend ActiveSupport::Concern included do - - validates_presence_of :objectid - validates :objectid, uniqueness: true validates_numericality_of :object_version + validates :objectid, uniqueness: true, presence: true validate :objectid_format_compliance + after_save :build_objectid before_validation :default_values, on: :create - # before_save :increment_workbench_local_id end module ClassMethods @@ -22,44 +20,35 @@ module StifNetexAttributesSupport end end - def objectid - Chouette::StifNetexObjectid.new read_attribute(:objectid) - end - - def provider_id - self.referential.workbench.organisation.name.parameterize + def objectid_format_compliance + errors.add :objectid, I18n.t("activerecord.errors.models.stif_netex.invalid_object_id") if !objectid.valid? end - def object_type - self.model_name + def build_objectid + if objectid.include? ':__pending_id__' + self.objectid = Chouette::StifNetexObjectid.create(self.provider_id, self.model_name, self.local_id, self.boiv_id) + self.save + end end - def local_id - '' - end + def default_values + self.object_version ||= 1 - def boiv_id - 'LOC' + if self.objectid.to_s.empty? + local_id = "__pending_id__#{rand(50)+ rand(50)}" + self.objectid = Chouette::StifNetexObjectid.create(self.provider_id, self.model_name, local_id, self.boiv_id) + end end - def objectid_format_compliance - errors.add :objectid, I18n.t("activerecord.errors.models.stif_netex.invalid_object_id") if !objectid.valid? + def objectid + Chouette::StifNetexObjectid.new read_attribute(:objectid) end - def default_values - if self.objectid.to_s.empty? - self.objectid = Chouette::StifNetexObjectid.create(provider_id, object_type, local_id, boiv_id) - end - self.object_version ||= 1 + def provider_id + self.referential.workbench.organisation.name.parameterize end - def increment_workbench_local_id - # workbench_object_identifier = self.referential.workbench.worbench_object_identifiers.find_or_create_by_object_class(self.class) - # result = WorbenchObjectIdentifier.increment_counter(:last_local_id, 1) - # counter = 3 - # # Ecrire le code pour répéter l'opération 3 fois au cas ou l'enregistrement échouerait. - # while result == false && counter <= 3 - # ..... - # end + def boiv_id + 'LOC' end end diff --git a/spec/models/chouette/trident_active_record_spec.rb b/spec/models/chouette/trident_active_record_spec.rb index e6fa259e0..d5e30594d 100644 --- a/spec/models/chouette/trident_active_record_spec.rb +++ b/spec/models/chouette/trident_active_record_spec.rb @@ -1,119 +1,57 @@ require 'spec_helper' describe Chouette::TridentActiveRecord, :type => :model do - - it { expect(Chouette::TridentActiveRecord.ancestors).to include(Chouette::ActiveRecord) } - subject { create(:time_table) } - # describe "#uniq_objectid" do - - # it "should rebuild objectid" do - # tm = create(:time_table) - # tm.objectid = subject.objectid - # tm.uniq_objectid - # expect(tm.objectid).to eq(subject.objectid+"_1") - # end + it { should validate_presence_of :objectid } + it { should validate_uniqueness_of :objectid } - # it "should rebuild objectid" do - # tm = create(:time_table) - # tm.objectid = subject.objectid - # tm.uniq_objectid - # tm.save - # tm = create(:time_table) - # tm.objectid = subject.objectid - # tm.uniq_objectid - # expect(tm.objectid).to eq(subject.objectid+"_2") - # end + describe "#default_values" do + let(:object) { build(:time_table, objectid: nil) } - # end - - def create_object(options = {}) - options = {name: "merge1"}.merge options - attributes = { comment: options[:name], objectid: options[:objectid] } - Chouette::TimeTable.new attributes + it 'should fill __pending_id__' do + object.default_values + expect(object.objectid.include?('__pending_id__')).to be_truthy + end end - # describe "#prepare_auto_columns" do - - # it "should left objectid" do - # tm = create_object :objectid => "first:Timetable:merge1" - # tm.prepare_auto_columns - # expect(tm.objectid).to eq("first:Timetable:merge1") - # end + describe "#objectid" do + let(:object) { build(:time_table, objectid: nil) } - # it "should add pending_id to objectid" do - # tm = create_object - # tm.prepare_auto_columns - # expect(tm.objectid.start_with?("first:Timetable:__pending_id__")).to be_truthy - # end - - # it "should set id to objectid" do - # tm = create_object - # tm.save - # expect(tm.objectid).to eq("first:Timetable:"+tm.id.to_s) - # end - - # it "should detect objectid conflicts" do - # tm = create_object - # tm.save - # tm.objectid = "first:Timetable:"+(tm.id+1).to_s - # tm.save - # tm = create_object - # tm.save - # expect(tm.objectid).to eq("first:Timetable:"+tm.id.to_s+"_1") - # end - - # end - - describe "objectid" do + 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 build automatic objectid when empty" do - g1 = create_object - g1.save - expect(g1.objectid).to eq("first:Timetable:"+g1.id.to_s) + it 'should call build_objectid on after save' do + expect(object).to receive(:build_objectid) + object.save end - it "should build automatic objectid with fixed when only suffix given" do - g1 = create_object - g1.objectid = "toto" - g1.save - expect(g1.objectid).to eq("first:Timetable:toto") + 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 build automatic objectid with extension when already exists" do - g1 = create_object - g1.save - cnt = g1.id + 1 - g1.objectid = "first:Timetable:"+cnt.to_s - g1.save - g2 = create_object - g2.save - expect(g2.objectid).to eq("first:Timetable:"+g2.id.to_s+"_1") + it 'should call default_values on create' do + expect(object).to receive(:default_values) + object.save end - it "should build automatic objectid with extension when already exists" do - g1 = create_object - g1.save - cnt = g1.id + 2 - g1.objectid = "first:Timetable:"+cnt.to_s - g1.save - g2 = create_object - g2.objectid = "first:Timetable:"+cnt.to_s+"_1" - g2.save - g3 = create_object - g3.save - expect(g3.objectid).to eq("first:Timetable:"+g3.id.to_s+"_2") + 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 build automatic objectid when id cleared" do - g1 = create_object - g1.objectid = "first:Timetable:xxxx" - g1.save - g1.objectid = nil - g1.save - expect(g1.objectid).to eq("first:Timetable:"+g1.id.to_s) + 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 |
