spec/purgatory_spec.rb in purgatory-2.8.0 vs spec/purgatory_spec.rb in purgatory-2.9.0

- old
+ new

@@ -318,19 +318,70 @@ @purgatory.approve!(user2).should be_false end end end - describe "determine_attr_accessor_fields" do - before do - AttributeAccessorFields.local_attributes = nil + describe "use_purgatory" do + context "on class that has attr_accessors" do + context "use_purgatory with no arguments" do + before do + @klass = create_subclass_of(Item) + @klass.instance_eval { use_purgatory } + end + + it "should not store attr_accessors" do + obj = @klass.new name: 'foo', price: 100, dante: "inferno" + purgatory = obj.purgatory! user1 + purgatory.attr_accessor_fields.should == {} + end + end + + context "use_purgatory with valid arguments" do + context "use_purgatory with one active record class" do + before do + @klass = create_subclass_of(Item) + @klass.instance_eval { use_purgatory :local_attributes => [:dante] } + end + + it "should work" do + obj = @klass.new name: 'foo', price: 100, dante: "inferno" + purgatory = obj.purgatory! user1 + purgatory.attr_accessor_fields.should == { :@dante => "inferno" } + end + end + + context "use_purgatory with more than one active record class" do + before do + @klass = create_subclass_of(Item) + @klass.instance_eval { use_purgatory :local_attributes => [:dante] } + + @klass_2 = create_subclass_of(Item) + @klass_2.instance_eval { use_purgatory :local_attributes => [:minos]; attr_accessor :minos } + + @klass_3 = create_subclass_of(Item) + @klass_3.instance_eval { use_purgatory } + end + + it "should work" do + obj = @klass.new name: 'foo', price: 100, dante: "inferno" + purgatory = obj.purgatory! user1 + purgatory.attr_accessor_fields.should == { :@dante => "inferno" } + + obj = @klass_2.new name: 'foo', price: 100, minos: "inferno" + purgatory = obj.purgatory! user1 + purgatory.attr_accessor_fields.should == { :@minos => "inferno" } + + obj = @klass_3.new name: 'foo', price: 100 + purgatory = obj.purgatory! user1 + purgatory.attr_accessor_fields.should == {} + end + end + end end - - after do - AttributeAccessorFields.local_attributes = nil - end + end + describe "determine_attr_accessor_fields" do context "obj has no attr_accessors" do before do @obj = Widget.new end @@ -339,14 +390,14 @@ end end context "obj has attr_accessors" do before do - klass = create_subclass_of(Widget) - klass.instance_eval { attr_accessor :dante, :minos, :charon } + @klass = create_subclass_of(Widget) + @klass.instance_eval { attr_accessor :dante, :minos, :charon } - @obj = klass.new + @obj = @klass.new @obj.dante = "inferno" @obj.minos = "inferno" @obj.charon = "inferno" end @@ -358,20 +409,20 @@ end context "local_attributes is array" do context "array size is 1" do before do - AttributeAccessorFields.local_attributes = [:dante] + AttributeAccessorFields.set_local_attributes_to_save(@klass,[:dante]) end it "should only contain attr_accessors specified in array" do AttributeAccessorFields.determine_attr_accessor_fields(@obj).should == { :@dante => "inferno" } end end context "array size is more than 1" do before do - AttributeAccessorFields.local_attributes = [:dante, :minos] + AttributeAccessorFields.set_local_attributes_to_save(@klass,[:dante, :minos]) end it "should only contain attr_accessors specified in array" do AttributeAccessorFields.determine_attr_accessor_fields(@obj).should == { :@dante => "inferno", :@minos => "inferno" } end @@ -379,10 +430,10 @@ end end context "value of local_variables is :all" do before do - AttributeAccessorFields.local_attributes = :all + AttributeAccessorFields.set_local_attributes_to_save(@klass,:all) end it "should automatically determine attr_accessor values that doesnt include ones belonging to AR::Base and its ancestors, and then store these values" do AttributeAccessorFields.determine_attr_accessor_fields(@obj).should == { :@dante => "inferno", :@minos => "inferno", :@charon => "inferno" } end