From d4d27c0bf3a839c5deddc8d9cfa5cebcf28b04c7 Mon Sep 17 00:00:00 2001 From: Angus McLeod Date: Thu, 3 Oct 2024 11:34:13 +0200 Subject: [PATCH] DEV: Ensure admins are excluded from set_user_redirect --- lib/custom_wizard/wizard.rb | 2 +- plugin.rb | 2 +- spec/jobs/set_after_time_wizard_spec.rb | 44 ++++++++++++++++++------- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/lib/custom_wizard/wizard.rb b/lib/custom_wizard/wizard.rb index 0809043c..e2933754 100644 --- a/lib/custom_wizard/wizard.rb +++ b/lib/custom_wizard/wizard.rb @@ -384,7 +384,7 @@ class CustomWizard::Wizard def self.set_user_redirect(wizard_id, user) wizard = self.create(wizard_id, user) - if wizard.permitted? + if wizard.permitted?(always_allow_admin: false) user.custom_fields['redirect_to_wizard'] = wizard_id user.save_custom_fields(true) else diff --git a/plugin.rb b/plugin.rb index 4deed863..67f0fb07 100644 --- a/plugin.rb +++ b/plugin.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true # name: discourse-custom-wizard # about: Forms for Discourse. Better onboarding, structured posting, data enrichment, automated actions and much more. -# version: 2.8.4 +# version: 2.8.5 # authors: Angus McLeod, Faizaan Gagan, Robert Barrow, Keegan George, Kaitlin Maddever, Juan Marcos Gutierrez Ramos # url: https://github.com/paviliondev/discourse-custom-wizard # contact_emails: development@pavilion.tech diff --git a/spec/jobs/set_after_time_wizard_spec.rb b/spec/jobs/set_after_time_wizard_spec.rb index 8162cfd2..33c2fa35 100644 --- a/spec/jobs/set_after_time_wizard_spec.rb +++ b/spec/jobs/set_after_time_wizard_spec.rb @@ -2,30 +2,52 @@ describe Jobs::SetAfterTimeWizard do fab!(:user1) { Fabricate(:user) } - fab!(:user2) { Fabricate(:user) } - fab!(:user3) { Fabricate(:user) } + fab!(:user2) { Fabricate(:user, trust_level: TrustLevel[3]) } + fab!(:user3) { Fabricate(:user, admin: true) } let(:template) { get_wizard_fixture("wizard") } + let(:permitted_json) { get_wizard_fixture("wizard/permitted") } + + before do + @after_time_template = template.dup + @after_time_template["after_time"] = true + @after_time_template["after_time_scheduled"] = (Time.now + 3.hours).iso8601 + CustomWizard::Template.save(@after_time_template) + end it "sets wizard redirect for all users " do - after_time_template = template.dup - after_time_template["after_time"] = true - after_time_template["after_time_scheduled"] = (Time.now + 3.hours).iso8601 - - CustomWizard::Template.save(after_time_template) - messages = MessageBus.track_publish("/redirect_to_wizard") do described_class.new.execute(wizard_id: 'super_mega_fun_wizard') end - + expect(messages.first.data).to eq("super_mega_fun_wizard") + expect(messages.first.user_ids).to match_array([user1.id, user2.id, user3.id]) expect( UserCustomField.where( name: 'redirect_to_wizard', value: 'super_mega_fun_wizard' ).length ).to eq(3) + end - expect(messages.first.data).to eq("super_mega_fun_wizard") - expect(messages.first.user_ids).to match_array([user1.id, user2.id, user3.id]) + context "when permitted is set" do + before do + enable_subscription("business") + @after_time_template["permitted"] = permitted_json["permitted"] + CustomWizard::Template.save(@after_time_template.as_json) + end + + it "only redirects users in the group" do + messages = MessageBus.track_publish("/redirect_to_wizard") do + described_class.new.execute(wizard_id: 'super_mega_fun_wizard') + end + expect(messages.first.data).to eq("super_mega_fun_wizard") + expect(messages.first.user_ids).to match_array([user2.id]) + expect( + UserCustomField.where( + name: 'redirect_to_wizard', + value: 'super_mega_fun_wizard' + ).length + ).to eq(1) + end end end