From d9c052f8e7671bbf72b32cf33a4431db7970958a Mon Sep 17 00:00:00 2001 From: Jan Cernik <66427541+jancernik@users.noreply.github.com> Date: Wed, 3 Jan 2024 11:49:47 -0300 Subject: [PATCH] FIX: 500 error when reviewable has a missing message (#397) --- app/models/reviewable_ai_chat_message.rb | 3 ++- .../reviewable_ai_chat_message_serializer.rb | 2 +- .../components/reviewable-ai-chat-message.hbs | 26 ++++++++++--------- .../components/reviewable-ai-chat-message.js | 3 +++ .../reviewable_ai_chat_message_spec.rb | 16 ++++++++++++ 5 files changed, 36 insertions(+), 14 deletions(-) diff --git a/app/models/reviewable_ai_chat_message.rb b/app/models/reviewable_ai_chat_message.rb index 52075f78..382d9bd5 100644 --- a/app/models/reviewable_ai_chat_message.rb +++ b/app/models/reviewable_ai_chat_message.rb @@ -34,7 +34,8 @@ class ReviewableAiChatMessage < Reviewable def build_actions(actions, guardian, args) return unless pending? - return if chat_message.blank? + + return build_action(actions, :ignore, icon: "external-link-alt") if chat_message.blank? agree = actions.add_bundle("#{id}-agree", icon: "thumbs-up", label: "reviewables.actions.agree.title") diff --git a/app/serializers/reviewable_ai_chat_message_serializer.rb b/app/serializers/reviewable_ai_chat_message_serializer.rb index 6cfd1bda..241f3aad 100644 --- a/app/serializers/reviewable_ai_chat_message_serializer.rb +++ b/app/serializers/reviewable_ai_chat_message_serializer.rb @@ -10,7 +10,7 @@ class ReviewableAiChatMessageSerializer < ReviewableSerializer has_one :chat_channel, serializer: AiChatChannelSerializer, root: false, embed: :objects def chat_channel - object.chat_message.chat_channel + object.chat_message&.chat_channel end def target_id diff --git a/assets/javascripts/discourse/components/reviewable-ai-chat-message.hbs b/assets/javascripts/discourse/components/reviewable-ai-chat-message.hbs index 0f0f6003..c3108924 100644 --- a/assets/javascripts/discourse/components/reviewable-ai-chat-message.hbs +++ b/assets/javascripts/discourse/components/reviewable-ai-chat-message.hbs @@ -1,15 +1,17 @@ -
- - - -
+{{#if this.chatChannel}} +
+ + + +
+{{/if}}
diff --git a/assets/javascripts/discourse/components/reviewable-ai-chat-message.js b/assets/javascripts/discourse/components/reviewable-ai-chat-message.js index 1e02cfa7..b87ec5d4 100644 --- a/assets/javascripts/discourse/components/reviewable-ai-chat-message.js +++ b/assets/javascripts/discourse/components/reviewable-ai-chat-message.js @@ -3,6 +3,9 @@ import ChatChannel from "discourse/plugins/chat/discourse/models/chat-channel"; export default class ReviewableAiChatMessage extends Component { get chatChannel() { + if (!this.args.reviewable.chat_channel) { + return; + } return ChatChannel.create(this.args.reviewable.chat_channel); } } diff --git a/spec/system/toxicity/reviewable_ai_chat_message_spec.rb b/spec/system/toxicity/reviewable_ai_chat_message_spec.rb index a572f54e..99c4ba15 100644 --- a/spec/system/toxicity/reviewable_ai_chat_message_spec.rb +++ b/spec/system/toxicity/reviewable_ai_chat_message_spec.rb @@ -23,4 +23,20 @@ RSpec.describe "Toxicity-flagged chat messages", type: :system, js: true do expect(page).to have_selector(".reviewable-ai-chat-message .reviewable-actions") end + + context "when the message is hard deleted" do + before { chat_message.destroy! } + + it "does not throw an error" do + visit("/review") + + expect(page).to have_selector(".reviewable-ai-chat-message .reviewable-actions") + end + + it "adds the option to ignore the flag" do + visit("/review") + + expect(page).to have_selector(".reviewable-actions .chat-message-ignore") + end + end end