FIX: incoming and outgoing emails got lost when post was moved
This commit is contained in:
parent
44333c5de3
commit
b3094e9954
|
@ -92,10 +92,16 @@ class PostMover
|
||||||
raw: post.raw,
|
raw: post.raw,
|
||||||
topic_id: destination_topic.id,
|
topic_id: destination_topic.id,
|
||||||
acting_user: user,
|
acting_user: user,
|
||||||
|
cook_method: post.cook_method,
|
||||||
|
via_email: post.via_email,
|
||||||
|
raw_email: post.raw_email,
|
||||||
skip_validations: true,
|
skip_validations: true,
|
||||||
guardian: Guardian.new(user)
|
guardian: Guardian.new(user)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
move_incoming_emails(post, new_post)
|
||||||
|
move_email_logs(post, new_post)
|
||||||
|
|
||||||
PostAction.copy(post, new_post)
|
PostAction.copy(post, new_post)
|
||||||
new_post.update_column(:reply_count, @reply_count[1] || 0)
|
new_post.update_column(:reply_count, @reply_count[1] || 0)
|
||||||
new_post.custom_fields = post.custom_fields
|
new_post.custom_fields = post.custom_fields
|
||||||
|
@ -123,12 +129,29 @@ class PostMover
|
||||||
|
|
||||||
post.update(update)
|
post.update(update)
|
||||||
|
|
||||||
|
move_incoming_emails(post, post)
|
||||||
|
move_email_logs(post, post)
|
||||||
|
|
||||||
DiscourseEvent.trigger(:post_moved, post, original_topic.id)
|
DiscourseEvent.trigger(:post_moved, post, original_topic.id)
|
||||||
|
|
||||||
# Move any links from the post to the new topic
|
# Move any links from the post to the new topic
|
||||||
post.topic_links.update_all(topic_id: destination_topic.id)
|
post.topic_links.update_all(topic_id: destination_topic.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def move_incoming_emails(old_post, new_post)
|
||||||
|
return if old_post.incoming_email.nil?
|
||||||
|
|
||||||
|
email = old_post.incoming_email
|
||||||
|
email.update_columns(topic_id: new_post.topic_id, post_id: new_post.id)
|
||||||
|
new_post.incoming_email = email
|
||||||
|
end
|
||||||
|
|
||||||
|
def move_email_logs(old_post, new_post)
|
||||||
|
EmailLog
|
||||||
|
.where(post_id: old_post.id)
|
||||||
|
.update_all(topic_id: new_post.topic_id, post_id: new_post.id)
|
||||||
|
end
|
||||||
|
|
||||||
def update_statistics
|
def update_statistics
|
||||||
destination_topic.update_statistics
|
destination_topic.update_statistics
|
||||||
original_topic.update_statistics
|
original_topic.update_statistics
|
||||||
|
|
|
@ -334,6 +334,49 @@ describe PostMover do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
shared_examples "moves email related stuff" do
|
||||||
|
it "moves incoming email" do
|
||||||
|
Fabricate(:incoming_email, user: old_post.user, topic: old_post.topic, post: old_post)
|
||||||
|
|
||||||
|
new_topic = topic.move_posts(user, [old_post.id], title: "new testing topic name")
|
||||||
|
new_post = new_topic.first_post
|
||||||
|
email = new_post.incoming_email
|
||||||
|
|
||||||
|
expect(email).to be_present
|
||||||
|
expect(email.topic_id).to eq(new_topic.id)
|
||||||
|
expect(email.post_id).to eq(new_post.id)
|
||||||
|
|
||||||
|
expect(old_post.reload.incoming_email).to_not be_present unless old_post.id == new_post.id
|
||||||
|
end
|
||||||
|
|
||||||
|
it "moves email log entries" do
|
||||||
|
old_topic = old_post.topic
|
||||||
|
Fabricate(:email_log, user: old_post.user, topic: old_topic, post: old_post, email_type: :mailing_list)
|
||||||
|
Fabricate(:email_log, user: old_post.user, topic: old_topic, post: old_post, email_type: :mailing_list)
|
||||||
|
Fabricate(:email_log, user: old_post.user, post: old_post, email_type: :mailing_list)
|
||||||
|
|
||||||
|
expect(EmailLog.where(topic_id: old_topic.id, post_id: old_post.id).count).to eq(2)
|
||||||
|
expect(EmailLog.where(topic_id: nil, post_id: old_post.id).count).to eq(1)
|
||||||
|
|
||||||
|
new_topic = old_topic.move_posts(user, [old_post.id], title: "new testing topic name")
|
||||||
|
new_post = new_topic.first_post
|
||||||
|
|
||||||
|
expect(EmailLog.where(topic_id: old_topic.id, post_id: old_post.id).count).to eq(0)
|
||||||
|
expect(EmailLog.where(topic_id: new_topic.id, post_id: new_post.id).count).to eq(3)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "preserves post attributes" do
|
||||||
|
old_post.update_columns(cook_method: Post.cook_methods[:email], via_email: true, raw_email: "raw email content")
|
||||||
|
|
||||||
|
new_topic = old_post.topic.move_posts(user, [old_post.id], title: "new testing topic name")
|
||||||
|
new_post = new_topic.first_post
|
||||||
|
|
||||||
|
expect(new_post.cook_method).to eq(Post.cook_methods[:email])
|
||||||
|
expect(new_post.via_email).to eq(true)
|
||||||
|
expect(new_post.raw_email).to eq("raw email content")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "moving the first post" do
|
context "moving the first post" do
|
||||||
|
|
||||||
it "copies the OP, doesn't delete it" do
|
it "copies the OP, doesn't delete it" do
|
||||||
|
@ -390,6 +433,15 @@ describe PostMover do
|
||||||
expect(new_topic.first_post.custom_fields).to eq(custom_fields)
|
expect(new_topic.first_post.custom_fields).to eq(custom_fields)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
include_examples "moves email related stuff" do
|
||||||
|
let!(:old_post) { p1 }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "moving replies" do
|
||||||
|
include_examples "moves email related stuff" do
|
||||||
|
let!(:old_post) { p3 }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "to an existing topic with a deleted post" do
|
context "to an existing topic with a deleted post" do
|
||||||
|
|
Loading…
Reference in New Issue