1
0
Fork 0
discourse-custom-wizard-unl.../spec/components/custom_wizard/template_spec.rb

179 Zeilen
5,8 KiB
Ruby

# frozen_string_literal: true
describe CustomWizard::Template do
fab!(:user) { Fabricate(:user) }
let(:template_json) { get_wizard_fixture("wizard") }
let(:permitted_json) { get_wizard_fixture("wizard/permitted") }
fab!(:upload) { Fabricate(:upload) }
before do
stub_out_subscription_classes
CustomWizard::Template.save(template_json, skip_jobs: true)
end
it "saves wizard templates" do
expect(
PluginStoreRow.exists?(
plugin_name: 'custom_wizard',
key: 'super_mega_fun_wizard'
)
).to eq(true)
end
it "finds wizard templates" do
expect(
CustomWizard::Template.find('super_mega_fun_wizard')['id']
).to eq('super_mega_fun_wizard')
end
it "removes wizard templates" do
CustomWizard::Template.remove('super_mega_fun_wizard')
expect(
CustomWizard::Template.find('super_mega_fun_wizard')
).to eq(nil)
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
expect(
CustomWizard::Template.exists?('super_mega_fun_wizard')
).to eq(true)
end
context "upload references" do
it "are added if a wizard has a step banner" do
template_json['steps'][0]['banner'] = upload.url
template_json['steps'][0]['banner_upload_id'] = upload.id
CustomWizard::Template.save(template_json, skip_jobs: true)
wizard_record = CustomWizard::Template.find_record(template_json["id"])
expect(
UploadReference.exists?(
upload_id: upload.id,
target_type: "PluginStoreRow",
target_id: wizard_record.id
)
).to eq(true)
end
it "are added if a wizard has a field image" do
template_json['steps'][0]["fields"][0]['image'] = upload.url
template_json['steps'][0]["fields"][0]['image_upload_id'] = upload.id
CustomWizard::Template.save(template_json, skip_jobs: true)
wizard_record = CustomWizard::Template.find_record(template_json["id"])
expect(
UploadReference.exists?(
upload_id: upload.id,
target_type: "PluginStoreRow",
target_id: wizard_record.id
)
).to eq(true)
end
it "are removed if a wizard step banner is removed" do
template_json['steps'][0]['banner'] = upload.url
template_json['steps'][0]['banner_upload_id'] = upload.id
CustomWizard::Template.save(template_json, skip_jobs: true)
template_json['steps'][0]['banner'] = nil
template_json['steps'][0]['banner_upload_id'] = nil
CustomWizard::Template.save(template_json, skip_jobs: true)
wizard_record = CustomWizard::Template.find_record(template_json["id"])
expect(
UploadReference.exists?(target_type: "PluginStoreRow")
).to eq(false)
end
it "are removed if a wizard field image is removed" do
template_json['steps'][0]["fields"][0]['image'] = upload.url
template_json['steps'][0]["fields"][0]['image_upload_id'] = upload.id
CustomWizard::Template.save(template_json, skip_jobs: true)
template_json['steps'][0]["fields"][0]['image'] = nil
template_json['steps'][0]["fields"][0]['image_upload_id'] = nil
CustomWizard::Template.save(template_json, skip_jobs: true)
wizard_record = CustomWizard::Template.find_record(template_json["id"])
expect(
UploadReference.exists?(target_type: "PluginStoreRow")
).to eq(false)
end
it "are removed if a wizard is removed" do
template_json['steps'][0]["fields"][0]['image'] = upload.url
template_json['steps'][0]["fields"][0]['image_upload_id'] = upload.id
CustomWizard::Template.save(template_json, skip_jobs: true)
CustomWizard::Template.remove(template_json["id"])
expect(
UploadReference.exists?(target_type: "PluginStoreRow")
).to eq(false)
end
end
context "wizard template list" do
before do
enable_subscription('standard')
template_json_2 = template_json.dup
template_json_2["id"] = 'super_mega_fun_wizard_2'
template_json_2["permitted"] = permitted_json['permitted']
CustomWizard::Template.save(template_json_2, skip_jobs: true)
template_json_3 = template_json.dup
template_json_3["id"] = 'super_mega_fun_wizard_3'
template_json_3["after_signup"] = true
CustomWizard::Template.save(template_json_3, skip_jobs: true)
end
it "works" do
expect(
CustomWizard::Template.list.length
).to eq(3)
end
it "can be filtered by wizard settings" do
expect(
CustomWizard::Template.list(setting: "after_signup").length
).to eq(1)
end
it "can be ordered" do
expect(
CustomWizard::Template.list(
order: "(value::json ->> 'permitted') IS NOT NULL DESC"
).first['id']
).to eq('super_mega_fun_wizard_2')
end
end
context "after time setting" do
before do
freeze_time Time.now
@scheduled_time = (Time.now + 3.hours).iso8601
@after_time_template = template_json.dup
@after_time_template["after_time"] = true
@after_time_template["after_time_scheduled"] = @scheduled_time
end
it 'if enabled queues jobs after wizard is saved' do
expect_enqueued_with(job: :set_after_time_wizard, at: Time.parse(@scheduled_time).utc) do
CustomWizard::Template.save(@after_time_template)
end
end
it 'if disabled clears jobs after wizard is saved' do
CustomWizard::Template.save(@after_time_template)
@after_time_template['after_time'] = false
expect_not_enqueued_with(job: :set_after_time_wizard) do
CustomWizard::Template.save(@after_time_template)
end
end
end
end