FIX: retranspile theme JS when settings YAML changes (#7131)

This commit is contained in:
Osama Sayegh 2019-03-08 17:49:06 +03:00 committed by GitHub
parent 23a1826001
commit 5e58cedfbd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 0 deletions

View File

@ -220,6 +220,10 @@ class ThemeField < ActiveRecord::Base
end
self.error = errors.join("\n").presence
if !self.error && self.target_id == Theme.targets[:settings]
# when settings YAML changes, we need to re-transpile theme JS and CSS
theme.theme_fields.where.not(id: self.id).update_all(value_baked: nil)
end
end
def self.guess_type(name:, target:)

View File

@ -151,6 +151,27 @@ HTML
let(:key) { "themes.settings_errors" }
it "forces re-transpilation of theme JS when settings YAML changes" do
theme = Fabricate(:theme)
settings_field = ThemeField.create!(theme: theme, target_id: Theme.targets[:settings], name: "yaml", value: "setting: 5")
html = <<~HTML
<script type="text/discourse-plugin" version="0.8">
alert(settings.setting);
</script>
HTML
js_field = ThemeField.create!(theme: theme, target_id: ThemeField.types[:html], name: "header", value: html)
old_value_baked = js_field.value_baked
settings_field.update!(value: "setting: 66")
js_field.reload
expect(js_field.value_baked).to eq(nil)
js_field.ensure_baked!
expect(js_field.value_baked).to be_present
expect(js_field.value_baked).not_to eq(old_value_baked)
end
it "generates errors for bad YAML" do
yaml = "invalid_setting 5"
field = create_yaml_field(yaml)