spec/memento/action/update_spec.rb in memento-0.3.7 vs spec/memento/action/update_spec.rb in memento-0.4.0
- old
+ new
@@ -7,115 +7,115 @@
@time1 = 3.days.ago
@time2 = 2.days.ago
@project = Project.create!(:name => "P1", :closed_at => @time1, :notes => "Bla bla").reload
@customer = Customer.create!(:name => "C1")
end
-
+
after do
shutdown_db
end
-
+
describe "when object gets updated" do
-
+
before do
- Memento.instance.memento(@user) do
+ Memento(@user) do
@project.update_attributes(:name => "P2", :closed_at => @time2, :customer => @customer, :notes => "Bla bla")
end
end
-
+
it "should create memento_state for ar-object from changes_for_memento" do
Memento::State.count.should eql(1)
Memento::State.first.action_type.should eql("update")
Memento::State.first.record.should eql(@project)
Memento::State.first.record_data.keys.sort.should eql(%w(name closed_at customer_id).sort)
Memento::State.first.record_data["name"].should eql(["P1", "P2"])
Memento::State.first.record_data["customer_id"].should eql([nil, @customer.id])
Memento::State.first.record_data["closed_at"][0].utc.to_s.should eql(@time1.utc.to_s)
Memento::State.first.record_data["closed_at"][1].utc.to_s.should eql(@time2.utc.to_s)
end
-
+
it "should update object" do
@project.reload.name.should eql("P2")
@project.customer.should eql(@customer)
@project.closed_at.to_s.should eql(@time2.to_s)
@project.should_not be_changed
Project.count.should eql(1)
end
-
+
it "should allow undoing the update" do
undone = Memento::Session.last.undo.first
undone.should be_success
undone.object.should_not be_changed
undone.object.name.should eql("P1")
undone.object.customer.should be_nil
undone.object.closed_at.to_s.should eql(@time1.to_s)
end
-
+
describe "when record was destroyed before undo" do
before do
@project.destroy
end
-
+
it "should return fake object with error" do
undone = Memento::Session.last.undo.first
undone.should_not be_success
undone.error.first.should be_was_destroyed
undone.object.class.should eql(Project)
undone.object.id.should eql(1)
end
end
-
+
describe "when record was changed before undo" do
-
+
describe "with mergeable unrecorded changes" do
before do
@project.update_attributes({:notes => "Bla!"})
@result = Memento::Session.first.undo.first
@object = @result.object
end
-
+
it "should be success" do
@result.should be_success
end
-
+
it "should return correctly updated object" do
@object.class.should eql(Project)
@object.name.should eql("P1")
@object.customer.should be_nil
@object.closed_at.to_s.should eql(@time1.to_s)
@object.notes.should eql("Bla!")
end
end
-
+
describe "with mergeable recorded changes" do
before do
- Memento.instance.memento(@user) do
+ Memento(@user) do
@project.update_attributes({:notes => "Bla\nBla!"})
end
Memento::State.last.update_attributes(:created_at => 1.minute.from_now)
@result = Memento::Session.first.undo.first
@object = @result.object
end
-
+
it "should be success" do
@result.should be_success
end
-
+
it "should return correctly updated object" do
@object.class.should eql(Project)
@object.name.should eql("P1")
@object.customer.should be_nil
@object.closed_at.to_s.should eql(@time1.to_s)
@object.notes.should eql("Bla\nBla!")
end
-
+
describe "when second state is undone" do
before do
@result = Memento::Session.first.undo.first
@object = @result.object
end
-
+
it "should be success" do
@result.should be_success
end
it "should return correctly updated object" do
@@ -136,50 +136,50 @@
end
it "should fail" do
@result.should be_failed
end
-
+
it "should set error" do
@result.error.first.should be_was_changed
end
-
+
it "should return not undone object" do
@object.name.should eql("P3")
@object.customer.should eql(@customer)
@object.closed_at.to_s.should eql(@time2.to_s)
@object.should_not be_changed
end
end
-
+
describe "with unmergeable recorded changes" do
before do
- Memento.instance.memento(@user) do
+ Memento(@user) do
@project.update_attributes!({:name => "P3"})
end
Memento::State.last.update_attributes(:created_at => 1.minute.from_now)
@result = Memento::Session.first.undo.first
@object = @result.object
end
-
+
it "should fail" do
@result.should be_failed
end
-
+
it "should return not undone object" do
@object.name.should eql("P3")
@object.customer.should eql(@customer)
@object.closed_at.to_s.should eql(@time2.to_s)
@object.should_not be_changed
end
-
+
describe "when second state is undone" do
before do
@result = Memento::Session.last.undo.first
@object = @result.object
end
-
+
it "should be success" do
@result.should be_success
end
it "should return correctly updated object" do
@@ -190,24 +190,24 @@
@object.notes.should eql("Bla bla")
end
end
end
end
-
+
end
-
+
describe "when object gets updated with no changes" do
-
+
before do
- Memento.instance.memento(@user) do
+ Memento(@user) do
@project.update_attributes(:name => "P1", :customer => nil, :notes => "Bla bla")
end
end
-
+
it "should not create session/state" do
Memento::Session.count.should eql(0)
Memento::State.count.should eql(0)
end
-
+
end
-
+
end
\ No newline at end of file