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