# frozen_string_literal: true RSpec.describe "AI Spam Configuration", type: :system, js: true do fab!(:admin) let(:llm_model) { Fabricate(:llm_model) } before do SiteSetting.discourse_ai_enabled = true sign_in(admin) end it "can properly configure spam settings" do visit "/admin/plugins/discourse-ai/ai-spam" expect(page).to have_css(".ai-spam__llm-placeholder") toggle = PageObjects::Components::DToggleSwitch.new(".ai-spam__toggle") toggle.toggle dialog = PageObjects::Components::Dialog.new expect(dialog).to have_content(I18n.t("discourse_ai.llm.configuration.must_select_model")) dialog.click_ok expect(toggle.unchecked?).to eq(true) llm_model visit "/admin/plugins/discourse-ai/ai-spam" toggle = PageObjects::Components::DToggleSwitch.new(".ai-spam__toggle") toggle.toggle try_until_success { expect(AiModerationSetting.spam&.llm_model_id).to eq(llm_model.id) } find(".ai-spam__instructions-input").fill_in(with: "Test spam detection instructions") find(".ai-spam__instructions-save").click toasts = PageObjects::Components::Toasts.new expect(toasts).to have_content(I18n.t("js.discourse_ai.spam.settings_saved")) expect(AiModerationSetting.spam.custom_instructions).to eq("Test spam detection instructions") visit "/admin/plugins/discourse-ai/ai-llms" expect(find(".ai-llm-list-editor__usages")).to have_content( I18n.t("js.discourse_ai.llms.usage.ai_spam"), ) end end