FIX: Clear inline onebox cache when a post is rebaked (#16871)

Meta topic: https://meta.discourse.org/t/prevent-to-linkify-when-there-is-a-redirect/226964/4?u=osama.
This commit is contained in:
Osama Sayegh 2022-05-20 14:09:50 +03:00 committed by GitHub
parent 1fb8fef3f8
commit eddb8891c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 51 additions and 5 deletions

View File

@ -32,15 +32,15 @@ class PostAnalyzer
end
limit = SiteSetting.max_oneboxes_per_post
result = Oneboxer.apply(cooked) do |url|
next if limit <= 0
limit -= 1
@onebox_urls << url
result = Oneboxer.apply(cooked, extra_paths: ".inline-onebox-loading") do |url, element|
if opts[:invalidate_oneboxes]
Oneboxer.invalidate(url)
InlineOneboxer.invalidate(url)
end
next if element["class"] != Oneboxer::ONEBOX_CSS_CLASS
next if limit <= 0
limit -= 1
@onebox_urls << url
onebox = Oneboxer.cached_onebox(url)
@found_oneboxes = true if onebox.present?
onebox

View File

@ -1228,6 +1228,52 @@ describe Post do
post.reload
post.rebake!
end
it "uses inline onebox cache by default" do
Jobs.run_immediately!
stub_request(:get, "http://testonebox.com/vvf").to_return(status: 200, body: <<~HTML)
<html><head>
<title>hello this is Testonebox!</title>
</head></html>
HTML
post = create_post(raw: <<~POST).reload
hello inline onebox http://testonebox.com/vvf
POST
expect(post.cooked).to include("hello this is Testonebox!")
stub_request(:get, "http://testonebox.com/vvf").to_return(status: 200, body: <<~HTML)
<html><head>
<title>hello this is updated Testonebox!</title>
</head></html>
HTML
post.rebake!
expect(post.reload.cooked).to include("hello this is Testonebox!")
ensure
InlineOneboxer.invalidate("http://testonebox.com/vvf")
end
it "passing invalidate_oneboxes: true ignores inline onebox cache" do
Jobs.run_immediately!
stub_request(:get, "http://testonebox.com/vvf22").to_return(status: 200, body: <<~HTML)
<html><head>
<title>hello this is Testonebox!</title>
</head></html>
HTML
post = create_post(raw: <<~POST).reload
hello inline onebox http://testonebox.com/vvf22
POST
expect(post.cooked).to include("hello this is Testonebox!")
stub_request(:get, "http://testonebox.com/vvf22").to_return(status: 200, body: <<~HTML)
<html><head>
<title>hello this is updated Testonebox!</title>
</head></html>
HTML
post.rebake!(invalidate_oneboxes: true)
expect(post.reload.cooked).to include("hello this is updated Testonebox!")
ensure
InlineOneboxer.invalidate("http://testonebox.com/vvf22")
end
end
describe "#set_owner" do