2019-04-29 20:27:42 -04:00
# frozen_string_literal: true
2022-07-27 22:27:38 -04:00
RSpec . describe Jobs :: ProcessPost do
2013-02-05 14:16:51 -05:00
it " returns when the post cannot be found " do
2023-01-10 00:41:25 -05:00
expect { Jobs :: ProcessPost . new . execute ( post_id : 1 ) } . not_to raise_error
2013-02-05 14:16:51 -05:00
end
context " with a post " do
2023-11-09 17:47:59 -05:00
fab! ( :post )
2013-02-05 14:16:51 -05:00
2014-12-07 02:11:38 -05:00
it " does not erase posts when CookedPostProcessor malfunctions " do
# Look kids, an actual reason why you want to use mocks
CookedPostProcessor . any_instance . expects ( :html ) . returns ( " " )
cooked = post . cooked
post . reload
2014-12-31 09:55:03 -05:00
expect ( post . cooked ) . to eq ( cooked )
2014-12-07 02:11:38 -05:00
Jobs :: ProcessPost . new . execute ( post_id : post . id , cook : true )
2013-02-05 14:16:51 -05:00
end
2014-12-07 02:11:38 -05:00
it " recooks if needed " do
cooked = post . cooked
post . update_columns ( cooked : " frogs " )
Jobs :: ProcessPost . new . execute ( post_id : post . id , cook : true )
post . reload
2014-12-31 09:55:03 -05:00
expect ( post . cooked ) . to eq ( cooked )
2013-02-05 14:16:51 -05:00
end
2014-12-07 02:11:38 -05:00
it " processes posts " do
post =
Fabricate ( :post , raw : " <img src=' #{ Discourse . base_url_no_prefix } /awesome/picture.png'> " )
2014-12-31 09:55:03 -05:00
expect ( post . cooked ) . to match ( / http / )
2021-10-19 07:42:29 -04:00
stub_image_size
2014-12-07 02:11:38 -05:00
Jobs :: ProcessPost . new . execute ( post_id : post . id )
post . reload
# subtle but cooked post processor strip this stuff, this ensures all the code gets a workout
2014-12-31 09:55:03 -05:00
expect ( post . cooked ) . not_to match ( / http / )
2013-02-25 11:42:20 -05:00
end
2013-02-05 14:16:51 -05:00
2017-01-30 03:42:05 -05:00
it " always re-extracts links on post process " do
post . update_columns ( raw : " sam has a blog at https://samsaffron.com " )
2017-01-31 03:40:56 -05:00
expect { Jobs :: ProcessPost . new . execute ( post_id : post . id ) } . to change { TopicLink . count } . by ( 1 )
2017-01-30 03:42:05 -05:00
end
2017-02-06 08:45:04 -05:00
it " extracts links to quoted posts " do
quoted_post =
Fabricate (
:post ,
raw : " This is a post with a link to https://www.discourse.org " ,
post_number : 42 ,
2017-07-14 08:27:28 -04:00
)
post . update_columns (
raw :
" This quote is the best \n \n [quote= \" #{ quoted_post . user . username } , topic: #{ quoted_post . topic_id } , post: #{ quoted_post . post_number } \" ] \n #{ quoted_post . excerpt } \n [/quote] " ,
2023-01-09 06:18:21 -05:00
)
2021-10-19 07:42:29 -04:00
stub_image_size
2017-02-06 08:45:04 -05:00
# when creating a quote, we also create the reflexion link
expect { Jobs :: ProcessPost . new . execute ( post_id : post . id ) } . to change { TopicLink . count } . by ( 2 )
end
2013-02-05 14:16:51 -05:00
2017-02-06 08:45:04 -05:00
it " extracts links to oneboxed topics " do
oneboxed_post = Fabricate ( :post )
post . update_columns ( raw : " This post is the best \n \n #{ oneboxed_post . full_url } " )
2021-10-19 07:42:29 -04:00
stub_image_size
2017-02-06 08:45:04 -05:00
# when creating a quote, we also create the reflexion link
expect { Jobs :: ProcessPost . new . execute ( post_id : post . id ) } . to change { TopicLink . count } . by ( 2 )
end
2017-12-21 08:45:59 -05:00
it " works for posts that belong to no existing user " do
cooked = post . cooked
post . update_columns ( cooked : " frogs " , user_id : nil )
Jobs :: ProcessPost . new . execute ( post_id : post . id , cook : true )
post . reload
expect ( post . cooked ) . to eq ( cooked )
post . update_columns ( cooked : " frogs " , user_id : User . maximum ( " id " ) + 1 )
Jobs :: ProcessPost . new . execute ( post_id : post . id , cook : true )
post . reload
expect ( post . cooked ) . to eq ( cooked )
end
2021-03-03 03:53:38 -05:00
2021-03-10 12:07:13 -05:00
it " updates the topic excerpt when first post " do
post = Fabricate ( :post , raw : " Some OP content " , cooked : " " )
post . topic . update_excerpt ( " Incorrect " )
Jobs :: ProcessPost . new . execute ( post_id : post . id )
expect ( post . topic . reload . excerpt ) . to eq ( " Some OP content " )
post2 = Fabricate ( :post , raw : " Some reply content " , cooked : " " , topic : post . topic )
Jobs :: ProcessPost . new . execute ( post_id : post2 . id )
expect ( post . topic . reload . excerpt ) . to eq ( " Some OP content " )
end
2017-02-06 08:45:04 -05:00
end
2022-05-16 12:56:00 -04:00
2022-07-27 06:21:10 -04:00
describe " # enqueue_pull_hotlinked_images " do
2022-05-16 12:56:00 -04:00
fab! ( :post ) { Fabricate ( :post , created_at : 20 . days . ago ) }
let ( :job ) { Jobs :: ProcessPost . new }
it " runs even when download_remote_images_to_local is disabled " do
# We want to run it to pull hotlinked optimized images
SiteSetting . download_remote_images_to_local = false
expect_enqueued_with ( job : :pull_hotlinked_images , args : { post_id : post . id } ) do
job . execute ( { post_id : post . id } )
end
end
context " when download_remote_images_to_local? is enabled " do
before { SiteSetting . download_remote_images_to_local = true }
it " enqueues " do
expect_enqueued_with ( job : :pull_hotlinked_images , args : { post_id : post . id } ) do
job . execute ( { post_id : post . id } )
end
end
it " does not run when requested to skip " do
job . execute ( { post_id : post . id , skip_pull_hotlinked_images : true } )
expect ( Jobs :: PullHotlinkedImages . jobs . size ) . to eq ( 0 )
end
end
end
2013-02-05 14:16:51 -05:00
end