Spiegel von
https://github.com/paviliondev/discourse-custom-wizard.git
synchronisiert 2024-12-04 22:31:09 +01:00
35021eb176
I've tweaked the subscription client gem so we can just use the gem's models and tables in this plugin's rspec, which makes duplicating and stubbing them unnecessary. See further https://github.com/paviliondev/discourse_subscription_client
178 Zeilen
5,8 KiB
Ruby
178 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
|
|
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
|