Skip to content

Commit

Permalink
Render Datetime ingredient in local time zone.
Browse files Browse the repository at this point in the history
Datetime values are stored in UTC in the database.
We need to render them in the local timezone.

(cherry picked from commit 226c97f)
  • Loading branch information
tvdeyen committed Sep 4, 2024
1 parent 6e74d2b commit 9c10de9
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 8 deletions.
5 changes: 3 additions & 2 deletions app/components/alchemy/ingredients/datetime_view.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@ def initialize(ingredient, date_format: nil, html_options: {})
end

def call
datetime = ingredient.value.in_time_zone(Rails.application.config.time_zone)
if date_format == "rfc822"
ingredient.value.to_s(:rfc822)
datetime.try(:to_s, :rfc822) || datetime.try(:to_fs, :rfc822)
else
::I18n.l(ingredient.value, format: date_format)
::I18n.l(datetime, format: date_format)
end.html_safe
end
end
Expand Down
6 changes: 5 additions & 1 deletion spec/models/alchemy/ingredients/datetime_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,17 @@
end

describe "value" do
subject { datetime_ingredient.value }
subject(:value) { datetime_ingredient.value }

it "returns a time object" do
is_expected.to be_an(Time)
is_expected.to eq("01.04.2021")
end

it "timezone is UTC" do
expect(value.zone).to eq("UTC")
end

context "without value" do
let(:datetime_ingredient) do
described_class.new(
Expand Down
20 changes: 15 additions & 5 deletions spec/views/alchemy/ingredients/datetime_view_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,17 @@
require "rails_helper"

describe "alchemy/ingredients/_datetime_view" do
let(:ingredient) { Alchemy::Ingredients::Datetime.new(value: "2013-10-27 21:14:16 +0100") }
around do |example|
time_zone = Rails.application.config.time_zone
Rails.application.config.time_zone = "Berlin"
example.run
Rails.application.config.time_zone = time_zone
end

let(:ingredient) do
Alchemy::Ingredients::Datetime.new(value: "2024-08-29T10:00:00.000Z")
end

let(:options) { {} }

before do
Expand All @@ -13,17 +23,17 @@
context "with date value" do
context "without date_format passed" do
it "translates the date value with default format" do
render ingredient
expect(rendered).to have_content("Sun, 27 Oct 2013 20:14:16 +0000")
render ingredient, options: options
expect(rendered).to have_content("Thu, 29 Aug 2024 12:00:00 +0200")
end
end

context "with option date_format set to rfc822" do
let(:options) { {date_format: "rfc822"} }

it "renders the date rfc822 conform" do
render ingredient
expect(rendered).to have_content("Sun, 27 Oct 2013 20:14:16 +0000")
render ingredient, options: options
expect(rendered).to have_content("Thu, 29 Aug 2024 12:00:00 +0200")
end
end
end
Expand Down

0 comments on commit 9c10de9

Please sign in to comment.