fixes #1863
This commit is contained in:
@@ -915,16 +915,39 @@ class Post < ActiveRecord::Base
|
|||||||
module VersionMethods
|
module VersionMethods
|
||||||
def create_version(force = false)
|
def create_version(force = false)
|
||||||
if new_record? || rating_changed? || source_changed? || parent_id_changed? || tag_string_changed? || force
|
if new_record? || rating_changed? || source_changed? || parent_id_changed? || tag_string_changed? || force
|
||||||
CurrentUser.increment!(:post_update_count)
|
if merge_version?
|
||||||
versions.create(
|
merge_version
|
||||||
:rating => rating,
|
else
|
||||||
:source => source,
|
create_new_version
|
||||||
:tags => tag_string,
|
end
|
||||||
:parent_id => parent_id
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def merge_version?
|
||||||
|
prev = versions.last
|
||||||
|
prev && prev.updater_id == CurrentUser.user.id && prev.updated_at > 1.hour.ago
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_new_version
|
||||||
|
CurrentUser.increment!(:post_update_count)
|
||||||
|
versions.create(
|
||||||
|
:rating => rating,
|
||||||
|
:source => source,
|
||||||
|
:tags => tag_string,
|
||||||
|
:parent_id => parent_id
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def merge_version
|
||||||
|
prev = versions.last
|
||||||
|
prev.update_attributes(
|
||||||
|
:rating => rating,
|
||||||
|
:source => source,
|
||||||
|
:tags => tag_string,
|
||||||
|
:parent_id => parent_id
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
def revert_to(target)
|
def revert_to(target)
|
||||||
self.tag_string = target.tags
|
self.tag_string = target.tags
|
||||||
self.rating = target.rating
|
self.rating = target.rating
|
||||||
|
|||||||
@@ -566,8 +566,32 @@ class PostTest < ActiveSupport::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
context "that has been updated" do
|
context "that has been updated" do
|
||||||
|
should "create a new version if it's the first version" do
|
||||||
|
assert_difference("PostVersion.count", 1) do
|
||||||
|
post = FactoryGirl.create(:post)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
should "create a new version if it's been over an hour since the last update" do
|
||||||
|
post = FactoryGirl.create(:post)
|
||||||
|
Timecop.travel(6.hours.from_now) do
|
||||||
|
assert_difference("PostVersion.count", 1) do
|
||||||
|
post.update_attributes(:tag_string => "zzz")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
should "merge with the previous version if the updater is the same user and it's been less than an hour" do
|
||||||
|
post = FactoryGirl.create(:post)
|
||||||
|
assert_difference("PostVersion.count", 0) do
|
||||||
|
post.update_attributes(:tag_string => "zzz")
|
||||||
|
end
|
||||||
|
assert_equal("zzz", post.versions.last.tags)
|
||||||
|
end
|
||||||
|
|
||||||
should "increment the updater's post_update_count" do
|
should "increment the updater's post_update_count" do
|
||||||
post = FactoryGirl.create(:post, :tag_string => "aaa bbb ccc")
|
post = FactoryGirl.create(:post, :tag_string => "aaa bbb ccc")
|
||||||
|
post.stubs(:merge_version?).returns(false)
|
||||||
|
|
||||||
assert_difference("CurrentUser.post_update_count", 1) do
|
assert_difference("CurrentUser.post_update_count", 1) do
|
||||||
post.update_attributes(:tag_string => "zzz")
|
post.update_attributes(:tag_string => "zzz")
|
||||||
@@ -1200,6 +1224,7 @@ class PostTest < ActiveSupport::TestCase
|
|||||||
context "a post that has been updated" do
|
context "a post that has been updated" do
|
||||||
setup do
|
setup do
|
||||||
@post = FactoryGirl.create(:post, :rating => "q", :tag_string => "aaa")
|
@post = FactoryGirl.create(:post, :rating => "q", :tag_string => "aaa")
|
||||||
|
@post.stubs(:merge_version?).returns(false)
|
||||||
@post.update_attributes(:tag_string => "aaa bbb ccc ddd")
|
@post.update_attributes(:tag_string => "aaa bbb ccc ddd")
|
||||||
@post.update_attributes(:tag_string => "bbb xxx yyy", :source => "xyz")
|
@post.update_attributes(:tag_string => "bbb xxx yyy", :source => "xyz")
|
||||||
@post.update_attributes(:tag_string => "bbb mmm yyy", :source => "abc")
|
@post.update_attributes(:tag_string => "bbb mmm yyy", :source => "abc")
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ class PostVersionTest < ActiveSupport::TestCase
|
|||||||
context "that has multiple versions: " do
|
context "that has multiple versions: " do
|
||||||
setup do
|
setup do
|
||||||
@post = FactoryGirl.create(:post, :tag_string => "1")
|
@post = FactoryGirl.create(:post, :tag_string => "1")
|
||||||
|
@post.stubs(:merge_version?).returns(false)
|
||||||
@post.update_attributes(:tag_string => "1 2")
|
@post.update_attributes(:tag_string => "1 2")
|
||||||
@post.update_attributes(:tag_string => "2 3")
|
@post.update_attributes(:tag_string => "2 3")
|
||||||
end
|
end
|
||||||
@@ -59,6 +60,7 @@ class PostVersionTest < ActiveSupport::TestCase
|
|||||||
setup do
|
setup do
|
||||||
@parent = FactoryGirl.create(:post)
|
@parent = FactoryGirl.create(:post)
|
||||||
@post = FactoryGirl.create(:post, :tag_string => "aaa bbb ccc", :rating => "q", :source => "xyz")
|
@post = FactoryGirl.create(:post, :tag_string => "aaa bbb ccc", :rating => "q", :source => "xyz")
|
||||||
|
@post.stubs(:merge_version?).returns(false)
|
||||||
@post.update_attributes(:tag_string => "bbb ccc xxx", :source => "")
|
@post.update_attributes(:tag_string => "bbb ccc xxx", :source => "")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -62,14 +62,20 @@ class TagAliasTest < ActiveSupport::TestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
should "not push the antecedent's category to the consequent if the antecedent is general"
|
should "not push the antecedent's category to the consequent if the antecedent is general" do
|
||||||
|
|
||||||
should "push the antecedent's category to the consequent" do
|
|
||||||
tag1 = FactoryGirl.create(:tag, :name => "aaa")
|
tag1 = FactoryGirl.create(:tag, :name => "aaa")
|
||||||
tag2 = FactoryGirl.create(:tag, :name => "bbb", :category => 1)
|
tag2 = FactoryGirl.create(:tag, :name => "bbb", :category => 1)
|
||||||
ta = FactoryGirl.create(:tag_alias, :antecedent_name => "aaa", :consequent_name => "bbb")
|
ta = FactoryGirl.create(:tag_alias, :antecedent_name => "aaa", :consequent_name => "bbb")
|
||||||
tag2.reload
|
tag2.reload
|
||||||
assert_equal(1, tag2.category)
|
assert_equal(1, tag2.category)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "push the antecedent's category to the consequent" do
|
||||||
|
tag1 = FactoryGirl.create(:tag, :name => "aaa", :category => 1)
|
||||||
|
tag2 = FactoryGirl.create(:tag, :name => "bbb")
|
||||||
|
ta = FactoryGirl.create(:tag_alias, :antecedent_name => "aaa", :consequent_name => "bbb")
|
||||||
|
tag2.reload
|
||||||
|
assert_equal(1, tag2.category)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user