|
1 | 1 | require 'rails_helper' |
| 2 | +require_relative '../../lib/endpoint_url' |
| 3 | + |
| 4 | +RSpec.describe EndpointUrl do |
| 5 | + around do |example| |
| 6 | + original = Rails.configuration.x.servers.dup |
| 7 | + Rails.configuration.x.servers.clear |
| 8 | + example.run |
| 9 | + Rails.configuration.x.servers.clear |
| 10 | + Rails.configuration.x.servers.merge!(original) |
| 11 | + end |
2 | 12 |
|
3 | | -describe EndpointUrl do |
4 | 13 | describe '.geoserver' do |
5 | | - context 'when server is configured and file exists' do |
6 | | - let(:secret_file) { 'tmp/test_secret.txt' } |
7 | | - |
8 | | - before do |
9 | | - allow(Rails.configuration.x.servers).to receive(:[]).with('test_server').and_return(secret_file) |
10 | | - File.write(secret_file, 'https://user:pass@example.com/rest/') |
11 | | - end |
| 14 | + it 'builds a GetCapabilities URL without duplicate slashes' do |
| 15 | + Rails.configuration.x.servers[:geoserver] = 'https://example.com/geoserver//' |
12 | 16 |
|
13 | | - after do |
14 | | - FileUtils.rm_f(secret_file) |
15 | | - end |
| 17 | + result = described_class.geoserver(:geoserver) |
16 | 18 |
|
17 | | - it 'returns WMS endpoint URL' do |
18 | | - result = EndpointUrl.geoserver('test_server') |
19 | | - expect(result).to eq('https://example.com/wms?service=WMS&request=GetCapabilities') |
20 | | - end |
| 19 | + expect(result).to eq('https://example.com/geoserver/wms?service=WMS&request=GetCapabilities') |
21 | 20 | end |
22 | 21 |
|
23 | | - context 'when file does not exist' do |
24 | | - before do |
25 | | - allow(Rails.configuration.x.servers).to receive(:[]).with('test_server').and_return('nonexistent_file.txt') |
26 | | - end |
27 | | - |
28 | | - it 'logs error and returns nil' do |
29 | | - expect(Rails.logger).to receive(:error).with("[EndpointUrl] Failed to read test_server's URL from secrets file.No such file or directory @ rb_sysopen - nonexistent_file.txt") |
30 | | - result = EndpointUrl.geoserver('test_server') |
31 | | - expect(result).to be_nil |
32 | | - end |
33 | | - end |
34 | | - |
35 | | - context 'when server is not configured' do |
36 | | - before do |
37 | | - allow(Rails.configuration.x.servers).to receive(:[]).with('missing_server').and_return(nil) |
38 | | - end |
39 | | - |
40 | | - it 'returns nil without logging error' do |
41 | | - result = EndpointUrl.geoserver('missing_server') |
42 | | - expect(result).to be_nil |
43 | | - end |
| 22 | + it 'returns nil when server is not configured' do |
| 23 | + expect(described_class.geoserver(:unknown)).to be_nil |
44 | 24 | end |
45 | 25 | end |
46 | 26 |
|
47 | 27 | describe '.spatial_server' do |
48 | | - context 'when server is configured' do |
49 | | - before do |
50 | | - allow(Rails.configuration.x.servers).to receive(:[]).with('test_server').and_return('https://example.com') |
51 | | - end |
| 28 | + it 'builds the status data URL trimming trailing slashes' do |
| 29 | + Rails.configuration.x.servers[:spatial_server] = 'https://example.com/status/' |
52 | 30 |
|
53 | | - it 'returns spatial server data zip endpoint URL' do |
54 | | - result = EndpointUrl.spatial_server('test_server') |
55 | | - expect(result).to eq('https://example.com/public/berkeley-status/data.zip') |
56 | | - end |
57 | | - end |
| 31 | + result = described_class.spatial_server(:spatial_server) |
58 | 32 |
|
59 | | - context 'when server is not configured' do |
60 | | - before do |
61 | | - allow(Rails.configuration.x.servers).to receive(:[]).with('missing_server').and_return(nil) |
62 | | - end |
| 33 | + expect(result).to eq('https://example.com/status/public/berkeley-status/data.zip') |
| 34 | + end |
63 | 35 |
|
64 | | - it 'returns nil' do |
65 | | - result = EndpointUrl.spatial_server('missing_server') |
66 | | - expect(result).to be_nil |
67 | | - end |
| 36 | + it 'returns nil when server is not configured' do |
| 37 | + expect(described_class.spatial_server(:missing)).to be_nil |
68 | 38 | end |
69 | 39 | end |
70 | | - |
71 | 40 | end |
0 commit comments