require 'spec_helper'
module Datacite
module Mapping
describe GeoLocation do
describe '#initialize' do
it 'accepts a point' do
point = GeoLocationPoint.new(47.61, -122.33)
loc = GeoLocation.new(point: point)
expect(loc.point).to eq(point)
end
it 'accepts a box' do
box = GeoLocationBox.new(-33.45, -122.33, 47.61, -70.67)
loc = GeoLocation.new(box: box)
expect(loc.box).to eq(box)
end
it 'accepts a place' do
place = 'Ouagadougou'
loc = GeoLocation.new(place: place)
expect(loc.place).to eq(place)
end
it 'allows an empty location' do
loc = GeoLocation.new
expect(loc.point).to be_nil
expect(loc.box).to be_nil
expect(loc.place).to be_nil
end
end
describe '#point=' do
it 'sets the point' do
point = GeoLocationPoint.new(47.61, -122.33)
loc = GeoLocation.new
loc.point = point
expect(loc.point).to eq(point)
end
it 'accepts nil' do
loc = GeoLocation.new(point: GeoLocationPoint.new(47.61, -122.33))
loc.point = nil
expect(loc.point).to be_nil
end
end
describe '#box=' do
it 'sets the box' do
box = GeoLocationBox.new(-33.45, -122.33, 47.61, -70.67)
loc = GeoLocation.new
loc.box = box
expect(loc.box).to eq(box)
end
it 'accepts nil' do
loc = GeoLocation.new(box: GeoLocationBox.new(-33.45, -122.33, 47.61, -70.67))
loc.box = nil
expect(loc.box).to be_nil
end
end
describe '#place=' do
it 'sets the place' do
place = 'Ouagadougou'
loc = GeoLocation.new
loc.place = place
expect(loc.place).to eq(place)
end
it 'accepts nil' do
loc = GeoLocation.new(place: 'Ouagadougou')
loc.place = nil
expect(loc.place).to be_nil
end
end
describe '#load_from_xml' do
it 'parses XML' do
xml_text = '
31.233 -67.302
41.090 -71.032 42.893 -68.211
Atlantic Ocean
'
xml = REXML::Document.new(xml_text).root
loc = GeoLocation.load_from_xml(xml)
expect(loc.point).to eq(GeoLocationPoint.new(31.233, -67.302))
expect(loc.box).to eq(GeoLocationBox.new(41.09, -71.032, 42.893, -68.211))
expect(loc.place).to eq('Atlantic Ocean')
end
it 'trims place-name whitespace' do
xml_text = '
Atlantic Ocean
'
xml = REXML::Document.new(xml_text).root
loc = GeoLocation.load_from_xml(xml)
expect(loc.place).to eq('Atlantic Ocean')
end
end
describe '#save_to_xml' do
it 'writes XML' do
loc = GeoLocation.new(
point: GeoLocationPoint.new(31.233, -67.302),
box: GeoLocationBox.new(41.09, -71.032, 42.893, -68.211),
place: 'Atlantic Ocean'
)
expected_xml = '
31.233 -67.302
41.09 -71.032 42.893 -68.211
Atlantic Ocean
'
expect(loc.save_to_xml).to be_xml(expected_xml)
end
end
end
end
end