# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/ require 'rails_helper' RSpec.describe ActiveModel::Error, :aggregate_failures do context 'with a default rails error available from locale.yml (including interpolation)' do let(:error) { User.first.errors.add(:firstname, :equal_to, count: '25') } context 'when using the standard error format and the default locale' do it 'produces a standard Rails error including the field name' do expect(error.message).to eq('must be equal to 25') expect(error.full_message).to eq('Firstname must be equal to 25') end end context 'when using a custom error format and a custom locale' do let(:custom_translations) { { 'must be equal to %{count}' => 'muss den Wert %{count} haben', 'This field %s' => 'Dieses Feld %s' } } # rubocop:disable Style/FormatStringToken it 'produces a custom error NOT including the field name' do allow(Translation).to receive(:translate) { |_locale, string| custom_translations[string] || string } expect(error.message).to eq('must be equal to 25') expect(error.localized_full_message(no_field_name: true, locale: 'de-de')).to eq('Dieses Feld muss den Wert 25 haben') end end end context 'with a custom error not available from locale.yml (does not support interpolation)' do let(:error) { User.first.errors.add(:firstname, 'is unknown') } context 'when using the standard error format and the default locale' do it 'produces a standard Rails error including the field name' do expect(error.message).to eq('is unknown') expect(error.full_message).to eq('Firstname is unknown') end end context 'when using a custom error format and a custom locale' do let(:custom_translations) { { 'is unknown' => 'ist unbekannt', 'This field %s' => 'Dieses Feld %{message}' } } it 'produces a custom error NOT including the field name' do allow(Translation).to receive(:translate) { |_locale, string| custom_translations[string] || string } expect(error.message).to eq('is unknown') expect(error.localized_full_message(no_field_name: true, locale: 'de-de')).to eq('Dieses Feld ist unbekannt') end end end end