mirror of
https://github.com/discourse/discourse.git
synced 2024-11-29 12:05:31 +08:00
DEV: Improve test coverage of themes:update
rake task (#26764)
This commit adds a test to ensure that settings for a theme are retained
even if saving a theme setting after a theme setting migration fails.
Prior to the fix introduced in 35bc27a36d
,
failing to save the new settings will actually cause some or all of the
theme's setting to be lost.
This commit is contained in:
parent
594026d65f
commit
9d96fcb821
|
@ -18,7 +18,20 @@ RSpec.describe "tasks/themes" do
|
||||||
}
|
}
|
||||||
JSON
|
JSON
|
||||||
|
|
||||||
setup_git_repo("about.json" => about_json, "common/header.html" => "I AM A HEADER")
|
settings_yaml = <<~YAML
|
||||||
|
some_setting:
|
||||||
|
type: string
|
||||||
|
default: some default value
|
||||||
|
string_setting:
|
||||||
|
type: string
|
||||||
|
default: default value
|
||||||
|
YAML
|
||||||
|
|
||||||
|
setup_git_repo(
|
||||||
|
"about.json" => about_json,
|
||||||
|
"common/header.html" => "I AM A HEADER",
|
||||||
|
"settings.yml" => settings_yaml,
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:initial_repo_url) do
|
let(:initial_repo_url) do
|
||||||
|
@ -31,6 +44,57 @@ RSpec.describe "tasks/themes" do
|
||||||
|
|
||||||
after { `rm -fr #{initial_repo}` }
|
after { `rm -fr #{initial_repo}` }
|
||||||
|
|
||||||
|
it "should retain a theme's settings and not update the theme when a theme's setting fails to save" do
|
||||||
|
theme.update_setting(:some_setting, "some setting value")
|
||||||
|
|
||||||
|
migration_content = <<~JS
|
||||||
|
export default function migrate(settings) {
|
||||||
|
const oldSetting = settings.get("string_setting");
|
||||||
|
settings.set("string_setting", [{}]);
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
JS
|
||||||
|
|
||||||
|
settings_yaml = <<~YAML
|
||||||
|
string_setting:
|
||||||
|
type: objects
|
||||||
|
default: []
|
||||||
|
schema:
|
||||||
|
name: some object
|
||||||
|
properties:
|
||||||
|
title:
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
YAML
|
||||||
|
|
||||||
|
add_to_git_repo(
|
||||||
|
initial_repo,
|
||||||
|
"migrations/settings/0001-a-migration.js" => migration_content,
|
||||||
|
"settings.yml" => settings_yaml,
|
||||||
|
"common/header.html" => "I AM UPDATED HEADER",
|
||||||
|
)
|
||||||
|
|
||||||
|
original_remote_version = theme.remote_theme.remote_version
|
||||||
|
original_local_version = theme.remote_theme.local_version
|
||||||
|
|
||||||
|
stderr = capture_stderr { capture_stdout { Rake::Task["themes:update"].invoke } }
|
||||||
|
|
||||||
|
expect(stderr.chomp).to eq(
|
||||||
|
"[default] Failed to update 'awesome theme' (#{theme.id}): The property at JSON Pointer '/0/title' must be present.",
|
||||||
|
)
|
||||||
|
|
||||||
|
theme.reload
|
||||||
|
|
||||||
|
expect(theme.theme_fields.count).to eq(2)
|
||||||
|
expect(theme.theme_fields.where(name: "header").first.value).to eq("I AM A HEADER")
|
||||||
|
expect(theme.theme_settings_migrations.count).to eq(0)
|
||||||
|
expect(theme.remote_theme.commits_behind).to eq(0)
|
||||||
|
expect(theme.remote_theme.remote_version).to eq(original_remote_version)
|
||||||
|
expect(theme.remote_theme.local_version).to eq(original_local_version)
|
||||||
|
expect(theme.settings[:some_setting].value).to eq("some setting value")
|
||||||
|
expect(theme.settings[:string_setting].value).to eq("default value")
|
||||||
|
end
|
||||||
|
|
||||||
it "should not update the theme if a theme setting migration fails during the update" do
|
it "should not update the theme if a theme setting migration fails during the update" do
|
||||||
migration_content = <<~JS
|
migration_content = <<~JS
|
||||||
export default function migrate(settings) {
|
export default function migrate(settings) {
|
||||||
|
@ -51,7 +115,7 @@ RSpec.describe "tasks/themes" do
|
||||||
|
|
||||||
theme.reload
|
theme.reload
|
||||||
|
|
||||||
expect(theme.theme_fields.count).to eq(1)
|
expect(theme.theme_fields.count).to eq(2)
|
||||||
expect(theme.theme_fields.where(name: "header").first.value).to eq("I AM A HEADER")
|
expect(theme.theme_fields.where(name: "header").first.value).to eq("I AM A HEADER")
|
||||||
expect(theme.theme_settings_migrations.count).to eq(0)
|
expect(theme.theme_settings_migrations.count).to eq(0)
|
||||||
expect(theme.remote_theme.commits_behind).to eq(0)
|
expect(theme.remote_theme.commits_behind).to eq(0)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user