# frozen_string_literal: true require "wizard" require "wizard/builder" require "global_path" class GlobalPathInstance extend GlobalPath end RSpec.describe Wizard::Builder do let(:moderator) { Fabricate.build(:moderator) } let(:wizard) { Wizard::Builder.new(moderator).build } it "returns a wizard with steps when enabled" do SiteSetting.wizard_enabled = true expect(wizard).to be_present expect(wizard.steps).to be_present end it "returns a wizard without steps when enabled, but not staff" do wizard = Wizard::Builder.new(Fabricate.build(:user)).build expect(wizard).to be_present expect(wizard.steps).to be_blank end it "returns a wizard without steps when disabled" do SiteSetting.wizard_enabled = false expect(wizard).to be_present expect(wizard.steps).to be_blank end describe "introduction" do let(:introduction_step) { wizard.steps.find { |s| s.id == "introduction" } } it "should not prefill default site setting values" do fields = introduction_step.fields title_field = fields.first description_field = fields.second expect(title_field.id).to eq("title") expect(title_field.value).to eq("") expect(description_field.id).to eq("site_description") expect(description_field.value).to eq("") end it "should prefill overridden site setting values" do SiteSetting.title = "foobar" SiteSetting.site_description = "lorem ipsum" SiteSetting.contact_email = "foobar@example.com" fields = introduction_step.fields title_field = fields.first description_field = fields.second expect(title_field.id).to eq("title") expect(title_field.value).to eq("foobar") expect(description_field.id).to eq("site_description") expect(description_field.value).to eq("lorem ipsum") end end describe "privacy step" do let(:privacy_step) { wizard.steps.find { |s| s.id == "privacy" } } it "should set the right default value for the fields" do SiteSetting.login_required = true SiteSetting.invite_only = false SiteSetting.must_approve_users = true SiteSetting.chat_enabled = true if defined?(::Chat) SiteSetting.navigation_menu = NavigationMenuSiteSetting::SIDEBAR fields = privacy_step.fields login_required_field = fields.first invite_only_field = fields.second must_approve_users_field = fields.third chat_enabled_field = fields.second_to_last if defined?(::Chat) navigation_menu_field = fields.last count = defined?(::Chat) ? 4 : 3 expect(fields.length).to eq(count) expect(login_required_field.id).to eq("login_required") expect(login_required_field.value).to eq("private") expect(invite_only_field.id).to eq("invite_only") expect(invite_only_field.value).to eq("sign_up") expect(must_approve_users_field.id).to eq("must_approve_users") expect(must_approve_users_field.value).to eq("yes") end end describe "styling" do let(:styling_step) { wizard.steps.find { |s| s.id == "styling" } } let(:font_field) { styling_step.fields[1] } fab!(:theme) let(:colors_field) { styling_step.fields.first } it "has the full list of available fonts" do expect(font_field.choices.size).to eq(DiscourseFonts.fonts.size) end context "with colors" do context "when the default theme has not been override" do before { SiteSetting.find_by(name: "default_theme_id").destroy! } it "should set the right default values" do expect(colors_field.required).to eq(true) expect(colors_field.value).to eq(ColorScheme::LIGHT_THEME_ID) end end context "when the default theme has been override and the color scheme doesn't have a base scheme" do let(:color_scheme) { Fabricate(:color_scheme, base_scheme_id: nil) } before do SiteSetting.default_theme_id = theme.id theme.update(color_scheme: color_scheme) end it "fallbacks to the color scheme name" do expect(colors_field.required).to eq(false) expect(colors_field.value).to eq(color_scheme.name) end end context "when the default theme has been overridden by a theme without a color scheme" do before { theme.set_default! } it "should set the right default values" do expect(colors_field.required).to eq(false) expect(colors_field.value).to eq("Light") end end context "when the default theme has been overridden by a theme with a color scheme" do before do theme.update(color_scheme_id: ColorScheme.find_by_name("Dark").id) theme.set_default! end it "should set the right default values" do expect(colors_field.required).to eq(false) expect(colors_field.value).to eq("Dark") end end end end describe "branding" do let(:branding_step) { wizard.steps.find { |s| s.id == "branding" } } it "should set the right default value for the fields" do upload = Fabricate(:upload) upload2 = Fabricate(:upload) SiteSetting.logo = upload SiteSetting.logo_small = upload2 fields = branding_step.fields logo_field = fields.first logo_small_field = fields.last expect(logo_field.id).to eq("logo") expect(logo_field.value).to eq(GlobalPathInstance.full_cdn_url(upload.url)) expect(logo_small_field.id).to eq("logo_small") expect(logo_small_field.value).to eq(GlobalPathInstance.full_cdn_url(upload2.url)) end end end