spec/integration/integration_spec.rb in mongoid-history-0.1.3 vs spec/integration/integration_spec.rb in mongoid-history-0.1.4

- old
+ new

@@ -38,60 +38,60 @@ field :email field :name track_history :except => [:email] end end - + before :each do @user = User.create(:name => "Aaron", :email => "aaron@randomemail.com") @another_user = User.create(:name => "Another Guy", :email => "anotherguy@randomemail.com") @post = Post.create(:title => "Test", :body => "Post", :modifier => @user, :views => 100) @comment = @post.comments.create(:title => "test", :body => "comment", :modifier => @user) end - + describe "track" do describe "on creation" do it "should have one history track in comment" do @comment.history_tracks.count.should == 1 end - + it "should assign title and body on modified" do @comment.history_tracks.first.modified.should == {'title' => "test", 'body' => "comment"} end - + it "should not assign title and body on original" do @comment.history_tracks.first.original.should == {} end - + it "should assign modifier" do @comment.history_tracks.first.modifier.should == @user end - + it "should assign version" do @comment.history_tracks.first.version.should == 1 end - + it "should assign scope" do @comment.history_tracks.first.scope == "Post" end it "should assign method" do @comment.history_tracks.first.action == "create" end - + it "should assign association_chain" do @comment.history_tracks.first.association_chain = [{:id => @post.id, :name => "Post"}, {:id => @comment.id, :name => "Comment"}] end end - + describe "on destruction" do it "should have two history track records in post" do lambda { @post.destroy }.should change(HistoryTracker, :count).by(1) end - + it "should assign destroy on track record" do @post.destroy @post.history_tracks.last.action == "destroy" end @@ -99,24 +99,24 @@ @post.destroy @post.history_tracks.last.affected["title"] == "Test" end end - + describe "on update non-embedded" do it "should create a history track if changed attributes match tracked attributes" do lambda { @post.update_attributes(:title => "Another Test") - }.should change(HistoryTracker, :count).by(1) + }.should change(HistoryTracker, :count).by(1) end it "should not create a history track if changed attributes do not match tracked attributes" do lambda { @post.update_attributes(:rating => "untracked") }.should change(HistoryTracker, :count).by(0) end - + it "should assign modified fields" do @post.update_attributes(:title => "Another Test") @post.history_tracks.first.modified.should == { "title" => "Another Test" } @@ -124,11 +124,11 @@ it "should assign method field" do @post.update_attributes(:title => "Another Test") @post.history_tracks.first.action.should == "update" end - + it "should assign original fields" do @post.update_attributes(:title => "Another Test") @post.history_tracks.first.original.should == { "title" => "Test" } @@ -141,11 +141,11 @@ it "should assign version on history tracks" do @post.update_attributes(:title => "Another Test") @post.history_tracks.first.version.should == 1 end - + it "should assign version on post" do @post.update_attributes(:title => "Another Test") @post.version.should == 1 end @@ -164,11 +164,11 @@ @user.history_tracks.first.modified.should == { "name" => "Aaron2" } end end - + describe "on update non-embedded twice" do it "should assign version on post" do @post.update_attributes(:title => "Test2") @post.update_attributes(:title => "Test3") @post.version.should == 2 @@ -176,60 +176,60 @@ it "should create a history track if changed attributes match tracked attributes" do lambda { @post.update_attributes(:title => "Test2") @post.update_attributes(:title => "Test3") - }.should change(HistoryTracker, :count).by(2) + }.should change(HistoryTracker, :count).by(2) end - + it "should create a history track of version 2" do @post.update_attributes(:title => "Test2") @post.update_attributes(:title => "Test3") @post.history_tracks.where(:version => 2).first.should_not be_nil end - + it "should assign modified fields" do @post.update_attributes(:title => "Test2") @post.update_attributes(:title => "Test3") @post.history_tracks.where(:version => 2).first.modified.should == { "title" => "Test3" } end - + it "should assign original fields" do @post.update_attributes(:title => "Test2") @post.update_attributes(:title => "Test3") @post.history_tracks.where(:version => 2).first.original.should == { "title" => "Test2" } end - + it "should assign modifier" do @post.update_attributes(:title => "Another Test", :modifier => @another_user) @post.history_tracks.first.modifier.should == @another_user end end - + describe "on update embedded" do it "should assign version on comment" do @comment.update_attributes(:title => "Test2") @comment.version.should == 2 # first track generated on creation end it "should create a history track of version 2" do @comment.update_attributes(:title => "Test2") @comment.history_tracks.where(:version => 2).first.should_not be_nil end - + it "should assign modified fields" do @comment.update_attributes(:title => "Test2") @comment.history_tracks.where(:version => 2).first.modified.should == { "title" => "Test2" } end - + it "should assign original fields" do @comment.update_attributes(:title => "Test2") @comment.history_tracks.where(:version => 2).first.original.should == { "title" => "test" } @@ -238,11 +238,11 @@ it "should assign modifier" do @post.update_attributes(:title => "Another Test", :modifier => @another_user) @post.history_tracks.first.modifier.should == @another_user end end - + describe "non-embedded" do it "should undo changes" do @post.update_attributes(:title => "Test2") @post.history_tracks.where(:version => 1).first.undo!(@user) @post.reload @@ -252,133 +252,131 @@ it "should undo destruction" do @post.destroy @post.history_tracks.where(:version => 1).first.undo!(@user) Post.find(@post.id).title.should == "Test" end - + it "should create a new history track after undo" do @post.update_attributes(:title => "Test2") @post.history_tracks.where(:version => 1).first.undo!(@user) @post.reload @post.history_tracks.count.should == 2 end - + it "should assign @user as the modifier of the newly created history track" do @post.update_attributes(:title => "Test2") @post.history_tracks.where(:version => 1).first.undo!(@user) @post.reload @post.history_tracks.where(:version => 2).first.modifier.should == @user end - + it "should stay the same after undo and redo" do @post.update_attributes(:title => "Test2") @track = @post.history_tracks.where(:version => 1).first @track.undo!(@user) @track.redo!(@user) @post2 = Post.where(:_id => @post.id).first - + @post.title.should == @post2.title end - + it "should be destroyed after undo and redo" do @post.destroy @track = @post.history_tracks.where(:version => 1).first @track.undo!(@user) @track.redo!(@user) Post.where(:_id => @post.id).first == nil end - end - + describe "embedded" do it "should undo changes" do @comment.update_attributes(:title => "Test2") @comment.history_tracks.where(:version => 2).first.undo!(@user) # reloading an embedded document === KAMIKAZE # at least for the current release of mongoid... @post.reload @comment = @post.comments.first @comment.title.should == "test" end - + it "should create a new history track after undo" do @comment.update_attributes(:title => "Test2") @comment.history_tracks.where(:version => 2).first.undo!(@user) @post.reload @comment = @post.comments.first @comment.history_tracks.count.should == 3 end - + it "should assign @user as the modifier of the newly created history track" do @comment.update_attributes(:title => "Test2") @comment.history_tracks.where(:version => 2).first.undo!(@user) @post.reload @comment = @post.comments.first @comment.history_tracks.where(:version => 3).first.modifier.should == @user end - + it "should stay the same after undo and redo" do @comment.update_attributes(:title => "Test2") @track = @comment.history_tracks.where(:version => 2).first @track.undo!(@user) @track.redo!(@user) @post2 = Post.where(:_id => @post.id).first @comment2 = @post2.comments.first - + @comment.title.should == @comment2.title end end - + describe "trackables" do before :each do @comment.update_attributes(:title => "Test2") # version == 2 @comment.update_attributes(:title => "Test3") # version == 3 @comment.update_attributes(:title => "Test4") # version == 4 end - + describe "undo" do it "should recognize :from, :to options" do @comment.undo! @user, :from => 4, :to => 2 @comment.title.should == "test" end - + it "should recognize parameter as version number" do @comment.undo! @user, 3 - @comment.title.should == "Test2" end - + it "should undo last version when no parameter is specified" do @comment.undo! @user @comment.title.should == "Test3" end - + it "should recognize :last options" do @comment.undo! @user, :last => 2 @comment.title.should == "Test2" end end - + describe "redo" do before :each do @comment.update_attributes(:title => "Test5") end - + it "should recognize :from, :to options" do @comment.redo! @user, :from => 2, :to => 4 @comment.title.should == "Test4" end - + it "should recognize parameter as version number" do @comment.redo! @user, 2 @comment.title.should == "Test2" end - + it "should redo last version when no parameter is specified" do @comment.redo! @user @comment.title.should == "Test5" end - + it "should recognize :last options" do @comment.redo! @user, :last => 1 @comment.title.should == "Test5" end