spec/alert_spec.rb in gull-0.2.9 vs spec/alert_spec.rb in gull-0.2.10

- old
+ new

@@ -1,74 +1,99 @@ require 'spec_helper' describe Gull::Alert do - it "should initialize with geocode" do + it 'should initialize with geocode' do alert = Gull::Alert.new expect(alert.geocode).not_to be_nil end - it "should fetch parsed alerts" do - xml = File.read "spec/fixtures/alerts.xml" + it 'should fetch parsed alerts' do + xml = File.read 'spec/fixtures/alerts.xml' - stub_request(:get, "http://alerts.weather.gov/cap/us.php?x=0"). - with(:headers => {'Accept'=>'*/*'}). - to_return(:status => 200, :body => xml, :headers => {}) + stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') + .with(headers: { 'Accept' => '*/*' }) + .to_return(status: 200, body: xml, headers: {}) alerts = Gull::Alert.fetch expect(alerts.size).to eq(3) first = alerts.first - expect(first.id).to eq "http://alerts.weather.gov/cap/wwacapget.php?x=CA125171381DD0.HeatAdvisory" - expect(first.link).to eq "http://alerts.weather.gov/cap/wwacapget.php?x=CA125171381DD0.HeatAdvisory" - expect(first.alert_type).to eq "Heat Advisory" - expect(first.title).to eq "Heat Advisory issued October 01 at 8:40AM PDT until October 03 at 9:00PM PDT by NWS" - expect(first.summary).to eq "SUMMARY TEXT" - - coordinates = [[27.35,-81.79], [27.14,-81.89], [27.04,-81.97], [27.04,-82.02], [27.14,-81.97], [27.35,-81.86], - [27.35,-81.79]] + expect(first.id).to eq 'http://alerts.weather.gov/cap/wwacapget.php?x=CA125171381DD0.HeatAdvisory' + expect(first.link).to eq 'http://alerts.weather.gov/cap/wwacapget.php?x=CA125171381DD0.HeatAdvisory' + expect(first.alert_type).to eq 'Heat Advisory' + expect(first.title).to eq 'Heat Advisory issued October 01 at 8:40AM PDT' \ + ' until October 03 at 9:00PM PDT by NWS' + expect(first.summary).to eq 'SUMMARY TEXT' + + coordinates = [[27.35, -81.79], [27.14, -81.89], [27.04, -81.97], + [27.04, -82.02], [27.14, -81.97], [27.35, -81.86], + [27.35, -81.79]] expect(first.polygon.coordinates).to eq coordinates - - expect(first.effective_at).to eq Time.parse("2014-10-01T08:40:00-07:00") - expect(first.expires_at).to eq Time.parse("2014-10-03T21:00:00-07:00") - expect(first.updated_at).to eq Time.parse("2014-10-01T08:40:00-07:05") - expect(first.published_at).to eq Time.parse("2014-10-01T08:40:00-07:06") - expect(first.area).to eq "Southern Salinas Valley, Arroyo Seco and Lake San Antonio" + expect(first.effective_at).to eq Time.parse('2014-10-01T08:40:00-07:00') + expect(first.expires_at).to eq Time.parse('2014-10-03T21:00:00-07:00') + expect(first.updated_at).to eq Time.parse('2014-10-01T08:40:00-07:05') + expect(first.published_at).to eq Time.parse('2014-10-01T08:40:00-07:06') + + expect(first.area).to eq 'Southern Salinas Valley, Arroyo Seco and Lake ' \ + 'San Antonio' expect(first.urgency).to eq :expected expect(first.severity).to eq :minor expect(first.certainty).to eq :very_likely - expect(first.geocode.fips6).to eq "006001 006013 006041 006053 006055 006069 006075 006081 006085 006087 006097" - expect(first.geocode.ugc).to eq "CAZ006 CAZ505 CAZ506 CAZ507 CAZ508 CAZ509 CAZ510 CAZ511 CAZ512" + expect(first.geocode.fips6).to eq '006001 006013 006041 006053 006055 ' \ + '006069 006075 006081 006085 006087 006097' + expect(first.geocode.ugc).to eq 'CAZ006 CAZ505 CAZ506 CAZ507 CAZ508 ' \ + 'CAZ509 CAZ510 CAZ511 CAZ512' - expect(first.vtec).to eq "/O.NEW.KMTR.HT.Y.0002.141002T1900Z-141004T0400Z/" + expect(first.vtec).to eq '/O.NEW.KMTR.HT.Y.0002.141002T1900Z-141004T0400Z/' second = alerts[1] expect(second.polygon).to be_nil expect(second.vtec).to be_nil third = alerts[2] expect(third.vtec).to be_nil end - it "should handle empty alerts" do - xml = File.read "spec/fixtures/empty.xml" + it 'should fetch from url in options' do + xml = File.read 'spec/fixtures/alerts.xml' - stub_request(:get, "http://alerts.weather.gov/cap/us.php?x=0"). - with(:headers => {'Accept'=>'*/*'}). - to_return(:status => 200, :body => xml, :headers => {}) + stub_request(:get, 'http://alerts.weather.gov/cap/ok.php?x=1') + .with(headers: { 'Accept' => '*/*' }) + .to_return(status: 200, body: xml, headers: {}) + alerts = Gull::Alert.fetch(url: 'http://alerts.weather.gov/cap/ok.php?x=1') + expect(alerts.size).to eq(3) + end + + it 'should handle empty alerts' do + xml = File.read 'spec/fixtures/empty.xml' + + stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') + .with(headers: { 'Accept' => '*/*' }) + .to_return(status: 200, body: xml, headers: {}) + alerts = Gull::Alert.fetch expect(alerts.size).to eq(0) end - it "should handle bad response" do - xml = File.read "spec/fixtures/bad.xml" + it 'should handle bad response' do + xml = File.read 'spec/fixtures/bad.xml' - stub_request(:get, "http://alerts.weather.gov/cap/us.php?x=0"). - with(:headers => {'Accept'=>'*/*'}). - to_return(:status => 200, :body => xml, :headers => {}) + stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') + .with(headers: { 'Accept' => '*/*' }) + .to_return(status: 200, body: xml, headers: {}) alerts = Gull::Alert.fetch - expect(alerts.size).to eq(0) + expect(alerts.size).to eq(0) end -end \ No newline at end of file + + it 'should raise own error if timeout occurs' do + stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') + .with(headers: { 'Accept' => '*/*' }).to_timeout + + message = 'Timeout while connecting to NWS web service' + expect { Gull::Alert.fetch } + .to raise_error(Gull::TimeoutError, message) + end +end