require_relative '../../../spec_helper'
describe AIXM::Feature::ObstacleGroup do
describe "unlinked obstacle group" do
subject do
AIXM.obstacle_group(name: "Mirmande éoliennes")
end
describe :initialize do
it "sets defaults" do
subject = AIXM.obstacle_group(
name: "Mirmande éoliennes"
)
subject.obstacles.must_equal []
end
end
describe :name= do
it "fails on invalid values" do
[:foobar, 123].wont_be_written_to subject, :name
end
it "upcases and transcodes valid values" do
subject.name.must_equal 'MIRMANDE EOLIENNES'
end
end
describe :xy_accuracy= do
it "fails on invalid values" do
[:foobar, 123].wont_be_written_to subject, :xy_accuracy
end
it "accepts valid values" do
[nil, AIXM::Factory.d, AIXM.d(0, :m)].must_be_written_to subject, :xy_accuracy
end
end
describe :z_accuracy= do
it "fails on invalid values" do
[:foobar, 123].wont_be_written_to subject, :z_accuracy
end
it "accepts valid values" do
[nil, AIXM::Factory.d, AIXM.d(0, :m)].must_be_written_to subject, :z_accuracy
end
end
describe :remarks= do
macro :remarks
end
describe :add_obstacle do
it "adds an obstacle to the obstacle group" do
subject.add_obstacle(AIXM::Factory.obstacle)
subject.obstacles.count.must_equal 1
subject.obstacles.first.obstacle_group.must_equal subject
end
end
describe :to_xml do
subject do
AIXM::Factory.unlinked_obstacle_group
end
it "builds correct AIXM" do
AIXM.aixm!
subject.to_xml.must_equal <<~END
444030.05N
0045221.24E
LA TEISSONIERE 1
WINDTURBINE
Y
N
WGE
50
M
1764
33
262
FT
444046.08N
0045225.72E
LA TEISSONIERE 2
WINDTURBINE
Y
N
WGE
50
M
1738
33
262
FT
END
end
it "builds correct OFMX" do
AIXM.ofmx!
subject.to_xml.must_equal <<~END
MIRMANDE EOLIENNES
44.67501389N
004.87256667E
WGE
50
M
33
FT
Extension planned
MIRMANDE EOLIENNES
44.67501389N
004.87256667E
44.67501389N
004.87256667E
LA TEISSONIERE 1
WINDTURBINE
Y
N
N
WGE
1764
262
FT
N
80
M
MIRMANDE EOLIENNES
44.67501389N
004.87256667E
44.67946667N
004.87381111E
LA TEISSONIERE 2
WINDTURBINE
Y
N
N
WGE
1738
262
FT
N
80
M
END
end
end
end
describe "linked obstacle group" do
subject do
AIXM.obstacle_group(name: "Mirmande éoliennes")
end
describe :add_obstacle do
it "adds an obstacle to the obstacle group and links it to previous" do
subject.add_obstacle(AIXM::Factory.obstacle)
subject.add_obstacle(AIXM::Factory.obstacle, linked_to: :previous, link_type: :cable)
subject.obstacles.count.must_equal 2
subject.obstacles.last.linked_to.must_equal subject.obstacles.first
subject.obstacles.last.link_type.must_equal :cable
end
it "adds an obstacle to the obstacle group and links it to another obstacle" do
subject.add_obstacle(AIXM::Factory.obstacle)
subject.add_obstacle(AIXM::Factory.obstacle, linked_to: subject.obstacles.first, link_type: :solid)
subject.obstacles.count.must_equal 2
subject.obstacles.last.linked_to.must_equal subject.obstacles.first
subject.obstacles.last.link_type.must_equal :solid
end
end
describe :to_xml do
subject do
AIXM::Factory.linked_obstacle_group
end
it "builds correct AIXM" do
AIXM.aixm!
subject.to_xml.must_equal <<~END
521747.03N
0020624.31W
DROITWICH LW NORTH
MAST
Y
N
WGE
0
M
848
0
700
FT
521740.48N
0020620.47W
DROITWICH LW NORTH
MAST
Y
N
WGE
0
M
848
0
700
FT
END
end
it "builds correct OFMX" do
AIXM.ofmx!
subject.to_xml.must_equal <<~END
DROITWICH LONGWAVE ANTENNA
52.29639722N
002.10675278W
WGE
0
M
0
FT
Destruction planned
DROITWICH LONGWAVE ANTENNA
52.29639722N
002.10675278W
52.29639722N
002.10675278W
DROITWICH LW NORTH
MAST
Y
N
N
WGE
848
700
FT
Y
200
M
DROITWICH LONGWAVE ANTENNA
52.29639722N
002.10675278W
52.29457778N
002.10568611W
DROITWICH LW NORTH
MAST
Y
N
N
WGE
848
700
FT
Y
200
M
DROITWICH LONGWAVE ANTENNA
52.29639722N
002.10675278W
52.29639722N
002.10675278W
CABLE
END
end
end
end
end