discourse-ai/spec/lib/personas/tools/setting_context_spec.rb
Roman Rizzi 30242a27e6
REFACTOR: Move personas into its own module. (#1233)
This change moves all the personas code into its own module. We want to treat them as a building block features can built on top of, same as `Completions::Llm`.

The code to title a message was moved from `Bot` to `Playground`.
2025-03-31 14:42:33 -03:00

58 lines
1.7 KiB
Ruby

# frozen_string_literal: true
def has_rg?
if defined?(@has_rg)
@has_rg
else
@has_rg |= system("which rg")
end
end
RSpec.describe DiscourseAi::Personas::Tools::SettingContext, if: has_rg? do
fab!(:llm_model)
let(:bot_user) { DiscourseAi::AiBot::EntryPoint.find_user_from_model(llm_model.name) }
let(:llm) { DiscourseAi::Completions::Llm.proxy("custom:#{llm_model.id}") }
before { SiteSetting.ai_bot_enabled = true }
def setting_context(setting_name)
described_class.new({ setting_name: setting_name }, bot_user: bot_user, llm: llm)
end
describe "#execute" do
it "returns the context for core setting" do
result = setting_context("moderators_view_emails").invoke
expect(result[:setting_name]).to eq("moderators_view_emails")
expect(result[:context]).to include("site_settings.yml")
expect(result[:context]).to include("moderators_view_emails")
end
it "supports spaces and case insensitive setting name" do
result = setting_context("moderaTors View Emails").invoke
expect(result[:setting_name]).to eq("moderators_view_emails")
expect(result[:context]).to include("site_settings.yml")
expect(result[:context]).to include("moderators_view_emails")
end
it "returns the context for plugin setting" do
result = setting_context("ai_bot_enabled").invoke
expect(result[:setting_name]).to eq("ai_bot_enabled")
expect(result[:context]).to include("ai_bot_enabled:")
end
context "when the setting does not exist" do
it "returns an error message" do
result = setting_context("this_setting_does_not_exist").invoke
expect(result[:context]).to eq("This setting does not exist")
end
end
end
end