Show the precise ending time unless it's midnight

The reason why we were displaying the ending date as "one second before
the actual ending" was that, when seeing that a phase ends at a date
like "2000-12-31 00:00", we might end up thinking that the phase will
finished at the midnight between December 31st and January the 1st,
while it actually ends at the midnight between December the 30th and
December the 31st.

This is particularly important because we use a date field to select the
date of a phase and if select December the 31st, it will be stored in
the database as "2000-12-31 00:00". So, instead, in this case we display
"2000-12-30 23:59", which is less confusing.

But now we're going to add support for setting a time on polls, which
means a certain poll might end at 15:30. In this case, displaying that
it ends at 15:29 doesn't make much sense.
This commit is contained in:
Javi Martín
2022-09-06 18:20:12 +02:00
parent 7227815a16
commit 90d5759c23
2 changed files with 19 additions and 4 deletions

View File

@@ -16,6 +16,10 @@ class Admin::DurationComponent < ApplicationComponent
end end
def end_time def end_time
durable.ends_at - 1.second if durable.ends_at.present? if durable.ends_at.present? && durable.ends_at == durable.ends_at.beginning_of_day
durable.ends_at - 1.second
else
durable.ends_at
end
end end
end end

View File

@@ -9,9 +9,20 @@ describe Admin::DurationComponent do
render_inline Admin::DurationComponent.new(durable) render_inline Admin::DurationComponent.new(durable)
expect(page.text).to eq "2015-08-01 12:00 - 2016-09-30 16:29" expect(page.text).to eq "2015-08-01 12:00 - 2016-09-30 16:30"
expect(page).to have_css "time", exact_text: "2015-08-01 12:00" expect(page).to have_css "time", exact_text: "2015-08-01 12:00"
expect(page).to have_css "time", exact_text: "2016-09-30 16:29" expect(page).to have_css "time", exact_text: "2016-09-30 16:30"
end
it "shows the moment before the end date when it ends at midnight" do
durable = double(
starts_at: Time.zone.local(2015, 8, 1, 12, 0, 0),
ends_at: Time.zone.local(2016, 9, 30, 00, 00, 00)
)
render_inline Admin::DurationComponent.new(durable)
expect(page.text).to eq "2015-08-01 12:00 - 2016-09-29 23:59"
end end
it "shows the start date when no end date is defined" do it "shows the start date when no end date is defined" do
@@ -27,6 +38,6 @@ describe Admin::DurationComponent do
render_inline Admin::DurationComponent.new(durable) render_inline Admin::DurationComponent.new(durable)
expect(page.text).to eq "- 2016-09-30 16:29" expect(page.text).to eq "- 2016-09-30 16:30"
end end
end end