blob: 47233b04e938a06faa6bafbe8844fc94b2cbf39c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
RSpec.describe Chouette::Route do
let!( :route ){ create :route }
context '#duplicate' do
describe 'properties' do
it 'same attribute values' do
route.duplicate
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 'same associated stop_areeas' do
expect( route.duplicate.stop_areas.pluck(:id) ).to eq(route.stop_areas.pluck(:id))
end
end
describe 'side_effects' do
it {
expect{ route.duplicate }.to change{Chouette::Route.count}.by(1)
}
it 'duplicates its stop points' do
expect{ route.duplicate }.to change{Chouette::StopPoint.count}.by(route.stop_points.count)
end
it 'duplicates its stop points in the same order' do
expect(route.duplicate.stop_points.order(:position).map(&:stop_area_id)).to eq route.stop_points.order(:position).map(&:stop_area_id)
end
it 'does not duplicate the stop areas' do
expect{ route.duplicate }.not_to change{Chouette::StopArea.count}
end
end
describe 'is idempotent, concerning' do
let( :first_duplicate ){ route.duplicate }
let( :second_duplicate ){ first_duplicate.reload.duplicate }
it 'the required attributes' do
expect( values_for_create(first_duplicate, except: %w{objectid name checksum checksum_source}) ).to eq( values_for_create( second_duplicate, except: %w{objectid name checksum checksum_source} ) )
end
it 'the stop areas' do
expect( first_duplicate.stop_areas.pluck(:id) ).to eq( route.stop_areas.pluck(:id) )
expect( second_duplicate.stop_areas.pluck(:id) ).to eq( first_duplicate.stop_areas.pluck(:id) )
end
end
end
end
|