Skip to content

Commit

Permalink
FIX: retranspile theme JS when settings YAML changes (#7131)
Browse files Browse the repository at this point in the history
  • Loading branch information
OsamaSayegh committed Mar 8, 2019
1 parent 23a1826 commit 5e58ced
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
4 changes: 4 additions & 0 deletions app/models/theme_field.rb
Expand Up @@ -220,6 +220,10 @@ def validate_yaml!
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:)
Expand Down
21 changes: 21 additions & 0 deletions spec/models/theme_field_spec.rb
Expand Up @@ -151,6 +151,27 @@ def create_yaml_field(value)

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)
Expand Down

0 comments on commit 5e58ced

Please sign in to comment.