mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-06-19 07:03:42 +08:00
74 lines
2.2 KiB
Ruby
Vendored
74 lines
2.2 KiB
Ruby
Vendored
# frozen_string_literal: true
|
|
|
|
RSpec.describe Jobs::StreamDiscoverReply do
|
|
subject(:job) { described_class.new }
|
|
|
|
before { enable_current_plugin }
|
|
|
|
describe "#execute" do
|
|
fab!(:user)
|
|
fab!(:llm_model)
|
|
fab!(:group)
|
|
fab!(:ai_agent) do
|
|
Fabricate(:ai_agent, allowed_group_ids: [group.id], default_llm_id: llm_model.id)
|
|
end
|
|
|
|
before do
|
|
SiteSetting.ai_discover_enabled = true
|
|
SiteSetting.ai_discover_agent = ai_agent.id
|
|
group.add(user)
|
|
end
|
|
|
|
def with_responses(responses)
|
|
DiscourseAi::Completions::Llm.with_prepared_responses(responses) { yield }
|
|
end
|
|
|
|
it "publishes updates with a partial summary" do
|
|
with_responses(["dummy"]) do
|
|
messages =
|
|
MessageBus.track_publish("/discourse-ai/discoveries") do
|
|
job.execute(user_id: user.id, query: "Testing search")
|
|
end
|
|
|
|
partial_update = messages.first.data
|
|
expect(partial_update[:done]).to eq(false)
|
|
expect(partial_update[:model_used]).to eq(llm_model.display_name)
|
|
expect(partial_update[:ai_discover_reply]).to eq("dummy")
|
|
end
|
|
end
|
|
|
|
it "publishes a final update to signal we're done" do
|
|
with_responses(["dummy"]) do
|
|
messages =
|
|
MessageBus.track_publish("/discourse-ai/discoveries") do
|
|
job.execute(user_id: user.id, query: "Testing search")
|
|
end
|
|
|
|
final_update = messages.last.data
|
|
expect(final_update[:done]).to eq(true)
|
|
|
|
expect(final_update[:model_used]).to eq(llm_model.display_name)
|
|
expect(final_update[:ai_discover_reply]).to eq("dummy")
|
|
end
|
|
end
|
|
|
|
it "passes the user to BotContext for proper usage tracking and permissions" do
|
|
with_responses(["dummy"]) do
|
|
# Spy on BotContext creation to verify user is passed
|
|
context_spy = nil
|
|
allow(DiscourseAi::Agents::BotContext).to receive(
|
|
:new,
|
|
).and_wrap_original do |method, **args|
|
|
context_spy = args
|
|
method.call(**args)
|
|
end
|
|
|
|
job.execute(user_id: user.id, query: "Testing search")
|
|
|
|
expect(context_spy).to be_present
|
|
expect(context_spy[:user]).to eq(user)
|
|
expect(context_spy[:feature_name]).to eq("discover")
|
|
end
|
|
end
|
|
end
|
|
end
|