discourse/spec/lib/wizard/step_updater_spec.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

328 lines
11 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
RSpec.describe Wizard::StepUpdater do
before do
SiteSetting.wizard_enabled = true
end
fab!(:user) { Fabricate(:admin) }
let(:wizard) { Wizard::Builder.new(user).build }
2016-08-26 01:14:56 +08:00
context "introduction" do
it "updates the introduction step" do
locale = SiteSettings::DefaultsProvider::DEFAULT_LOCALE
updater = wizard.create_updater('introduction',
title: 'new forum title',
site_description: 'neat place',
default_locale: locale,
contact_email: 'eviltrout@example.com')
updater.update
expect(updater.success?).to eq(true)
expect(SiteSetting.title).to eq("new forum title")
expect(SiteSetting.site_description).to eq("neat place")
expect(SiteSetting.contact_email).to eq("eviltrout@example.com")
2016-09-08 06:04:01 +08:00
expect(updater.refresh_required?).to eq(false)
expect(wizard.completed_steps?('introduction')).to eq(true)
2016-09-08 06:04:01 +08:00
end
it "updates the locale and requires refresh when it does change" do
updater = wizard.create_updater('introduction', default_locale: 'ru')
updater.update
2016-09-08 06:04:01 +08:00
expect(SiteSetting.default_locale).to eq('ru')
expect(updater.refresh_required?).to eq(true)
expect(wizard.completed_steps?('introduction')).to eq(true)
2016-09-08 06:04:01 +08:00
end
2016-09-21 05:01:54 +08:00
it "won't allow updates to the default value, when required" do
updater = wizard.create_updater('introduction', title: SiteSetting.title, site_description: 'neat place')
updater.update
expect(updater.success?).to eq(false)
end
end
context "privacy" do
2016-09-10 03:57:44 +08:00
it "updates to open correctly" do
updater = wizard.create_updater('privacy', login_required: false, invite_only: false, must_approve_users: false)
updater.update
2016-09-10 03:57:44 +08:00
expect(updater.success?).to eq(true)
expect(SiteSetting.login_required?).to eq(false)
expect(SiteSetting.invite_only?).to eq(false)
expect(SiteSetting.must_approve_users?).to eq(false)
expect(wizard.completed_steps?('privacy')).to eq(true)
2016-09-10 03:57:44 +08:00
end
it "updates to private correctly" do
updater = wizard.create_updater('privacy', login_required: true, invite_only: true, must_approve_users: true)
updater.update
2016-09-10 03:57:44 +08:00
expect(updater.success?).to eq(true)
expect(SiteSetting.login_required?).to eq(true)
expect(SiteSetting.invite_only?).to eq(true)
expect(SiteSetting.must_approve_users?).to eq(true)
expect(wizard.completed_steps?('privacy')).to eq(true)
2016-09-10 03:57:44 +08:00
end
end
context "styling" do
it "updates fonts" do
updater = wizard.create_updater('styling',
body_font: 'open_sans',
heading_font: 'oswald',
homepage_style: 'latest'
)
updater.update
expect(updater.success?).to eq(true)
expect(wizard.completed_steps?('styling')).to eq(true)
expect(SiteSetting.base_font).to eq('open_sans')
expect(SiteSetting.heading_font).to eq('oswald')
end
context "colors" do
context "with an existing color scheme" do
fab!(:color_scheme) { Fabricate(:color_scheme, name: 'existing', via_wizard: true) }
2016-09-02 23:42:14 +08:00
it "updates the scheme" do
updater = wizard.create_updater('styling',
color_scheme: 'Dark',
body_font: 'arial',
heading_font: 'arial',
homepage_style: 'latest'
)
updater.update
expect(updater.success?).to eq(true)
expect(wizard.completed_steps?('styling')).to eq(true)
theme = Theme.find_by(id: SiteSetting.default_theme_id)
expect(theme.color_scheme.base_scheme_id).to eq('Dark')
end
2016-09-02 23:42:14 +08:00
end
context "with an existing default theme" do
fab!(:theme) { Fabricate(:theme) }
before do
theme.set_default!
end
it "should update the color scheme of the default theme" do
updater = wizard.create_updater('styling',
color_scheme: 'Neutral',
body_font: 'arial',
heading_font: 'arial',
homepage_style: 'latest'
)
expect { updater.update }.not_to change { Theme.count }
theme.reload
expect(theme.color_scheme.base_scheme_id).to eq('Neutral')
end
end
context "without an existing theme" do
before do
Theme.delete_all
end
context 'dark theme' do
it "creates the theme" do
updater = wizard.create_updater('styling',
color_scheme: 'Dark',
body_font: 'arial',
heading_font: 'arial',
homepage_style: 'latest'
)
expect { updater.update }.to change { Theme.count }.by(1)
theme = Theme.last
expect(theme.user_id).to eq(wizard.user.id)
expect(theme.color_scheme.base_scheme_id).to eq('Dark')
end
end
context 'light theme' do
it "creates the theme" do
updater = wizard.create_updater('styling',
color_scheme: ColorScheme::LIGHT_THEME_ID,
body_font: 'arial',
heading_font: 'arial',
homepage_style: 'latest'
)
expect { updater.update }.to change { Theme.count }.by(1)
theme = Theme.last
expect(theme.user_id).to eq(wizard.user.id)
expect(theme.color_scheme).to eq(ColorScheme.find_by(name:
ColorScheme::LIGHT_THEME_ID
))
end
end
end
context "without an existing scheme" do
it "creates the scheme" do
ColorScheme.destroy_all
updater = wizard.create_updater('styling',
color_scheme: 'Dark',
body_font: 'arial',
heading_font: 'arial',
homepage_style: 'latest'
)
updater.update
expect(updater.success?).to eq(true)
expect(wizard.completed_steps?('styling')).to eq(true)
color_scheme = ColorScheme.where(via_wizard: true).first
expect(color_scheme).to be_present
expect(color_scheme.colors).to be_present
theme = Theme.find_by(id: SiteSetting.default_theme_id)
expect(theme.color_scheme_id).to eq(color_scheme.id)
end
end
context "auto dark mode" do
before do
dark_scheme = ColorScheme.where(name: "Dark").first
SiteSetting.default_dark_mode_color_scheme_id = dark_scheme.id
end
it "does nothing when selected scheme is light" do
updater = wizard.create_updater('styling',
color_scheme: 'Neutral',
body_font: 'arial',
heading_font: 'arial',
homepage_style: 'latest'
)
expect { updater.update }.not_to change { SiteSetting.default_dark_mode_color_scheme_id }
end
it "unsets auto dark mode site setting when default selected scheme is also dark" do
updater = wizard.create_updater('styling',
color_scheme: 'Latte',
body_font: 'arial',
heading_font: 'arial',
homepage_style: 'latest'
)
expect { updater.update }.to change { SiteSetting.default_dark_mode_color_scheme_id }.to(-1)
end
end
end
context "homepage style" do
it "updates the fields correctly" do
SiteSetting.top_menu = "latest|categories|unread|top"
updater = wizard.create_updater('styling',
body_font: 'arial',
heading_font: 'arial',
homepage_style: "categories_and_top_topics"
)
updater.update
expect(updater).to be_success
expect(wizard.completed_steps?('styling')).to eq(true)
expect(SiteSetting.top_menu).to eq('categories|latest|unread|top')
expect(SiteSetting.desktop_category_page_style).to eq('categories_and_top_topics')
SiteSetting.top_menu = "categories|latest|new|top"
updater = wizard.create_updater('styling',
body_font: 'arial',
heading_font: 'arial',
homepage_style: "latest"
)
updater.update
expect(updater).to be_success
expect(SiteSetting.top_menu).to eq('latest|categories|new|top')
end
it "does not overwrite top_menu site setting" do
SiteSetting.top_menu = "latest|unread|unseen|categories"
updater = wizard.create_updater('styling',
body_font: 'arial',
heading_font: 'arial',
homepage_style: "latest"
)
updater.update
expect(updater).to be_success
expect(SiteSetting.top_menu).to eq('latest|unread|unseen|categories')
SiteSetting.top_menu = "categories|new|latest"
updater = wizard.create_updater('styling',
body_font: 'arial',
heading_font: 'arial',
homepage_style: "categories_and_top_topics"
)
updater.update
expect(updater).to be_success
expect(SiteSetting.top_menu).to eq('categories|new|latest')
2016-09-02 23:42:14 +08:00
end
end
end
context "branding" do
2016-09-09 04:58:07 +08:00
it "updates the fields correctly" do
2018-11-14 15:03:02 +08:00
upload = Fabricate(:upload)
upload2 = Fabricate(:upload)
updater = wizard.create_updater(
'branding',
2018-11-14 15:03:02 +08:00
logo: upload.url,
logo_small: upload2.url
)
updater.update
2016-09-09 04:58:07 +08:00
expect(updater).to be_success
expect(wizard.completed_steps?('branding')).to eq(true)
2018-11-14 15:03:02 +08:00
expect(SiteSetting.logo).to eq(upload)
expect(SiteSetting.logo_small).to eq(upload2)
end
end
context "corporate" do
it "updates the fields properly" do
p = Fabricate(:post, raw: 'company_name - governing_law - city_for_disputes template')
SiteSetting.tos_topic_id = p.topic_id
2018-11-14 15:03:02 +08:00
updater = wizard.create_updater('corporate',
company_name: 'ACME, Inc.',
governing_law: 'New Jersey law',
contact_url: 'http://example.com/custom-contact-url',
city_for_disputes: 'Fairfield, New Jersey')
updater.update
expect(updater).to be_success
expect(SiteSetting.company_name).to eq("ACME, Inc.")
expect(SiteSetting.governing_law).to eq("New Jersey law")
expect(SiteSetting.contact_url).to eq("http://example.com/custom-contact-url")
expect(SiteSetting.city_for_disputes).to eq("Fairfield, New Jersey")
2016-09-09 04:58:07 +08:00
# Should update the TOS topic
raw = Post.where(topic_id: SiteSetting.tos_topic_id, post_number: 1).pluck_first(:raw)
expect(raw).to eq("ACME, Inc. - New Jersey law - Fairfield, New Jersey template")
2016-09-14 03:14:17 +08:00
# Can update the TOS topic again
updater = wizard.create_updater('corporate',
company_name: 'Pied Piper Inc',
governing_law: 'California law',
city_for_disputes: 'San Francisco, California')
2016-09-14 03:14:17 +08:00
updater.update
raw = Post.where(topic_id: SiteSetting.tos_topic_id, post_number: 1).pluck_first(:raw)
expect(raw).to eq("Pied Piper Inc - California law - San Francisco, California template")
2016-09-14 03:14:17 +08:00
# Can update the TOS to nothing
updater = wizard.create_updater('corporate', {})
updater.update
raw = Post.where(topic_id: SiteSetting.tos_topic_id, post_number: 1).pluck_first(:raw)
expect(raw).to eq("company_name - governing_law - city_for_disputes template")
expect(wizard.completed_steps?('corporate')).to eq(true)
2016-09-14 03:14:17 +08:00
end
end
2016-08-26 01:14:56 +08:00
end