aboutsummaryrefslogtreecommitdiffstats
path: root/spec/models/chouette/line_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/chouette/line_spec.rb')
-rw-r--r--spec/models/chouette/line_spec.rb120
1 files changed, 120 insertions, 0 deletions
diff --git a/spec/models/chouette/line_spec.rb b/spec/models/chouette/line_spec.rb
new file mode 100644
index 000000000..f0a2453b5
--- /dev/null
+++ b/spec/models/chouette/line_spec.rb
@@ -0,0 +1,120 @@
+require 'spec_helper'
+
+describe Chouette::Line, :type => :model do
+
+ subject { create(:line) }
+
+ it { is_expected.to validate_presence_of :network }
+ it { is_expected.to validate_presence_of :company }
+
+ it { is_expected.to validate_presence_of :name }
+
+ # it { should validate_presence_of :objectid }
+ it { is_expected.to validate_uniqueness_of :objectid }
+
+ describe '#objectid' do
+ subject { super().objectid }
+ it { is_expected.to be_kind_of(Chouette::ObjectId) }
+ end
+
+ # it { should validate_numericality_of :objectversion }
+
+ describe ".last_stop_areas_parents" do
+
+ it "should return stop areas if no parents" do
+ line = create(:line_with_stop_areas)
+ expect(line.stop_areas_last_parents).to eq(line.stop_areas)
+ end
+
+ it "should return stop areas parents if parents" do
+ line = create(:line_with_stop_areas)
+ route = create(:route, :line => line)
+ parent = create(:stop_area)
+ stop_areas = [ create(:stop_area), create(:stop_area), create(:stop_area, :parent_id => parent.id) ]
+ stop_areas.each do |stop_area|
+ create(:stop_point, :stop_area => stop_area, :route => route)
+ end
+
+ expect(line.stop_areas_last_parents).to match(line.stop_areas[0..(line.stop_areas.size - 2)].push(parent))
+ end
+
+ end
+
+ describe "#stop_areas" do
+ let!(:route){create(:route, :line => subject)}
+ it "should retreive route's stop_areas" do
+ expect(subject.stop_areas.count).to eq(route.stop_points.count)
+ end
+ end
+
+ describe "#transport_mode" do
+
+ def self.legacy_transport_mode_names
+ %w{Air Train LongDistanceTrain LocalTrain RapidTransit Metro Tramway Coach Bus Ferry Waterborne PrivateVehicle Walk Trolleybus Bicycle Shuttle Taxi VAL Other}
+ end
+
+ legacy_transport_mode_names.each do |transport_mode_name|
+ context "when transport_mode_name is #{transport_mode_name}" do
+ transport_mode = Chouette::TransportMode.new(transport_mode_name.underscore)
+ it "should be #{transport_mode}" do
+ subject.transport_mode_name = transport_mode_name
+ expect(subject.transport_mode).to eq(transport_mode)
+ end
+ end
+ end
+ context "when transport_mode_name is nil" do
+ it "should be nil" do
+ subject.transport_mode_name = nil
+ expect(subject.transport_mode).to be_nil
+ end
+ end
+
+ end
+
+ describe "#transport_mode=" do
+
+ it "should change transport_mode_name with TransportMode#name" do
+ subject.transport_mode = "Test"
+ expect(subject.transport_mode_name).to eq("Test")
+ end
+
+ end
+
+ describe ".transport_modes" do
+
+ it "should not include unknown transport_mode" do
+ expect(Chouette::Line.transport_modes).not_to include(Chouette::TransportMode.new("unknown"))
+ end
+
+ it "should not include interchange transport_mode" do
+ expect(Chouette::Line.transport_modes).not_to include(Chouette::TransportMode.new("interchange"))
+ end
+
+ end
+
+ context "#group_of_line_tokens=" do
+ let!(:group_of_line1){create(:group_of_line)}
+ let!(:group_of_line2){create(:group_of_line)}
+
+ it "should return associated group_of_line ids" do
+ subject.update_attributes :group_of_line_tokens => [group_of_line1.id, group_of_line2.id].join(',')
+ expect(subject.group_of_lines).to include( group_of_line1)
+ expect(subject.group_of_lines).to include( group_of_line2)
+ end
+ end
+
+ describe "#update_attributes footnotes_attributes" do
+ context "instanciate 2 footnotes without line" do
+ let!( :footnote_first) {build( :footnote, :line_id => nil)}
+ let!( :footnote_second) {build( :footnote, :line_id => nil)}
+ it "should add 2 footnotes to the line" do
+ subject.update_attributes :footnotes_attributes =>
+ { Time.now.to_i => footnote_first.attributes,
+ (Time.now.to_i-5) => footnote_second.attributes}
+ expect(Chouette::Line.find( subject.id ).footnotes.size).to eq(2)
+ end
+ end
+ end
+
+
+end