discourse-ai/spec/jobs/shared_conversation_adjust_...

70 lines
2.4 KiB
Ruby

# frozen_string_literal: true
RSpec.describe Jobs::SharedConversationAdjustUploadSecurity do
let(:params) { {} }
fab!(:claude_2) { Fabricate(:llm_model, name: "claude-2") }
fab!(:bot_user) do
SiteSetting.discourse_ai_enabled = true
toggle_enabled_bots(bots: [claude_2])
SiteSetting.ai_bot_enabled = true
SiteSetting.ai_bot_allowed_groups = "10"
SiteSetting.ai_bot_public_sharing_allowed_groups = "10"
claude_2.reload.user
end
fab!(:user)
fab!(:topic) { Fabricate(:private_message_topic, user: user, recipient: bot_user) }
fab!(:post_1) { Fabricate(:post, topic: topic, user: bot_user) }
fab!(:post_2) { Fabricate(:post, topic: topic, user: user) }
fab!(:conversation) { SharedAiConversation.share_conversation(user, topic) }
def run_job
described_class.new.execute(params)
end
context "when conversation is created" do
let(:params) { { conversation_id: conversation.id } }
it "does nothing for a conversation that has been deleted before the job ran" do
conversation.destroy
SharedAiConversation.any_instance.expects(:update).never
run_job
end
it "does nothing if there weren't any posts with secure uploads in the topic" do
original_context = conversation.context
run_job
expect(conversation.reload.context).to eq(original_context)
end
context "when topic posts were rebaked because they had secure uploads" do
it "updates the conversation cooked post content after rebaking" do
post_2.update!(raw: "some new rebaked content")
TopicUploadSecurityManager.any_instance.expects(:run).returns([post_2])
original_context = conversation.context
run_job
expect(conversation.reload.context).not_to eq(original_context)
end
end
end
context "when conversation has been deleted" do
let(:params) { { target_id: topic.id, target_type: "Topic" } }
before { conversation.destroy! }
it "runs the topic upload security manager but doesn't attempt to update a conversation" do
SharedAiConversation.any_instance.expects(:update).never
TopicUploadSecurityManager.any_instance.expects(:run).once
run_job
end
it "doesn't attempt to run the topic upload security manager if the topic has been deleted" do
TopicUploadSecurityManager.any_instance.expects(:run).never
topic.trash!
run_job
end
end
end