Skip to content

Commit c95be7d

Browse files
authored
Merge pull request #447 from platanus/fix-enum-translation-when-blank
fix(enum-utils): return nil if option name is blank
2 parents beb1cd8 + 4ae482e commit c95be7d

File tree

3 files changed

+57
-10
lines changed

3 files changed

+57
-10
lines changed

lib/activeadmin_addons/support/enum_utils.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ def self.options_for_select(klass, enum_name, use_db_value: false)
99
end
1010

1111
def self.translate_enum_option(klass, enum_name, enum_option_name)
12+
return if enum_option_name.blank?
13+
1214
klass_key = klass.model_name.i18n_key
1315
key = "activerecord.attributes.#{klass_key}.#{enum_name.pluralize}.#{enum_option_name}"
1416
I18n.t(key, default: enum_option_name)

spec/features/tag_builder_spec.rb

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,13 +192,28 @@
192192
register_index(Invoice) do
193193
tag_column :status
194194
end
195+
end
195196

196-
create_invoice(status: :archived)
197-
visit admin_invoices_path
197+
context 'with value' do
198+
before do
199+
create_invoice(status: :archived)
200+
visit admin_invoices_path
201+
end
202+
203+
it "shows translated text as value" do
204+
expect(page.find('td.col-status').text).to eq('Archivado')
205+
end
198206
end
199207

200-
it "shows translated text as value" do
201-
expect(page.find('td.col-status').text).to eq('Archivado')
208+
context 'without value' do
209+
before do
210+
create_invoice(status: nil)
211+
visit admin_invoices_path
212+
end
213+
214+
it "shows text for nil value" do
215+
expect(page.find('td.col-status').text).to eq('No')
216+
end
202217
end
203218
end
204219

spec/lib/support/enum_utils_spec.rb

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,43 @@ def translation_key(enum_option_to_translate)
5252
end
5353

5454
describe '#translate_enum_option' do
55-
let(:enum_option_to_translate) { 'value1' }
55+
context 'with enum option name present in enum' do
56+
let(:enum_option_to_translate) { 'value1' }
5657

57-
it 'returns correct translation' do
58-
translation = described_class.translate_enum_option(
59-
model_class, 'some_enum', enum_option_to_translate
60-
)
61-
expect(translation).to eq(enum_translations[enum_option_to_translate.to_sym])
58+
it 'returns correct translation' do
59+
translation = described_class.translate_enum_option(
60+
model_class, 'some_enum', enum_option_to_translate
61+
)
62+
expect(translation).to eq(enum_translations[enum_option_to_translate.to_sym])
63+
end
64+
end
65+
66+
context 'with enum option name not present in enum' do
67+
let(:enum_option_to_translate) { 'unknown_value' }
68+
69+
before do
70+
allow(I18n).to receive(:t).with(
71+
translation_key(enum_option_to_translate), default: enum_option_to_translate.to_s
72+
).and_return(enum_option_to_translate)
73+
end
74+
75+
it 'returns untranslated enum option name' do
76+
translation = described_class.translate_enum_option(
77+
model_class, 'some_enum', enum_option_to_translate
78+
)
79+
expect(translation).to eq(enum_option_to_translate)
80+
end
81+
end
82+
83+
context 'with blank enum option name' do
84+
let(:enum_option_to_translate) { nil }
85+
86+
it 'returns nil' do
87+
translation = described_class.translate_enum_option(
88+
model_class, 'some_enum', enum_option_to_translate
89+
)
90+
expect(translation).to eq(nil)
91+
end
6292
end
6393
end
6494
end

0 commit comments

Comments
 (0)