Commit d10b5ebd authored by Gabriel Mazetto's avatar Gabriel Mazetto

Fixed GeoNode bugous URI initialization and added more tests

parent 5bf83afb
......@@ -13,10 +13,11 @@
class GeoNode < ActiveRecord::Base
belongs_to :geo_node_key
default_value_for :schema, 'http'
default_value_for :port, 80
default_value_for :relative_url_root, ''
default_value_for :primary, false
default_values schema: 'http',
host: lambda { Gitlab.config.gitlab.host },
port: 80,
relative_url_root: '',
primary: false
accepts_nested_attributes_for :geo_node_key
......@@ -29,8 +30,11 @@ class GeoNode < ActiveRecord::Base
after_destroy :destroy_orphaned_geo_node_key
def uri
relative_url = relative_url_root[0] == '/' ? relative_url_root[1..-1] : relative_url_root
URI.parse("#{schema}://#{host}:#{port}/#{relative_url}")
if relative_url_root
relative_url = relative_url_root.starts_with?('/') ? relative_url_root : relative_url_root.prepend('/')
end
URI.parse(URI::Generic.build(scheme: schema, host: host, port: port, path: relative_url).normalize.to_s)
end
def url
......
......@@ -3,10 +3,17 @@ require 'spec_helper'
describe GeoNode, type: :model do
context 'default values' do
let(:gitlab_host) { 'gitlabhost' }
before(:each) { allow(Gitlab.config.gitlab).to receive(:host) { gitlab_host } }
it 'defines a default schema' do
expect(subject.schema).to eq('http')
end
it 'defines a default host' do
expect(subject.host).to eq(gitlab_host)
end
it 'defines a default port' do
expect(subject.port).to eq(80)
end
......@@ -17,15 +24,25 @@ describe GeoNode, type: :model do
end
describe '#uri' do
subject { GeoNode.new(schema: 'https', host: 'localhost', port: 3000, relative_url_root: 'gitlab') }
context 'when all fields are filled' do
subject { GeoNode.new(schema: 'https', host: 'localhost', port: 3000, relative_url_root: 'gitlab') }
it 'returns an URI object' do
expect(subject.uri).to be_a URI
it 'returns an URI object' do
expect(subject.uri).to be_a URI
end
it 'includes schema home port and relative_url' do
expected_uri = URI.parse('https://localhost:3000/gitlab')
expect(subject.uri).to eq(expected_uri)
end
end
it 'includes schema home port and relative_url' do
expected_uri = URI.parse('https://localhost:3000/gitlab')
expect(subject.uri).to eq(expected_uri)
context 'when required fields are not filled' do
subject { GeoNode.new(schema: nil, host: nil, port: nil, relative_url_root: nil) }
it 'returns an URI object' do
expect(subject.uri).to be_a URI
end
end
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment