spec/purgatory_spec.rb in purgatory-2.4.0 vs spec/purgatory_spec.rb in purgatory-2.5.0

- old
+ new

@@ -1,8 +1,9 @@ require 'support/active_record' require 'support/widget' require 'support/user' +require 'support/animal' require 'purgatory/purgatory' describe Purgatory do let(:user1) {User.create name: 'Elan'} let(:user2) {User.create name: 'Reg'} @@ -107,11 +108,40 @@ it "should not create a widget" do Widget.count.should be_zero end end + + context "valid object using STI (single table inheritance)" do + before {create_new_object_purgatory_with_sti} + it "should create and return pending Purgatory object" do + @purgatory.should be_present + @purgatory.should_not be_approved + @purgatory.should be_pending + Purgatory.pending.count.should == 1 + Purgatory.pending.first.should == @purgatory + Purgatory.approved.count.should be_zero + end + + it "should return the soul as a new instance of the purgatoried class" do + dog = @purgatory.soul + dog.class.should == Dog + dog.should be_new_record + end + + it "should store the requester and requested changes" do + @purgatory.requester.should == user1 + @purgatory.requested_changes['name'].first.should == nil + @purgatory.requested_changes['name'].last.should == 'doggy' + end + + it "should not create a dog" do + Dog.count.should be_zero + end + end + it "should not allow invalid object creation to be put into purgatory" do widget = Widget.new name: '' widget.purgatory!(user1).should be_nil Purgatory.count.should be_zero Widget.count.should be_zero @@ -171,10 +201,38 @@ it "should fail if you try to approve again" do @purgatory.approve!(user2).should be_false end end + + context "approving new object creation using STI" do + before do + create_new_object_purgatory_with_sti + @purgatory.approve!(user2).should be_true + end + + it "should create the new object and apply any callbacks" do + Dog.count.should == 1 + dog = Dog.first + dog.name.should == 'doggy' + dog.original_name.should == 'doggy' + dog.price.should == Dog::DEFAULT_PRICE + end + + it "should mark purgatory as approved and store approver" do + @purgatory.approver.should == user2 + @purgatory.should be_approved + @purgatory.should_not be_pending + Purgatory.pending.count.should be_zero + Purgatory.approved.count.should == 1 + Purgatory.approved.first.should == @purgatory + end + + it "should fail if you try to approve again" do + @purgatory.approve!(user2).should be_false + end + end end private def create_object_change_purgatory @@ -189,6 +247,13 @@ def create_new_object_purgatory widget = Widget.new name: 'foo', price: 100 purgatory = widget.purgatory! user1 @purgatory = Purgatory.find(purgatory.id) end + + def create_new_object_purgatory_with_sti + dog = Dog.new name: 'doggy' + purgatory = dog.purgatory! user1 + @purgatory = Purgatory.find(purgatory.id) + end + end