spec/measurements/measurement_spec.rb in barometer-0.7.3 vs spec/measurements/measurement_spec.rb in barometer-0.8.0
- old
+ new
@@ -1,261 +1,233 @@
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
-describe "Measurement" do
-
+describe Barometer::Measurement do
describe "when initialized" do
-
before(:each) do
@measurement = Barometer::Measurement.new
end
-
+
it "responds to source" do
@measurement.source.should be_nil
end
-
+
it "stores the source" do
source = :wunderground
measurement = Barometer::Measurement.new(source)
measurement.source.should_not be_nil
measurement.source.should == source
end
-
+
it "responds to utc_time_stamp" do
@measurement.utc_time_stamp.should be_nil
end
-
+
it "responds to current" do
@measurement.current.should be_nil
end
-
+
it "responds to forecast (and defaults to an empty Array)" do
@measurement.forecast.should be_nil
end
-
+
it "responds to timezone" do
@measurement.timezone.should be_nil
end
-
+
it "responds to station" do
@measurement.station.should be_nil
end
-
+
it "responds to location" do
@measurement.location.should be_nil
end
-
+
it "responds to success" do
@measurement.success.should be_false
end
-
+
it "responds to current?" do
@measurement.current?.should be_true
end
-
+
it "responds to metric" do
@measurement.metric.should be_true
end
-
+
it "responds to weight" do
@measurement.weight.should == 1
end
-
+
it "responds to links" do
@measurement.links.should == {}
end
-
+
it "responds to measured_at" do
@measurement.measured_at.should be_nil
end
-
- # it "responds to measured_for" do
- # @measurement.links.should == {}
- # end
-
end
-
+
describe "when writing data" do
-
before(:each) do
@measurement = Barometer::Measurement.new
end
-
+
it "only accepts Symbol for source" do
invalid_data = 1
invalid_data.class.should_not == Symbol
lambda { @measurement.source = invalid_data }.should raise_error(ArgumentError)
-
+
valid_data = :valid
valid_data.class.should == Symbol
lambda { @measurement.source = valid_data }.should_not raise_error(ArgumentError)
end
-
+
it "only accepts Time for utc_time_stamp" do
invalid_data = 1
invalid_data.class.should_not == Time
lambda { @measurement.utc_time_stamp = invalid_data }.should raise_error(ArgumentError)
-
+
valid_data = Time.now.utc
valid_data.class.should == Time
lambda { @measurement.utc_time_stamp = valid_data }.should_not raise_error(ArgumentError)
end
-
+
it "only accepts Measurement::Result for current" do
invalid_data = "invalid"
invalid_data.class.should_not == Barometer::Measurement::Result
lambda { @measurement.current = invalid_data }.should raise_error(ArgumentError)
-
+
valid_data = Barometer::Measurement::Result.new
valid_data.class.should == Barometer::Measurement::Result
lambda { @measurement.current = valid_data }.should_not raise_error(ArgumentError)
end
-
+
it "only accepts Data::ResultArray for forecast" do
invalid_data = 1
invalid_data.class.should_not == Barometer::Measurement::ResultArray
lambda { @measurement.forecast = invalid_data }.should raise_error(ArgumentError)
-
+
valid_data = Barometer::Measurement::ResultArray.new
valid_data.class.should == Barometer::Measurement::ResultArray
lambda { @measurement.forecast = valid_data }.should_not raise_error(ArgumentError)
end
-
+
it "only accepts Data::Zone for timezone" do
invalid_data = 1
invalid_data.class.should_not == Data::Zone
lambda { @measurement.timezone = invalid_data }.should raise_error(ArgumentError)
-
+
valid_data = Data::Zone.new("Europe/Paris")
valid_data.class.should == Data::Zone
lambda { @measurement.timezone = valid_data }.should_not raise_error(ArgumentError)
end
-
+
it "only accepts Data::Location for station" do
invalid_data = 1
invalid_data.class.should_not == Data::Location
lambda { @measurement.station = invalid_data }.should raise_error(ArgumentError)
-
+
valid_data = Data::Location.new
valid_data.class.should == Data::Location
lambda { @measurement.station = valid_data }.should_not raise_error(ArgumentError)
end
-
+
it "only accepts Data::Location for location" do
invalid_data = 1
invalid_data.class.should_not == Data::Location
lambda { @measurement.location = invalid_data }.should raise_error(ArgumentError)
-
+
valid_data = Data::Location.new
valid_data.class.should == Data::Location
lambda { @measurement.location = valid_data }.should_not raise_error(ArgumentError)
end
-
+
it "only accepts Fixnum for weight" do
invalid_data = "test"
invalid_data.class.should_not == Fixnum
lambda { @measurement.weight = invalid_data }.should raise_error(ArgumentError)
-
+
valid_data = 1
valid_data.class.should == Fixnum
lambda { @measurement.weight = valid_data }.should_not raise_error(ArgumentError)
end
-
+
it "only accepts Array for links" do
invalid_data = 1
invalid_data.class.should_not == Hash
lambda { @measurement.links = invalid_data }.should raise_error(ArgumentError)
-
+
valid_data = {1 => nil}
valid_data.class.should == Hash
lambda { @measurement.links = valid_data }.should_not raise_error(ArgumentError)
end
-
+
it "only accepts Data::LocalTime for measured_at" do
invalid_data = 1
invalid_data.class.should_not == Data::LocalTime
lambda { @measurement.measured_at = invalid_data }.should raise_error(ArgumentError)
-
+
valid_data = Data::LocalTime.new
valid_data.class.should == Data::LocalTime
lambda { @measurement.measured_at = valid_data }.should_not raise_error(ArgumentError)
end
-
end
-
+
describe "and the helpers" do
-
before(:each) do
@measurement = Barometer::Measurement.new
end
-
+
it "changes state to successful (if successful)" do
@measurement.success.should be_false
@measurement.success!
@measurement.utc_time_stamp.should be_nil
@measurement.current.should be_nil
@measurement.success.should be_false
-
+
@measurement.current = Barometer::Measurement::Result.new
@measurement.current.temperature = Data::Temperature.new
@measurement.current.temperature.c = 10
@measurement.utc_time_stamp.should_not be_nil
@measurement.success!
@measurement.success.should be_true
end
-
+
it "returns successful state" do
@measurement.current = Barometer::Measurement::Result.new
@measurement.current.temperature = Data::Temperature.new
@measurement.current.temperature.c = 10
@measurement.success!
@measurement.success.should be_true
@measurement.success?.should be_true
end
-
+
it "returns non-successful state" do
@measurement.success.should be_false
@measurement.success?.should be_false
end
-
+
it "stamps the utc_time_stamp" do
@measurement.utc_time_stamp.should be_nil
@measurement.stamp!
@measurement.utc_time_stamp.should_not be_nil
end
-
+
it "indicates if current" do
@measurement.current.should be_nil
@measurement.current?.should be_true
-
+
@measurement.current = Barometer::Measurement::Result.new
@measurement.current.current_at.should be_nil
@measurement.current?.should be_true
-
+
@measurement.current.current_at = Data::LocalTime.new(9,0,0)
@measurement.current?.should be_true
@measurement.current?("9:00 am").should be_true
-
-
end
-
-
- # it "indicates if current" do
- # #@measurement.time.should be_nil
- # @measurement.current?.should be_false
- # @measurement.stamp!
- # @measurement.time.should_not be_nil
- # @measurement.current?.should be_true
- #
- # @measurement.time -= (60*60*3)
- # @measurement.current?.should be_true
- #
- # @measurement.time -= (60*60*5)
- # @measurement.current?.should be_false
- # end
-
- describe "changing units" do
+ describe "changing units" do
before(:each) do
@measurement = Barometer::Measurement.new
end
it "indicates if metric?" do
@@ -276,160 +248,134 @@
@measurement.metric = false
@measurement.metric?.should be_false
@measurement.metric!
@measurement.metric?.should be_true
end
-
end
-
end
-
+
describe "when searching forecasts using 'for'" do
-
before(:each) do
@measurement = Barometer::Measurement.new
-
+
# create a measurement object with a result array that includes
# dates for 4 consecutive days starting with tommorrow
@measurement.forecast = Barometer::Measurement::ResultArray.new
1.upto(4) do |i|
forecast_measurement = Barometer::Measurement::Result.new
forecast_measurement.date = Date.parse((Time.now + (i * 60 * 60 * 24)).to_s)
@measurement.forecast << forecast_measurement
end
@measurement.forecast.size.should == 4
-
+
@tommorrow = (Time.now + (60 * 60 * 24))
end
-
+
it "returns nil when there are no forecasts" do
@measurement.forecast = Barometer::Measurement::ResultArray.new
@measurement.forecast.size.should == 0
@measurement.for.should be_nil
end
-
+
it "finds the date using a String" do
tommorrow = @tommorrow.to_s
tommorrow.class.should == String
@measurement.for(tommorrow).should == @measurement.forecast.first
end
-
+
it "finds the date using a Date" do
tommorrow = Date.parse(@tommorrow.to_s)
tommorrow.class.should == Date
@measurement.for(tommorrow).should == @measurement.forecast.first
end
-
+
it "finds the date using a DateTime" do
tommorrow = DateTime.parse(@tommorrow.to_s)
tommorrow.class.should == DateTime
@measurement.for(tommorrow).should == @measurement.forecast.first
end
-
+
it "finds the date using a Time" do
@tommorrow.class.should == Time
@measurement.for(@tommorrow).should == @measurement.forecast.first
end
-
+
it "fidns the date using Data::LocalDateTime" do
tommorrow = Data::LocalDateTime.parse(@tommorrow.to_s)
tommorrow.class.should == Data::LocalDateTime
@measurement.for(tommorrow).should == @measurement.forecast.first
end
-
+
it "finds nothing when there is not a match" do
yesterday = (Time.now - (60 * 60 * 24))
yesterday.class.should == Time
@measurement.for(yesterday).should be_nil
end
-
end
-
+
describe "when answering the simple questions," do
-
before(:each) do
@measurement = Barometer::Measurement.new(:wunderground)
@measurement.current = Barometer::Measurement::Result.new
@now = Data::LocalDateTime.parse("2009-05-01 2:05 pm")
end
-
- # def windy?(time_string=nil, threshold=10)
- # local_time = Data::LocalTime.parse(time_string)
- # if current?(local_time)
- # return nil unless current
- # current.windy?(threshold)
- # else
- # return nil unless forecast && (future = forecast[local_time])
- # future.windy?(threshold)
- # end
- # end
-
+
describe "windy?" do
-
it "returns true if a current_measurement returns true" do
- @measurement.current.stubs(:windy?).returns(true)
+ @measurement.current.stub(:windy? => true)
@measurement.windy?.should be_true
end
-
+
it "returns false if a current_measurement returns false" do
- @measurement.current.stubs(:windy?).returns(false)
+ @measurement.current.stub(:windy? => false)
@measurement.windy?.should be_false
end
-
end
-
+
describe "wet?" do
-
it "returns true if the current_measurement returns true" do
- @measurement.current.stubs(:wet?).returns(true)
+ @measurement.current.stub(:wet? => true)
@measurement.wet?.should be_true
end
-
+
it "returns false if the current_measurement returns false" do
- @measurement.current.stubs(:wet?).returns(false)
+ @measurement.current.stub(:wet? => false)
@measurement.wet?.should be_false
end
-
end
-
+
describe "day?" do
-
it "returns true if the current_measurement returns true" do
- @measurement.current.stubs(:day?).returns(true)
+ @measurement.current.stub(:day? => true)
@measurement.day?.should be_true
end
-
+
it "returns false if the current_measurement returns false" do
- @measurement.current.stubs(:day?).returns(false)
+ @measurement.current.stub(:day? => false)
@measurement.day?.should be_false
end
-
end
-
+
describe "sunny?" do
-
it "returns true if the current_measurement returns true and day" do
- @measurement.current.stubs(:day?).returns(true)
- @measurement.current.stubs(:sunny?).returns(true)
+ @measurement.current.stub(:day? => true)
+ @measurement.current.stub(:sunny? => true)
@measurement.day?.should be_true
@measurement.sunny?.should be_true
end
-
+
it "returns false if the current_measurement returns false and day" do
- @measurement.current.stubs(:day?).returns(true)
- @measurement.current.stubs(:sunny?).returns(false)
+ @measurement.current.stub(:day? => true)
+ @measurement.current.stub(:sunny? => false)
@measurement.day?.should be_true
@measurement.sunny?.should be_false
end
-
+
it "returns false if night time" do
- @measurement.current.stubs(:day?).returns(false)
- @measurement.current.stubs(:sunny?).returns(true)
+ @measurement.current.stub(:day? => false)
+ @measurement.current.stub(:sunny? => true)
@measurement.day?.should be_false
@measurement.sunny?.should be_false
end
-
end
-
end
-
end