# frozen_string_literal: true describe CustomWizard::Template do fab!(:user) let(:template_json) { get_wizard_fixture("wizard") } let(:permitted_json) { get_wizard_fixture("wizard/permitted") } fab!(:upload) before { CustomWizard::Template.save(template_json, skip_jobs: true) } 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