FIX: Ensure topic exists before making a banner. (#7781)

FIX: Ensure topic exists before making a banner. (#7781)

diff --git a/lib/guardian/topic_guardian.rb b/lib/guardian/topic_guardian.rb
index e7cc4f2..d52c1e7 100644
--- a/lib/guardian/topic_guardian.rb
+++ b/lib/guardian/topic_guardian.rb
@@ -174,6 +174,6 @@ module TopicGuardian
   end
 
   def can_banner_topic?(topic)
-    authenticated? && !topic.private_message? && is_staff?
+    topic && authenticated? && !topic.private_message? && is_staff?
   end
 end
diff --git a/spec/components/guardian_spec.rb b/spec/components/guardian_spec.rb
index c5c9b2b..13369ec 100644
--- a/spec/components/guardian_spec.rb
+++ b/spec/components/guardian_spec.rb
@@ -776,6 +776,13 @@ describe Guardian do
         PostActionCreator.create(user, first_post, :off_topic)
         expect(Guardian.new(moderator).can_see?(private_topic)).to be_truthy
       end
+
+      it "allows staff to set banner topics" do
+        topic = Fabricate(:topic)
+
+        expect(Guardian.new(admin).can_banner_topic?(nil)).to be_falsey
+        expect(Guardian.new(admin).can_banner_topic?(topic)).to be_truthy
+      end
     end
 
     describe 'a Post' do

GitHub sha: 55780524

1 Like