# frozen_string_literal: true require "rails_helper" describe "AI Tool Management", type: :system do fab!(:admin) let(:page_header) { PageObjects::Components::DPageHeader.new } before do SiteSetting.ai_embeddings_enabled = true sign_in(admin) end def ensure_can_run_test find(".ai-tool-editor__test-button").click modal = PageObjects::Modals::AiToolTest.new modal.base_currency = "USD" modal.target_currency = "EUR" modal.amount = "100" stub_request(:get, %r{https://open\.er-api\.com/v6/latest/USD}).to_return( status: 200, body: '{"rates": {"EUR": 0.85}}', headers: { "Content-Type" => "application/json", }, ) modal.run_test expect(modal).to have_content("exchange_rate") expect(modal).to have_content("0.85") modal.close end it "allows admin to create a new AI tool from preset" do visit "/admin/plugins/discourse-ai/ai-tools" expect(page).to have_content("Tools") find(".ai-tool-list-editor__new-button").click tool_presets = PageObjects::Components::DMenu.new(find(".ai-tool-list-editor__new-button")) tool_presets.option(".btn[data-option='exchange_rate']").click required_toggle_css = "#control-parameters-0-required .form-kit__control-checkbox" enum_toggle_css = "#control-parameters-0-isEnum .form-kit__control-checkbox" expect(page.find(required_toggle_css).checked?).to eq(true) expect(page.find(enum_toggle_css).checked?).to eq(false) # not allowed to test yet expect(page).not_to have_button(".ai-tool-editor__test-button") expect(page).not_to have_button(".ai-tool-editor__delete") find(".ai-tool-editor__save").click expect(page).to have_content("Tool saved") last_tool = AiTool.order("id desc").limit(1).first visit "/admin/plugins/discourse-ai/ai-tools/#{last_tool.id}/edit" ensure_can_run_test expect(page.first(required_toggle_css).checked?).to eq(true) expect(page.first(enum_toggle_css).checked?).to eq(false) visit "/admin/plugins/discourse-ai/ai-personas/new" tool_id = AiTool.order("id desc").limit(1).pluck(:id).first tool_selector = PageObjects::Components::SelectKit.new("#control-tools .select-kit") tool_selector.expand tool_selector.select_row_by_value("custom-#{tool_id}") expect(tool_selector).to have_selected_value("custom-#{tool_id}") end end