From 75ad0718996392e73f7354ef1585fa7b635596ee Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 14 Jul 2020 15:16:52 +0800 Subject: [PATCH] FEATURE: Add hidden site settings for discobot to skip certain tutorials Hidden for now because I'm undecided on whether this should be an exposed interface. --- .../config/locales/server.en.yml | 1 + plugins/discourse-narrative-bot/config/settings.yml | 4 ++++ .../lib/discourse_narrative_bot/base.rb | 7 ++++++- .../discourse_narrative_bot/new_user_narrative_spec.rb | 10 ++++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/plugins/discourse-narrative-bot/config/locales/server.en.yml b/plugins/discourse-narrative-bot/config/locales/server.en.yml index 38bad9ac855..76efd5aa6d0 100644 --- a/plugins/discourse-narrative-bot/config/locales/server.en.yml +++ b/plugins/discourse-narrative-bot/config/locales/server.en.yml @@ -6,6 +6,7 @@ en: discourse_narrative_bot_disable_public_replies: "Disable public replies by Discourse Narrative Bot" discourse_narrative_bot_welcome_post_type: "Type of welcome post that the Discourse Narrative Bot should send out" discourse_narrative_bot_welcome_post_delay: "Wait (n) seconds before sending the Discourse Narrative Bot welcome post." + discourse_narrative_bot_skip_tutorials: "Discourse Narrative Bot tutorials to skip" badges: certified: diff --git a/plugins/discourse-narrative-bot/config/settings.yml b/plugins/discourse-narrative-bot/config/settings.yml index c33d382ced0..45d65bf2cf2 100644 --- a/plugins/discourse-narrative-bot/config/settings.yml +++ b/plugins/discourse-narrative-bot/config/settings.yml @@ -7,6 +7,10 @@ plugins: discourse_narrative_bot_welcome_post_type: default: 'new_user_track' enum: 'DiscourseNarrativeBot::WelcomePostTypeSiteSetting' + discourse_narrative_bot_skip_tutorials: + default: '' + type: list + hidden: true discourse_narrative_bot_welcome_post_delay: default: 0 discourse_narrative_bot_ignored_usernames: diff --git a/plugins/discourse-narrative-bot/lib/discourse_narrative_bot/base.rb b/plugins/discourse-narrative-bot/lib/discourse_narrative_bot/base.rb index 404dd084b40..358f59680b3 100644 --- a/plugins/discourse-narrative-bot/lib/discourse_narrative_bot/base.rb +++ b/plugins/discourse-narrative-bot/lib/discourse_narrative_bot/base.rb @@ -30,7 +30,12 @@ module DiscourseNarrativeBot next_opts = self.class::TRANSITION_TABLE.fetch(next_state) prerequisite = next_opts[:prerequisite] - break if !prerequisite || instance_eval(&prerequisite) + if (!prerequisite || instance_eval(&prerequisite)) && !( + SiteSetting.discourse_narrative_bot_skip_tutorials.present? && + SiteSetting.discourse_narrative_bot_skip_tutorials.split("|").include?(next_state.to_s)) + + break + end [:next_state, :next_instructions].each do |key| opts[key] = next_opts[key] diff --git a/plugins/discourse-narrative-bot/spec/discourse_narrative_bot/new_user_narrative_spec.rb b/plugins/discourse-narrative-bot/spec/discourse_narrative_bot/new_user_narrative_spec.rb index 788d314c676..9c3b5b73b8f 100644 --- a/plugins/discourse-narrative-bot/spec/discourse_narrative_bot/new_user_narrative_spec.rb +++ b/plugins/discourse-narrative-bot/spec/discourse_narrative_bot/new_user_narrative_spec.rb @@ -266,6 +266,16 @@ describe DiscourseNarrativeBot::NewUserNarrative do expect(new_post.raw).to eq(expected_raw.chomp) expect(narrative.get_data(user)[:state].to_sym).to eq(:tutorial_onebox) end + + it 'should skip tutorials in SiteSetting.discourse_narrative_bot_skip_tutorials' do + SiteSetting.discourse_narrative_bot_skip_tutorials = 'tutorial_onebox' + + post.update!(raw: "@#{discobot_username} #{skip_trigger.upcase}") + + DiscourseNarrativeBot::TrackSelector.new(:reply, user, post_id: post.id).select + + expect(narrative.get_data(user)[:state].to_sym).to eq(:tutorial_emoji) + end end describe 'onebox tutorial' do