IMPROVE: ensure redirect_to_wizard is cleaned up even if sidekiq is not working (#116)
* Add test of redirect_to_wizard when wizard is removed * Make clear_user_wizard_redirect a synchronous operation
Dieser Commit ist enthalten in:
Ursprung
31a27cbb00
Commit
522d4e9489
6 geänderte Dateien mit 22 neuen und 64 gelöschten Zeilen
|
@ -1,15 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
module Jobs
|
|
||||||
class ClearAfterTimeWizard < ::Jobs::Base
|
|
||||||
sidekiq_options queue: 'critical'
|
|
||||||
|
|
||||||
def execute(args)
|
|
||||||
User.human_users.each do |u|
|
|
||||||
if u.custom_fields['redirect_to_wizard'] == args[:wizard_id]
|
|
||||||
u.custom_fields.delete('redirect_to_wizard')
|
|
||||||
u.save_custom_fields(true)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -49,18 +49,15 @@ class CustomWizard::Template
|
||||||
|
|
||||||
def self.remove(wizard_id)
|
def self.remove(wizard_id)
|
||||||
wizard = CustomWizard::Wizard.create(wizard_id)
|
wizard = CustomWizard::Wizard.create(wizard_id)
|
||||||
|
|
||||||
return false if !wizard
|
return false if !wizard
|
||||||
|
|
||||||
ActiveRecord::Base.transaction do
|
ActiveRecord::Base.transaction do
|
||||||
PluginStore.remove(CustomWizard::PLUGIN_NAME, wizard.id)
|
PluginStore.remove(CustomWizard::PLUGIN_NAME, wizard.id)
|
||||||
|
clear_user_wizard_redirect(wizard_id)
|
||||||
if wizard.after_time
|
|
||||||
Jobs.cancel_scheduled_job(:set_after_time_wizard)
|
|
||||||
Jobs.enqueue(:clear_after_time_wizard, wizard_id: wizard_id)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Jobs.cancel_scheduled_job(:set_after_time_wizard) if wizard.after_time
|
||||||
|
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -88,6 +85,10 @@ class CustomWizard::Template
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.clear_user_wizard_redirect(wizard_id)
|
||||||
|
UserCustomField.where(name: 'redirect_to_wizard', value: wizard_id).destroy_all
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def normalize_data
|
def normalize_data
|
||||||
|
@ -132,7 +133,7 @@ class CustomWizard::Template
|
||||||
Jobs.enqueue_at(enqueue_wizard_at, :set_after_time_wizard, wizard_id: wizard_id)
|
Jobs.enqueue_at(enqueue_wizard_at, :set_after_time_wizard, wizard_id: wizard_id)
|
||||||
elsif old_data && old_data[:after_time]
|
elsif old_data && old_data[:after_time]
|
||||||
Jobs.cancel_scheduled_job(:set_after_time_wizard, wizard_id: wizard_id)
|
Jobs.cancel_scheduled_job(:set_after_time_wizard, wizard_id: wizard_id)
|
||||||
Jobs.enqueue(:clear_after_time_wizard, wizard_id: wizard_id)
|
self.class.clear_user_wizard_redirect(wizard_id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -49,7 +49,6 @@ after_initialize do
|
||||||
../controllers/custom_wizard/wizard.rb
|
../controllers/custom_wizard/wizard.rb
|
||||||
../controllers/custom_wizard/steps.rb
|
../controllers/custom_wizard/steps.rb
|
||||||
../controllers/custom_wizard/realtime_validations.rb
|
../controllers/custom_wizard/realtime_validations.rb
|
||||||
../jobs/clear_after_time_wizard.rb
|
|
||||||
../jobs/refresh_api_access_token.rb
|
../jobs/refresh_api_access_token.rb
|
||||||
../jobs/set_after_time_wizard.rb
|
../jobs/set_after_time_wizard.rb
|
||||||
../lib/custom_wizard/validators/template.rb
|
../lib/custom_wizard/validators/template.rb
|
||||||
|
|
|
@ -41,6 +41,14 @@ describe CustomWizard::Template do
|
||||||
).to eq(nil)
|
).to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "removes user wizard redirects if template is removed" do
|
||||||
|
user.custom_fields['redirect_to_wizard'] = 'super_mega_fun_wizard'
|
||||||
|
user.save_custom_fields(true)
|
||||||
|
|
||||||
|
CustomWizard::Template.remove('super_mega_fun_wizard')
|
||||||
|
expect(user.reload.custom_fields['redirect_to_wizard']).to eq(nil)
|
||||||
|
end
|
||||||
|
|
||||||
it "checks for wizard template existence" do
|
it "checks for wizard template existence" do
|
||||||
expect(
|
expect(
|
||||||
CustomWizard::Template.exists?('super_mega_fun_wizard')
|
CustomWizard::Template.exists?('super_mega_fun_wizard')
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
require_relative '../plugin_helper'
|
|
||||||
|
|
||||||
describe Jobs::ClearAfterTimeWizard do
|
|
||||||
fab!(:user1) { Fabricate(:user) }
|
|
||||||
fab!(:user2) { Fabricate(:user) }
|
|
||||||
fab!(:user3) { Fabricate(:user) }
|
|
||||||
|
|
||||||
let(:template) {
|
|
||||||
JSON.parse(File.open(
|
|
||||||
"#{Rails.root}/plugins/discourse-custom-wizard/spec/fixtures/wizard.json"
|
|
||||||
).read).with_indifferent_access
|
|
||||||
}
|
|
||||||
|
|
||||||
it "clears 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)
|
|
||||||
|
|
||||||
Jobs::SetAfterTimeWizard.new.execute(wizard_id: 'super_mega_fun_wizard')
|
|
||||||
|
|
||||||
expect(
|
|
||||||
UserCustomField.where(
|
|
||||||
name: 'redirect_to_wizard',
|
|
||||||
value: 'super_mega_fun_wizard'
|
|
||||||
).length
|
|
||||||
).to eq(3)
|
|
||||||
|
|
||||||
described_class.new.execute(wizard_id: 'super_mega_fun_wizard')
|
|
||||||
|
|
||||||
expect(
|
|
||||||
UserCustomField.where("
|
|
||||||
name = 'redirect_to_wizard' AND
|
|
||||||
value = 'super_mega_fun_wizard'
|
|
||||||
").exists?
|
|
||||||
).to eq(false)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -43,6 +43,12 @@ describe ApplicationController do
|
||||||
.first['redirect_to']
|
.first['redirect_to']
|
||||||
).to eq("/t/2")
|
).to eq("/t/2")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "does not redirect if wizard does not exist" do
|
||||||
|
CustomWizard::Template.remove('super_mega_fun_wizard')
|
||||||
|
get "/"
|
||||||
|
expect(response.status).to eq(200)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "who is not required to complete wizard" do
|
context "who is not required to complete wizard" do
|
||||||
|
|
Laden …
In neuem Issue referenzieren