aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXinhui2017-08-31 15:32:12 +0200
committerXinhui2017-08-31 15:32:12 +0200
commit69e786ccb4a08b045708670d712ac1343e053099 (patch)
tree6ee3721c67d3cd465ceb4837c248a0edb27ef4a8
parentdb91d342ccf229f66f1bed2a2fe11bceccff58be (diff)
downloadchouette-core-69e786ccb4a08b045708670d712ac1343e053099.tar.bz2
Refactoring objectid support & spec
-rw-r--r--app/models/concerns/stif_netex_attributes_support.rb53
-rw-r--r--spec/models/chouette/trident_active_record_spec.rb132
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