require_relative '../../spec_helper' module Barometer::WeatherService describe Yahoo::Response do it "parses the timezones correctly for current weather" do payload = Barometer::Utils::Payload.new({ "item" => { "pubDate" => "Sun, 14 Apr 2013 1:24 pm PDT" } }) response = Yahoo::Response.new.parse(payload) utc_observed_at = Time.utc(2013,4,14,20,24,0) utc_stale_at = Time.utc(2013,4,14,21,24,0) expect( response.current.observed_at.utc ).to eq utc_observed_at expect( response.current.stale_at.utc ).to eq utc_stale_at expect( response.timezone.to_s ).to eq 'PDT' end it "parses the timezones correctly for forecasted weather" do payload = Barometer::Utils::Payload.new({ "item" => { "pubDate" => "Sun, 14 Apr 2013 1:24 pm PDT", "forecast" => [ { "@date" => "14 Apr 2013" } ] }, "astronomy" => { "@sunrise" => "6:44 am", "@sunset" => "5:32 pm" } }) response = Yahoo::Response.new.parse(payload) utc_starts_at = Time.utc(2013,4,14,7,0,0) utc_ends_at = Time.utc(2013,4,15,6,59,59) expect( response.forecast[0].starts_at.utc ).to eq utc_starts_at expect( response.forecast[0].ends_at.utc ).to eq utc_ends_at end it "parses sun timezones correctly" do payload = Barometer::Utils::Payload.new({ "item" => { "pubDate" => "Sun, 14 Apr 2013 1:24 pm PDT", "forecast" => [ { "@date" => "15 Apr 2013" } ] }, "astronomy" => { "@sunrise" => "6:44 am", "@sunset" => "5:32 pm" } }) response = Yahoo::Response.new.parse(payload) utc_current_sun_rise = Time.utc(2013,4,14,13,44,0) utc_current_sun_set = Time.utc(2013,4,15,0,32,0) utc_forecast_sun_rise = Time.utc(2013,4,15,13,44,0) utc_forecast_sun_set = Time.utc(2013,4,16,0,32,0) expect( response.current.sun.rise.utc ).to eq utc_current_sun_rise expect( response.current.sun.set.utc ).to eq utc_current_sun_set expect( response.forecast[0].sun.rise ).to eq utc_forecast_sun_rise expect( response.forecast[0].sun.set.utc ).to eq utc_forecast_sun_set end end end