diff options
Diffstat (limited to 'spec/helpers/time_zone_helper_spec.rb')
-rw-r--r-- | spec/helpers/time_zone_helper_spec.rb | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/spec/helpers/time_zone_helper_spec.rb b/spec/helpers/time_zone_helper_spec.rb new file mode 100644 index 00000000000..391e9bd38ed --- /dev/null +++ b/spec/helpers/time_zone_helper_spec.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe TimeZoneHelper, :aggregate_failures do + describe '#timezone_data' do + context 'with short format' do + subject(:timezone_data) { helper.timezone_data } + + it 'matches schema' do + expect(timezone_data).not_to be_empty + + timezone_data.each_with_index do |timezone_hash, i| + expect(timezone_hash.keys).to contain_exactly( + :identifier, + :name, + :offset + ), "Failed at index #{i}" + end + end + + it 'formats for display' do + tz = ActiveSupport::TimeZone.all[0] + + expect(timezone_data[0]).to eq( + identifier: tz.tzinfo.identifier, + name: tz.name, + offset: tz.now.utc_offset + ) + end + end + + context 'with full format' do + subject(:timezone_data) { helper.timezone_data(format: :full) } + + it 'matches schema' do + expect(timezone_data).not_to be_empty + + timezone_data.each_with_index do |timezone_hash, i| + expect(timezone_hash.keys).to contain_exactly( + :identifier, + :name, + :abbr, + :offset, + :formatted_offset + ), "Failed at index #{i}" + end + end + + it 'formats for display' do + tz = ActiveSupport::TimeZone.all[0] + + expect(timezone_data[0]).to eq( + identifier: tz.tzinfo.identifier, + name: tz.name, + abbr: tz.tzinfo.strftime('%Z'), + offset: tz.now.utc_offset, + formatted_offset: tz.now.formatted_offset + ) + end + end + + context 'with unknown format' do + subject(:timezone_data) { helper.timezone_data(format: :unknown) } + + it 'raises an exception' do + expect { timezone_data }.to raise_error ArgumentError, 'Invalid format :unknown. Valid formats are :short, :full.' + end + end + end +end |