DEV: Allow passing a category parameter when importing a topic (#14069)

DEV: Allow passing a category parameter when importing a topic (#14069)

This will be used in the rss pooling plugin to address the feature request at Allow admins to set new topics category in the plugin settings - feature - Discourse Meta

diff --git a/app/models/topic_embed.rb b/app/models/topic_embed.rb
index 6927939..380daaf 100644
--- a/app/models/topic_embed.rb
+++ b/app/models/topic_embed.rb
@@ -27,7 +27,7 @@ class TopicEmbed < ActiveRecord::Base
   end
 
   # Import an article from a source (RSS/Atom/Other)
-  def self.import(user, url, title, contents)
+  def self.import(user, url, title, contents, category_id: nil)
     return unless url =~ /^https?\:\/\//
 
     if SiteSetting.embed_truncate
@@ -58,7 +58,7 @@ class TopicEmbed < ActiveRecord::Base
           raw: absolutize_urls(url, contents),
           skip_validations: true,
           cook_method: cook_method,
-          category: eh.try(:category_id)
+          category: category_id || eh.try(:category_id)
         }
         if SiteSetting.embed_unlisted?
           create_args[:visible] = false
diff --git a/spec/models/topic_embed_spec.rb b/spec/models/topic_embed_spec.rb
index d73135a..decb502 100644
--- a/spec/models/topic_embed_spec.rb
+++ b/spec/models/topic_embed_spec.rb
@@ -16,6 +16,7 @@ describe TopicEmbed do
     let(:url) { 'http://eviltrout.com/123' }
     let(:contents) { "<p>hello world new post <a href='/hello'>hello</a> <img src='/images/wat.jpg'></p>" }
     fab!(:embeddable_host) { Fabricate(:embeddable_host) }
+    fab!(:category) { Fabricate(:category) }
 
     it "returns nil when the URL is malformed" do
       expect(TopicEmbed.import(user, "invalid url", title, contents)).to eq(nil)
@@ -95,6 +96,14 @@ describe TopicEmbed do
         imported_post = TopicEmbed.import(user, "http://eviltrout.com/abcd", title, "some random content")
         expect(imported_post.topic).to be_visible
       end
+
+      it "creates the topic in the category passed as a parameter" do
+        Jobs.run_immediately!
+        SiteSetting.embed_unlisted = false
+        imported_post = TopicEmbed.import(user, "http://eviltrout.com/abcd", title, "some random content", category_id: category.id)
+        expect(imported_post.topic.category).not_to eq(embeddable_host.category)
+        expect(imported_post.topic.category).to eq(category)
+      end
     end
 
     context "post creation supports markdown rendering" do

GitHub sha: 560c13211a70370a0ab93bfa2ea0af3578ddf4bd

This commit appears in #14069 which was approved by eviltrout. It was merged by Falco.