* Refactored post history. Each post now has a single history record. This history record has multiple revisions, serialized as JSON in a text field.

This commit is contained in:
albert
2010-11-06 03:08:27 -04:00
parent 6076788d60
commit f3b4312ef3
11 changed files with 190 additions and 19 deletions

View File

@@ -7,6 +7,7 @@ class PostHistoryTest < ActiveSupport::TestCase
CurrentUser.user = @user
CurrentUser.ip_addr = "127.0.0.1"
MEMCACHE.flush_all
PostHistory.stubs(:revision_time).returns("TIME")
end
teardown do
@@ -15,19 +16,48 @@ class PostHistoryTest < ActiveSupport::TestCase
end
should "create a revision after creation" do
PostHistory.stubs(:revision_time).returns("TIME")
post = Factory.create(:post, :tag_string => "aaa bbb ccc")
assert_equal(1, post.revisions.size)
assert_equal({"source"=>nil, "rating"=>"q", "tag_string"=>"aaa bbb ccc", "parent_id"=>nil, "user_id"=>1, "ip_addr"=>"127.0.0.1", "updated_at"=>"TIME"}, post.revisions.last)
assert_equal({"source"=>nil, "rating"=>"q", "tag_string"=>"aaa bbb ccc", "parent_id"=>nil, "user_id"=>@user.id, "ip_addr"=>"127.0.0.1", "updated_at"=>"TIME"}, post.revisions.last)
end
should "create additional revisions after updating" do
PostHistory.stubs(:revision_time).returns("TIME")
post = Factory.create(:post, :tag_string => "aaa bbb ccc")
post.update_attributes(:tag_string => "bbb ccc ddd")
post.reload
assert_equal(2, post.revisions.size)
assert_equal({"source"=>nil, "rating"=>"q", "tag_string"=>"bbb ccc ddd", "parent_id"=>nil, "user_id"=>3, "ip_addr"=>"127.0.0.1", "updated_at"=>"TIME"}, post.revisions.last)
assert_equal({"source"=>nil, "rating"=>"q", "tag_string"=>"bbb ccc ddd", "parent_id"=>nil, "user_id"=>@user.id, "ip_addr"=>"127.0.0.1", "updated_at"=>"TIME"}, post.revisions.last)
end
context "history" do
setup do
@post = Factory.create(:post, :tag_string => "aaa bbb ccc", :source => "xyz", :rating => "q")
@post.update_attributes(:tag_string => "bbb ccc ddd", :source => "abc", :rating => "s")
@post.update_attributes(:tag_string => "ccc ddd eee")
@revisions = []
@post.history.each_revision do |revision|
@revisions << revision
end
end
should "link revisions together" do
assert_nil(@revisions[0].prev)
assert_equal(@revisions[0], @revisions[1].prev)
assert_equal(@revisions[1], @revisions[2].prev)
end
should "iterate over its revisions" do
assert_equal(3, @revisions.size)
assert_equal(%w(aaa bbb ccc), @revisions[0].tag_array)
assert_equal(%w(bbb ccc ddd), @revisions[1].tag_array)
assert_equal(%w(ccc ddd eee), @revisions[2].tag_array)
end
should "create a diff for each revision detailing what changed" do
assert_equal({:add=>["aaa", "bbb", "ccc"], :del=>[], :rating=>"q", :source=>"xyz", :parent_id=>nil}, @revisions[0].diff)
assert_equal({:del=>["aaa"], :add=>["ddd"], :rating=>"s", :source=>"abc"}, @revisions[1].diff)
assert_equal({:del=>["bbb"], :add=>["eee"]}, @revisions[2].diff)
end
end
end
end