diff --git a/app/models/timer_session.rb b/app/models/timer_session.rb index 8086d25a..201a706a 100644 --- a/app/models/timer_session.rb +++ b/app/models/timer_session.rb @@ -13,8 +13,8 @@ class TimerSession < RedmineTrackyApplicationRecord has_many :time_entries, through: :timer_session_time_entries validates :timer_start, presence: true - before_save :set_recorded_hours before_save :round_timer_to_nearest_minute + before_save :set_recorded_hours scope :active, -> { where(finished: false) } scope :finished, -> { where(finished: true) } @@ -65,7 +65,7 @@ def can_overlap?(other_session) end def round_timer_to_nearest_minute - self.timer_start = round_to_nearest_minute(timer_start) if timer_end.present? + self.timer_start = round_to_nearest_minute(timer_start) if timer_start.present? self.timer_end = round_to_nearest_minute(timer_end) if timer_end.present? end diff --git a/test/unit/timer_session_test.rb b/test/unit/timer_session_test.rb index 1ecf7aaf..92cd2636 100644 --- a/test/unit/timer_session_test.rb +++ b/test/unit/timer_session_test.rb @@ -59,6 +59,7 @@ class TimerSessionTest < ActiveSupport::TestCase end test 'round_timer_to_nearest_minute' do + @timer_session.timer_end = nil timer_start_before = @timer_session.timer_start timer_start_after = timer_start_before + 10.seconds @@ -106,4 +107,14 @@ class TimerSessionTest < ActiveSupport::TestCase assert session1.overlaps?(session2) assert session2.overlaps?(session1) end + + test 'round_timer_start_when_timer_end_is_nil' do + timer_session = FactoryBot.build(:timer_session, user: User.current, finished: false) + timer_session.timer_end = nil + timer_session.timer_start = Time.zone.now + 45.seconds + + timer_session.save! + + assert_equal 0, timer_session.timer_start.sec, 'timer_start should be rounded to nearest minute even when timer_end is nil' # rubocop:disable Layout/LineLength + end end