Feature: AI sidebar hidden by default for members and guests if AI is disabled (#1510)

* feat: new guest and member has a hidden AI sidebar if AI is disabled

* test: show_ai_sidebar state when adding new users

* test: covers guests
This commit is contained in:
Roger Saner
2026-04-19 08:25:49 +02:00
committed by GitHub
parent c962b1f420
commit 5965604359
2 changed files with 87 additions and 0 deletions

View File

@@ -379,6 +379,10 @@ class User < ApplicationRecord
self.show_sidebar = true unless show_sidebar
self.show_ai_sidebar = true unless show_ai_sidebar
end
if new_record? && member? && !ai_available?
self.show_ai_sidebar = false
end
end
def leaving_guest_role?

View File

@@ -238,6 +238,89 @@ class UserTest < ActiveSupport::TestCase
assert user.show_ai_sidebar?
end
test "new member defaults show_ai_sidebar to false when AI is not available" do
Rails.application.config.app_mode.stubs(:self_hosted?).returns(true)
previous = Setting.openai_access_token
with_env_overrides OPENAI_ACCESS_TOKEN: nil, EXTERNAL_ASSISTANT_URL: nil, EXTERNAL_ASSISTANT_TOKEN: nil do
Setting.openai_access_token = nil
user = User.new(
family: families(:empty),
email: "member-no-ai@example.com",
password: "Password1!",
password_confirmation: "Password1!",
role: :member
)
assert user.save, user.errors.full_messages.to_sentence
assert_not user.show_ai_sidebar?
end
ensure
Setting.openai_access_token = previous
end
test "new admin defaults show_ai_sidebar to true even when AI is not available" do
Rails.application.config.app_mode.stubs(:self_hosted?).returns(true)
previous = Setting.openai_access_token
with_env_overrides OPENAI_ACCESS_TOKEN: nil, EXTERNAL_ASSISTANT_URL: nil, EXTERNAL_ASSISTANT_TOKEN: nil do
Setting.openai_access_token = nil
user = User.new(
family: families(:empty),
email: "admin-no-ai@example.com",
password: "Password1!",
password_confirmation: "Password1!",
role: :admin
)
assert user.save, user.errors.full_messages.to_sentence
assert user.show_ai_sidebar?
end
ensure
Setting.openai_access_token = previous
end
test "new member defaults show_ai_sidebar to true when AI is available" do
Rails.application.config.app_mode.stubs(:self_hosted?).returns(false)
user = User.new(
family: families(:empty),
email: "member-with-ai@example.com",
password: "Password1!",
password_confirmation: "Password1!",
role: :member
)
assert user.save, user.errors.full_messages.to_sentence
assert user.show_ai_sidebar?
end
test "new guest defaults show_ai_sidebar to false when AI is not available" do
Rails.application.config.app_mode.stubs(:self_hosted?).returns(true)
previous = Setting.openai_access_token
with_env_overrides OPENAI_ACCESS_TOKEN: nil, EXTERNAL_ASSISTANT_URL: nil, EXTERNAL_ASSISTANT_TOKEN: nil do
Setting.openai_access_token = nil
user = User.new(
family: families(:empty),
email: "guest-no-ai@example.com",
password: "Password1!",
password_confirmation: "Password1!",
role: :guest
)
assert user.save, user.errors.full_messages.to_sentence
assert_not user.show_ai_sidebar?
end
ensure
Setting.openai_access_token = previous
end
test "new guest defaults show_ai_sidebar to false when AI is available" do
Rails.application.config.app_mode.stubs(:self_hosted?).returns(false)
user = User.new(
family: families(:empty),
email: "guest-with-ai@example.com",
password: "Password1!",
password_confirmation: "Password1!",
role: :guest
)
assert user.save, user.errors.full_messages.to_sentence
assert_not user.show_ai_sidebar?
end
test "update_dashboard_preferences handles concurrent updates atomically" do
@user.update!(preferences: {})