spec/hashme/property_spec.rb in hashme-0.1.2 vs spec/hashme/property_spec.rb in hashme-0.2.0

- old
+ new

@@ -1,90 +1,88 @@ require 'spec_helper' describe Hashme::Property do + subject do + described_class + end + let :owner do double() end - let :klass do - Hashme::Property - end - let :submodel do Class.new do include Hashme property :name, String end end describe "#initialize" do - it "should copy name and type" do - prop = klass.new("name", String) - prop.name.should eql(:name) - prop.type.should eql(String) - prop.use_casted_array?.should be_false + prop = subject.new("name", String) + expect(prop.name).to eql(:name) + expect(prop.type).to eql(String) + expect(prop.array).to be_falsey end it "should convert Array to CastedArray type" do - prop = klass.new("names", [String]) - prop.name.should eql(:names) - prop.type.should eql(String) - prop.use_casted_array?.should be_true + prop = subject.new("names", [String]) + expect(prop.name).to eql(:names) + expect(prop.type).to eql(String) + expect(prop.array).to be_truthy end it "should accept a default option" do - prop = klass.new(:name, String, :default => "Freddo") - prop.default.should eql("Freddo") + prop = subject.new(:name, String, :default => "Freddo") + expect(prop.default).to eql("Freddo") end - end describe "#to_s" do it "should use property's name" do - prop = klass.new(:name, String) - prop.to_s.should eql("name") + prop = subject.new(:name, String) + expect(prop.to_s).to eql("name") end end describe "#to_sym" do it "should return the name" do - prop = klass.new(:name, String) - prop.to_sym.should eql (:name) + prop = subject.new(:name, String) + expect(prop.to_sym).to eql (:name) end end - describe "#cast" do + describe "#build" do context "without an array" do it "should build a new object" do - prop = klass.new(:date, Time) - obj = prop.cast(owner, "2013-06-02T12:00:00") - obj.class.should eql(Time) - obj.should eql(Time.new("2013-06-02T12:00:00")) + prop = subject.new(:date, Time) + obj = prop.build(owner, "2013-06-02T12:00:00Z") + expect(obj.class).to eql(Time) + expect(obj).to eql(Time.utc(2013, 6, 2, 12, 0, 0)) end it "should assign casted by and property" do - prop = klass.new(:item, submodel) - obj = prop.cast(owner, {:name => 'test'}) - obj.casted_by.should eql(owner) - obj.casted_by_property.should eql(prop) + prop = subject.new(:item, submodel) + obj = prop.build(owner, {:name => 'test'}) + expect(obj.casted_by).to eql(owner) + expect(obj.casted_by_property).to eql(prop) end end context "with an array" do it "should convert regular array to casted array" do - prop = klass.new(:dates, [Time]) - obj = prop.cast(owner, ["2013-06-02T12:00:00"]) - obj.class.should eql(Hashme::CastedArray) - obj.first.class.should eql(Time) + prop = subject.new(:dates, [Time]) + obj = prop.build(owner, ["2013-06-02T12:00:00"]) + expect(obj.class).to eql(Hashme::CastedArray) + expect(obj.first.class).to eql(Time) end it "should handle complex objects" do - prop = klass.new(:items, [submodel]) - obj = prop.cast(owner, [{:name => 'test'}]) - obj.class.should eql(Hashme::CastedArray) - obj.first.class.should eql(submodel) - obj.first.name.should eql('test') + prop = subject.new(:items, [submodel]) + obj = prop.build(owner, [{:name => 'test'}]) + expect(obj.class).to eql(Hashme::CastedArray) + expect(obj.first.class).to eql(submodel) + expect(obj.first.name).to eql('test') end end end