diff --git a/config/settings.yml b/config/settings.yml index ef73431f..fd56903c 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -1,6 +1,6 @@ discourse_solved: solved_enabled: - default: true + default: false client: true show_who_marked_solved: default: false @@ -59,4 +59,3 @@ discourse_solved: enable_solved_tags: type: tag_list default: "" - diff --git a/db/migrate/20250721192553_enable_solved_if_already_installed.rb b/db/migrate/20250721192553_enable_solved_if_already_installed.rb new file mode 100644 index 00000000..0ac17dd8 --- /dev/null +++ b/db/migrate/20250721192553_enable_solved_if_already_installed.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class EnableSolvedIfAlreadyInstalled < ActiveRecord::Migration[7.2] + def up + installed_at = DB.query_single(<<~SQL)&.first + SELECT created_at FROM schema_migration_details WHERE version='20191209095548' + SQL + + if installed_at && installed_at < 1.hour.ago + # The plugin was installed before we changed it to be disabled-by-default + # Therefore, if there is no existing database value, enable the plugin + execute <<~SQL + INSERT INTO site_settings(name, data_type, value, created_at, updated_at) + VALUES('solved_enabled', 5, 't', NOW(), NOW()) + ON CONFLICT (name) DO NOTHING + SQL + end + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/spec/components/composer_messages_finder_spec.rb b/spec/components/composer_messages_finder_spec.rb index 944fa8b4..e5ad912f 100644 --- a/spec/components/composer_messages_finder_spec.rb +++ b/spec/components/composer_messages_finder_spec.rb @@ -10,7 +10,10 @@ fab!(:topic) fab!(:post) { Fabricate(:post, topic: topic, user: Fabricate(:user)) } - before { SiteSetting.disable_solved_education_message = false } + before do + enable_current_plugin + SiteSetting.disable_solved_education_message = false + end it "does not show message without a topic id" do expect( diff --git a/spec/components/post_revisor_spec.rb b/spec/components/post_revisor_spec.rb index d35cb828..103af717 100644 --- a/spec/components/post_revisor_spec.rb +++ b/spec/components/post_revisor_spec.rb @@ -13,6 +13,8 @@ category end + before { enable_current_plugin } + it "refreshes post stream when topic category changes to a solved category" do topic = Fabricate(:topic, category: Fabricate(:category_with_definition)) post = Fabricate(:post, topic: topic) diff --git a/spec/integration/solved_spec.rb b/spec/integration/solved_spec.rb index 9a65f764..7212cb82 100644 --- a/spec/integration/solved_spec.rb +++ b/spec/integration/solved_spec.rb @@ -7,7 +7,10 @@ fab!(:user) { Fabricate(:trust_level_4) } let(:p1) { Fabricate(:post, topic: topic) } - before { SiteSetting.allow_solved_on_all_topics = true } + before do + enable_current_plugin + SiteSetting.allow_solved_on_all_topics = true + end describe "customer filters" do before do diff --git a/spec/lib/first_accepted_post_solution_validator_spec.rb b/spec/lib/first_accepted_post_solution_validator_spec.rb index 87bd0277..c31e5f87 100644 --- a/spec/lib/first_accepted_post_solution_validator_spec.rb +++ b/spec/lib/first_accepted_post_solution_validator_spec.rb @@ -3,6 +3,8 @@ describe DiscourseSolved::FirstAcceptedPostSolutionValidator do fab!(:user_tl1) { Fabricate(:user, trust_level: TrustLevel[1], refresh_auto_groups: true) } + before { enable_current_plugin } + context "when trust level is 'any'" do it "validates the post" do post = Fabricate(:post, user: user_tl1) diff --git a/spec/lib/guardian_extensions_spec.rb b/spec/lib/guardian_extensions_spec.rb index a3354b50..2200784e 100644 --- a/spec/lib/guardian_extensions_spec.rb +++ b/spec/lib/guardian_extensions_spec.rb @@ -10,7 +10,10 @@ let(:guardian) { user.guardian } - before { SiteSetting.allow_solved_on_all_topics = true } + before do + enable_current_plugin + SiteSetting.allow_solved_on_all_topics = true + end describe ".can_accept_answer?" do it "returns false for anon users" do diff --git a/spec/models/copy_solved_topic_custom_field_spec.rb b/spec/models/copy_solved_topic_custom_field_spec.rb index 574f0496..71a47368 100644 --- a/spec/models/copy_solved_topic_custom_field_spec.rb +++ b/spec/models/copy_solved_topic_custom_field_spec.rb @@ -5,6 +5,8 @@ RSpec.describe CopySolvedTopicCustomFieldToDiscourseSolvedSolvedTopics, type: :migration do let(:migration) { described_class.new } + before { enable_current_plugin } + describe "handling duplicates" do it "ensures only unique topic_id and answer_post_id are inserted" do topic = Fabricate(:topic) diff --git a/spec/models/directory_item_spec.rb b/spec/models/directory_item_spec.rb index 7b72585f..98ec3a91 100644 --- a/spec/models/directory_item_spec.rb +++ b/spec/models/directory_item_spec.rb @@ -14,7 +14,7 @@ fab!(:pm) { Fabricate(:topic, archetype: "private_message", user:, category_id: nil) } fab!(:pm_post) { Fabricate(:post, topic: pm, user:) } - before { SiteSetting.solved_enabled = true } + before { enable_current_plugin } it "excludes PM post solutions from solutions" do DiscourseSolved.accept_answer!(topic_post1, admin) diff --git a/spec/models/remove_duplicates_from_discourse_solved_solved_topics_spec.rb b/spec/models/remove_duplicates_from_discourse_solved_solved_topics_spec.rb index 3df83b6a..0ca8d980 100644 --- a/spec/models/remove_duplicates_from_discourse_solved_solved_topics_spec.rb +++ b/spec/models/remove_duplicates_from_discourse_solved_solved_topics_spec.rb @@ -6,6 +6,7 @@ let(:migration) { described_class.new } before do + enable_current_plugin # temp drop unique constraints to allow testing duplicate entries ActiveRecord::Base.connection.execute( "DROP INDEX IF EXISTS index_discourse_solved_solved_topics_on_topic_id;", diff --git a/spec/models/site_spec.rb b/spec/models/site_spec.rb index 5b58c87e..97dfabf7 100644 --- a/spec/models/site_spec.rb +++ b/spec/models/site_spec.rb @@ -7,7 +7,10 @@ let(:category) { Fabricate(:category) } let(:guardian) { Guardian.new } - before { SiteSetting.show_filter_by_solved_status = true } + before do + enable_current_plugin + SiteSetting.show_filter_by_solved_status = true + end it "includes `enable_accepted_answers` custom field for categories" do category.custom_fields["enable_accepted_answers"] = true diff --git a/spec/models/user_summary_spec.rb b/spec/models/user_summary_spec.rb index 5ba79181..0c5a9272 100644 --- a/spec/models/user_summary_spec.rb +++ b/spec/models/user_summary_spec.rb @@ -3,6 +3,8 @@ describe UserSummary do fab!(:admin) + before { enable_current_plugin } + describe "solved_count" do it "indicates the number of times a user's post is a topic's solution" do topic = Fabricate(:topic) diff --git a/spec/requests/answer_controller_spec.rb b/spec/requests/answer_controller_spec.rb index 4861080f..f039de1e 100644 --- a/spec/requests/answer_controller_spec.rb +++ b/spec/requests/answer_controller_spec.rb @@ -11,7 +11,7 @@ fab!(:solution_post) { Fabricate(:post, topic: topic) } before do - SiteSetting.solved_enabled = true + enable_current_plugin SiteSetting.allow_solved_on_all_topics = true category.custom_fields[DiscourseSolved::ENABLE_ACCEPTED_ANSWERS_CUSTOM_FIELD] = "true" category.save_custom_fields diff --git a/spec/requests/list_controller_spec.rb b/spec/requests/list_controller_spec.rb index 386c40a2..e0a140bf 100644 --- a/spec/requests/list_controller_spec.rb +++ b/spec/requests/list_controller_spec.rb @@ -7,7 +7,10 @@ fab!(:p2) { Fabricate(:post, topic: p1.topic) } fab!(:p3) { Fabricate(:post, topic: p1.topic) } - before { SiteSetting.allow_solved_on_all_topics = true } + before do + enable_current_plugin + SiteSetting.allow_solved_on_all_topics = true + end it "shows the user who posted the accepted answer second" do TopicFeaturedUsers.ensure_consistency! diff --git a/spec/requests/solved_topics_controller_spec.rb b/spec/requests/solved_topics_controller_spec.rb index 2cd1ce2d..de334422 100644 --- a/spec/requests/solved_topics_controller_spec.rb +++ b/spec/requests/solved_topics_controller_spec.rb @@ -9,6 +9,8 @@ fab!(:answer_post) { Fabricate(:post, topic:, user:) } fab!(:solved_topic) { Fabricate(:solved_topic, topic:, answer_post:) } + before { enable_current_plugin } + describe "#by_user" do context "when accessing with username" do it "returns solved posts for the specified user" do diff --git a/spec/requests/topics_controller_spec.rb b/spec/requests/topics_controller_spec.rb index e5302df9..24066a46 100644 --- a/spec/requests/topics_controller_spec.rb +++ b/spec/requests/topics_controller_spec.rb @@ -7,6 +7,8 @@ let(:topic) { p1.topic } let(:p2) { Fabricate(:post, like_count: 2, topic: topic, user: Fabricate(:user)) } + before { enable_current_plugin } + def schema_json(answerCount) if answerCount > 0 answer_json = diff --git a/spec/serializers/topic_answer_mixin_spec.rb b/spec/serializers/topic_answer_mixin_spec.rb index 489e24a5..1a75e301 100644 --- a/spec/serializers/topic_answer_mixin_spec.rb +++ b/spec/serializers/topic_answer_mixin_spec.rb @@ -7,7 +7,10 @@ let(:post) { Fabricate(:post, topic: topic) } let(:guardian) { Guardian.new } - before { Fabricate(:solved_topic, topic: topic, answer_post: post) } + before do + enable_current_plugin + Fabricate(:solved_topic, topic: topic, answer_post: post) + end it "should have true for `has_accepted_answer` field in each serializer" do [ diff --git a/spec/serializers/topic_view_serializer_spec.rb b/spec/serializers/topic_view_serializer_spec.rb index b3332145..1133d8ca 100644 --- a/spec/serializers/topic_view_serializer_spec.rb +++ b/spec/serializers/topic_view_serializer_spec.rb @@ -6,7 +6,7 @@ fab!(:post2) { Fabricate(:post, topic:) } fab!(:user) - before { SiteSetting.solved_enabled = true } + before { enable_current_plugin } describe "#accepted_answer" do it "returns the accepted answer post when the topic has an accepted answer" do diff --git a/spec/serializers/user_card_serializer_spec.rb b/spec/serializers/user_card_serializer_spec.rb index 98c38c04..2b3d1b75 100644 --- a/spec/serializers/user_card_serializer_spec.rb +++ b/spec/serializers/user_card_serializer_spec.rb @@ -5,6 +5,8 @@ let(:serializer) { described_class.new(user, scope: Guardian.new, root: false) } let(:json) { serializer.as_json } + before { enable_current_plugin } + it "accepted_answers serializes number of accepted answers" do expect(serializer.as_json[:accepted_answers]).to eq(0) diff --git a/spec/system/solved_spec.rb b/spec/system/solved_spec.rb index c1cf5269..aa99b046 100644 --- a/spec/system/solved_spec.rb +++ b/spec/system/solved_spec.rb @@ -9,7 +9,7 @@ let(:topic_page) { PageObjects::Pages::Topic.new } before do - SiteSetting.solved_enabled = true + enable_current_plugin SiteSetting.allow_solved_on_all_topics = true SiteSetting.accept_all_solutions_allowed_groups = Group::AUTO_GROUPS[:everyone] SiteSetting.show_who_marked_solved = true