FIX: Translation overrides for flag types didn't expire cache

This commit is contained in:
Gerhard Schlager 2018-03-16 21:46:49 +01:00
parent 90ab42b9bf
commit 6c736a1fa4
2 changed files with 90 additions and 30 deletions

View File

@ -27,21 +27,41 @@ class TranslationOverride < ActiveRecord::Base
translation_override = find_or_initialize_by(params)
params.merge!(data) if translation_override.new_record?
i18n_changed if translation_override.update(data)
i18n_changed([key]) if translation_override.update(data)
translation_override
end
def self.revert!(locale, *keys)
TranslationOverride.where(locale: locale, translation_key: keys).delete_all
i18n_changed
i18n_changed(keys)
end
private
def self.i18n_changed
def self.i18n_changed(keys)
I18n.reload!
MessageBus.publish('/i18n-flush', refresh: true)
keys.each do |key|
return if expire_cache(key)
end
end
def self.expire_cache(key)
if key.starts_with?('post_action_types.')
ApplicationSerializer.expire_cache_fragment!("post_action_types_#{I18n.locale}")
elsif key.starts_with?('topic_flag_types.')
ApplicationSerializer.expire_cache_fragment!("post_action_flag_types_#{I18n.locale}")
else
return false
end
Site.clear_anon_cache!
true
end
private_class_method :i18n_changed
private_class_method :expire_cache
private
def check_interpolation_keys
original_text = I18n.overrides_disabled do

View File

@ -54,4 +54,44 @@ describe TranslationOverride do
expect(ovr.compiled_js).to_not match(/Invalid Format/i)
end
context "site cache" do
def cached_value(guardian, types_name, name_key, attribute)
json = Site.json_for(guardian)
JSON.parse(json)[types_name]
.find { |x| x['name_key'] == name_key }[attribute]
end
shared_examples "resets site text" do
it "resets the site cache when translations of post_action_types are changed" do
anon_guardian = Guardian.new
user_guardian = Guardian.new(Fabricate(:user))
original_value = I18n.t(translation_key)
types_name, name_key, attribute = translation_key.split('.')
expect(cached_value(user_guardian, types_name, name_key, attribute)).to eq(original_value)
expect(cached_value(anon_guardian, types_name, name_key, attribute)).to eq(original_value)
TranslationOverride.upsert!('en', translation_key, 'bar')
expect(cached_value(user_guardian, types_name, name_key, attribute)).to eq('bar')
expect(cached_value(anon_guardian, types_name, name_key, attribute)).to eq('bar')
TranslationOverride.revert!('en', translation_key)
expect(cached_value(user_guardian, types_name, name_key, attribute)).to eq(original_value)
expect(cached_value(anon_guardian, types_name, name_key, attribute)).to eq(original_value)
end
end
context "post_action_types" do
let(:translation_key) { 'post_action_types.off_topic.description' }
include_examples "resets site text"
end
context "topic_flag_types" do
let(:translation_key) { 'topic_flag_types.spam.description' }
include_examples "resets site text"
end
end
end