mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-06-30 11:32:18 +00:00
Previously, allowing "everyone" to access gists meant anons would see them too. With the move to Personas, we used "[]" to reflect that. With discourse/discourse#32199 adding the "everyone" option to the personas-allowed groups, we are switching back to the original behavior. Leaving allowed groups empty should always mean nobody can use the feature.
101 lines
2.9 KiB
Ruby
101 lines
2.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe DiscourseAi::GuardianExtensions do
|
|
fab!(:user)
|
|
fab!(:group)
|
|
fab!(:topic)
|
|
|
|
before do
|
|
group.add(user)
|
|
assign_fake_provider_to(:ai_summarization_model)
|
|
SiteSetting.ai_summarization_enabled = true
|
|
SiteSetting.ai_summary_gists_enabled = true
|
|
end
|
|
|
|
let(:anon_guardian) { Guardian.new }
|
|
let(:guardian) { Guardian.new(user) }
|
|
|
|
describe "#can_see_summary?" do
|
|
context "when the user cannot generate a summary" do
|
|
before { assign_persona_to(:ai_summarization_persona, []) }
|
|
|
|
it "returns false" do
|
|
expect(guardian.can_see_summary?(topic)).to eq(false)
|
|
end
|
|
|
|
it "returns true if there is a cached summary" do
|
|
Fabricate(:ai_summary, target: topic)
|
|
|
|
expect(guardian.can_see_summary?(topic)).to eq(true)
|
|
end
|
|
end
|
|
|
|
context "when the user can generate a summary" do
|
|
before { assign_persona_to(:ai_summarization_persona, [group.id]) }
|
|
|
|
it "returns true if the user group is present in the ai_custom_summarization_allowed_groups_map setting" do
|
|
expect(guardian.can_see_summary?(topic)).to eq(true)
|
|
end
|
|
end
|
|
|
|
context "when the topic is a PM" do
|
|
before { assign_persona_to(:ai_summarization_persona, [group.id]) }
|
|
let(:pm) { Fabricate(:private_message_topic) }
|
|
|
|
it "returns false" do
|
|
expect(guardian.can_see_summary?(pm)).to eq(false)
|
|
end
|
|
|
|
it "returns true if user is in a group that is allowed summaries" do
|
|
SiteSetting.ai_pm_summarization_allowed_groups = group.id
|
|
expect(guardian.can_see_summary?(pm)).to eq(true)
|
|
end
|
|
end
|
|
|
|
context "when there is no user" do
|
|
it "returns false for anons" do
|
|
expect(anon_guardian.can_see_summary?(topic)).to eq(false)
|
|
end
|
|
|
|
it "returns true for anons when there is a cached summary" do
|
|
Fabricate(:ai_summary, target: topic)
|
|
|
|
expect(guardian.can_see_summary?(topic)).to eq(true)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#can_see_gists?" do
|
|
before { assign_persona_to(:ai_summary_gists_persona, [group.id]) }
|
|
let(:guardian) { Guardian.new(user) }
|
|
|
|
context "when access is restricted to the user's group" do
|
|
it "returns false when there is a user who is a member of an allowed group" do
|
|
expect(guardian.can_see_gists?).to eq(true)
|
|
end
|
|
|
|
it "returns false for anons" do
|
|
expect(anon_guardian.can_see_gists?).to eq(false)
|
|
end
|
|
|
|
it "returns false for non-group members" do
|
|
other_user_guardian = Guardian.new(Fabricate(:user))
|
|
|
|
expect(other_user_guardian.can_see_gists?).to eq(false)
|
|
end
|
|
end
|
|
|
|
context "when access is set to everyone" do
|
|
before { assign_persona_to(:ai_summary_gists_persona, [Group::AUTO_GROUPS[:everyone]]) }
|
|
|
|
it "returns true" do
|
|
expect(guardian.can_see_gists?).to eq(true)
|
|
end
|
|
|
|
it "returns false for anons" do
|
|
expect(anon_guardian.can_see_gists?).to eq(true)
|
|
end
|
|
end
|
|
end
|
|
end
|