FIX: Reflected links weren't being cleaned up properly
This commit is contained in:
parent
aaafd9f26e
commit
e38f17524b
|
@ -106,7 +106,7 @@ class TopicLink < ActiveRecord::Base
|
||||||
TopicLink.transaction do
|
TopicLink.transaction do
|
||||||
|
|
||||||
added_urls = []
|
added_urls = []
|
||||||
reflected_urls = []
|
reflected_ids = []
|
||||||
|
|
||||||
PrettyText
|
PrettyText
|
||||||
.extract_links(post.cooked)
|
.extract_links(post.cooked)
|
||||||
|
@ -167,8 +167,7 @@ class TopicLink < ActiveRecord::Base
|
||||||
internal: internal,
|
internal: internal,
|
||||||
link_topic_id: topic_id,
|
link_topic_id: topic_id,
|
||||||
link_post_id: reflected_post.try(:id),
|
link_post_id: reflected_post.try(:id),
|
||||||
quote: link.is_quote
|
quote: link.is_quote)
|
||||||
)
|
|
||||||
|
|
||||||
# Create the reflection if we can
|
# Create the reflection if we can
|
||||||
if topic_id.present?
|
if topic_id.present?
|
||||||
|
@ -179,17 +178,17 @@ class TopicLink < ActiveRecord::Base
|
||||||
prefix = Discourse.base_url_no_prefix
|
prefix = Discourse.base_url_no_prefix
|
||||||
|
|
||||||
reflected_url = "#{prefix}#{post.topic.relative_url(post.post_number)}"
|
reflected_url = "#{prefix}#{post.topic.relative_url(post.post_number)}"
|
||||||
|
tl = TopicLink.create(user_id: post.user_id,
|
||||||
|
topic_id: topic_id,
|
||||||
|
post_id: reflected_post.try(:id),
|
||||||
|
url: reflected_url,
|
||||||
|
domain: Discourse.current_hostname,
|
||||||
|
reflection: true,
|
||||||
|
internal: true,
|
||||||
|
link_topic_id: post.topic_id,
|
||||||
|
link_post_id: post.id)
|
||||||
|
|
||||||
reflected_urls << reflected_url
|
reflected_ids << tl.try(:id)
|
||||||
TopicLink.create(user_id: post.user_id,
|
|
||||||
topic_id: topic_id,
|
|
||||||
post_id: reflected_post.try(:id),
|
|
||||||
url: reflected_url,
|
|
||||||
domain: Discourse.current_hostname,
|
|
||||||
reflection: true,
|
|
||||||
internal: true,
|
|
||||||
link_topic_id: post.topic_id,
|
|
||||||
link_post_id: post.id)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -203,7 +202,14 @@ class TopicLink < ActiveRecord::Base
|
||||||
# Remove links that aren't there anymore
|
# Remove links that aren't there anymore
|
||||||
if added_urls.present?
|
if added_urls.present?
|
||||||
TopicLink.delete_all ["(url not in (:urls)) AND (post_id = :post_id AND NOT reflection)", urls: added_urls, post_id: post.id]
|
TopicLink.delete_all ["(url not in (:urls)) AND (post_id = :post_id AND NOT reflection)", urls: added_urls, post_id: post.id]
|
||||||
TopicLink.delete_all ["(url not in (:urls)) AND (link_post_id = :post_id AND reflection)", urls: reflected_urls, post_id: post.id]
|
|
||||||
|
reflected_ids.compact!
|
||||||
|
if reflected_ids.present?
|
||||||
|
TopicLink.delete_all ["(id not in (:reflected_ids)) AND (link_post_id = :post_id AND reflection)",
|
||||||
|
reflected_ids: reflected_ids, post_id: post.id]
|
||||||
|
else
|
||||||
|
TopicLink.delete_all ["link_post_id = :post_id AND reflection", post_id: post.id]
|
||||||
|
end
|
||||||
else
|
else
|
||||||
TopicLink.delete_all ["(post_id = :post_id AND NOT reflection) OR (link_post_id = :post_id AND reflection)", post_id: post.id]
|
TopicLink.delete_all ["(post_id = :post_id AND NOT reflection) OR (link_post_id = :post_id AND reflection)", post_id: post.id]
|
||||||
end
|
end
|
||||||
|
|
|
@ -357,7 +357,7 @@ describe PostRevisor do
|
||||||
revisor.revise!(newuser, { title: 'this is a test topic' })
|
revisor.revise!(newuser, { title: 'this is a test topic' })
|
||||||
end
|
end
|
||||||
|
|
||||||
message = messages.find { |message| message.channel == "/topic/#{topic.id}" }
|
message = messages.find { |m| m.channel == "/topic/#{topic.id}" }
|
||||||
payload = message.data
|
payload = message.data
|
||||||
expect(payload[:reload_topic]).to eq(true)
|
expect(payload[:reload_topic]).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
|
@ -113,20 +113,9 @@ http://b.com/#{'a'*500}
|
||||||
expect(reflection.link_post_id).to eq(linked_post.id)
|
expect(reflection.link_post_id).to eq(linked_post.id)
|
||||||
|
|
||||||
expect(reflection.user_id).to eq(link.user_id)
|
expect(reflection.user_id).to eq(link.user_id)
|
||||||
end
|
|
||||||
|
|
||||||
context 'removing a link' do
|
linked_post.revise(post.user, { raw: "no more linkies https://eviltrout.com" })
|
||||||
|
expect(other_topic.topic_links.where(link_post_id: linked_post.id)).to be_blank
|
||||||
before do
|
|
||||||
post.revise(post.user, { raw: "no more linkies" })
|
|
||||||
TopicLink.extract_from(post)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should remove the link' do
|
|
||||||
expect(topic.topic_links.where(post_id: post.id)).to be_blank
|
|
||||||
# should remove the reflected link
|
|
||||||
expect(other_topic.topic_links).to be_blank
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -249,8 +238,7 @@ http://b.com/#{'a'*500}
|
||||||
alternate_uri = URI.parse(Discourse.base_url)
|
alternate_uri = URI.parse(Discourse.base_url)
|
||||||
|
|
||||||
url = "http://#{alternate_uri.host}:5678/t/topic-slug/#{other_topic.id}"
|
url = "http://#{alternate_uri.host}:5678/t/topic-slug/#{other_topic.id}"
|
||||||
post = topic.posts.create(user: user,
|
post = topic.posts.create(user: user, raw: "Link to another topic: #{url}")
|
||||||
raw: "Link to another topic: #{url}")
|
|
||||||
TopicLink.extract_from(post)
|
TopicLink.extract_from(post)
|
||||||
reflection = other_topic.topic_links.first
|
reflection = other_topic.topic_links.first
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue