Skip to content

Commit dde6524

Browse files
authored
Merge branch 'main' into depfu/batch_all/assets.src/npm/2025-04-05
2 parents cd34ed9 + db93370 commit dde6524

File tree

10 files changed

+47
-20
lines changed

10 files changed

+47
-20
lines changed

app/helpers/timer_sessions_helper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def issue_information(issue)
6464
end
6565

6666
def issue_identifier(issue)
67-
"[#{issue.project.name}] #{issue.id}"
67+
"#{issue.id} #{issue.project.name}"
6868
end
6969

7070
def truncated_subject(subject)

app/models/timer_session.rb

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class TimerSession < RedmineTrackyApplicationRecord
1414

1515
validates :timer_start, presence: true
1616
before_save :set_recorded_hours
17+
before_save :round_timer_to_nearest_minute
1718

1819
scope :active, -> { where(finished: false) }
1920
scope :finished, -> { where(finished: true) }
@@ -44,7 +45,7 @@ def relevant_issues
4445
end
4546

4647
def overlaps?(other_session)
47-
return false unless timer_end.present? && other_session.timer_start.present?
48+
return false unless can_overlap?(other_session)
4849

4950
this_start = round_to_nearest_minute(timer_start)
5051
this_end = round_to_nearest_minute(timer_end)
@@ -56,6 +57,18 @@ def overlaps?(other_session)
5657

5758
private
5859

60+
def can_overlap?(other_session)
61+
return false if other_session.nil?
62+
return false if timer_start.nil? || timer_end.nil? || other_session.timer_start.nil? || other_session.timer_end.nil?
63+
64+
true
65+
end
66+
67+
def round_timer_to_nearest_minute
68+
self.timer_start = round_to_nearest_minute(timer_start) if timer_end.present?
69+
self.timer_end = round_to_nearest_minute(timer_end) if timer_end.present?
70+
end
71+
5972
def round_to_nearest_minute(time)
6073
Time.at((time.to_f / 60).round * 60).utc
6174
end

app/views/timer_sessions/_timer_sessions_day_block.html.erb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@
1111
<%= render TimerSessionEntryComponent.new(
1212
timer_session_entry: time_entity,
1313
discrepancy_detected: @non_matching_timer_session_ids.include?(time_entity.id),
14-
overlap_detected: timer_sessions.any? { |other_entity| time_entity != other_entity && other_entity&.overlaps?(time_entity) },
14+
overlap_detected: timer_sessions.any? do |other_entity|
15+
other_entity.timer_session? &&
16+
time_entity.timer_session? &&
17+
time_entity != other_entity &&
18+
other_entity.overlaps?(time_entity)
19+
end,
1520
gap_separator: draw_gap_separator(time_entity, previous_time_entity)
1621
) %>
1722
<% end %>

assets.src/src/styles/utils.scss

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
}
5858

5959
@media only screen and (max-width: 480px) {
60-
[class*="w-"] {
60+
[class*='w-'] {
6161
width: 100% !important;
6262
}
6363
}
@@ -140,7 +140,7 @@
140140

141141
@media only screen and (max-width: 768px) {
142142
/* For mobile phones: */
143-
[class*="col-"] {
143+
[class*='col-'] {
144144
width: 100%;
145145
}
146146
}

assets/javascripts/redmine-tracky.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/functional/time_tracker_controller_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def setup
117117
} }, xhr: true
118118
assert_equal 2, TimerSession.count
119119
assert_equal TimerSession.last.finished, true
120-
assert_in_delta TimerSession.last.timer_start, Time.zone.now - 1.hour, 1.second
120+
assert_in_delta TimerSession.last.timer_start, Time.zone.now - 1.hour, 30.seconds
121121
assert_response 200
122122
end
123123

test/system/timer_sessions_management_test.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ class TimerSessionsManagementTest < ApplicationSystemTestCase
2727
end
2828
end
2929

30+
test 'index - does not raise error when rendering time entries on same date' do
31+
last_session = @timer_sessions.last
32+
entry = TimeEntry.create!(issue: Issue.first, user: last_session.user, hours: 1,
33+
spent_on: last_session.timer_start)
34+
visit timer_sessions_path
35+
entry.destroy!
36+
end
37+
3038
test 'filter' do
3139
@timer_sessions.each do |timer_session|
3240
assert has_content?(timer_session.comments)

test/unit/time_discrepancy_loader_test.rb

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,4 @@ class TimeDiscrepancyLoaderTest < ActiveSupport::TestCase
5454
assert_equal 1, where_time_not_adding_up.length
5555
assert_kind_of Integer, where_time_not_adding_up.first
5656
end
57-
58-
test 'ignore small discrepancies in time sum' do
59-
timer_sessions = TimerSession.includes(:issues, :time_entries, :timer_session_time_entries)
60-
.finished.created_by(User.current)
61-
uneven_timer_session_ids = TimeDiscrepancyLoader.uneven_timer_session_ids(timer_sessions)
62-
63-
# @timer_session is still valid (even though the hours are not equal)
64-
# because the difference is less than 0.05
65-
assert uneven_timer_session_ids.exclude?(@timer_session.id)
66-
assert_not_equal @timer_session.hours, @timer_session.time_entries.sum(&:hours)
67-
end
6857
end

test/unit/timer_session_test.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,18 @@ class TimerSessionTest < ActiveSupport::TestCase
5858
assert_not @timer_session.valid?
5959
end
6060

61+
test 'round_timer_to_nearest_minute' do
62+
timer_start_before = @timer_session.timer_start
63+
64+
timer_start_after = timer_start_before + 10.seconds
65+
@timer_session.update(timer_start: timer_start_after)
66+
assert_equal timer_start_before, @timer_session.reload.timer_start
67+
68+
timer_start_after = timer_start_before + 40.seconds
69+
@timer_session.update(timer_start: timer_start_after)
70+
assert_equal timer_start_before + 1.minute, @timer_session.reload.timer_start
71+
end
72+
6173
test 'overlaps?' do # rubocop:disable Metrics/BlockLength
6274
session1 = FactoryBot.create(:timer_session, user: User.current, timer_start: Time.zone.now,
6375
timer_end: Time.zone.now + 1.hour)

test/unit/timer_sessions_helper_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,6 @@ class TimerSessionsHelperTest < ActionView::TestCase
4444
end
4545

4646
test '#issue_link_list' do
47-
assert_equal ['<a href="/issues/1">[eCookbook] 1: Cannot print recipes</a>'], issue_link_list([Issue.first])
47+
assert_equal ['<a href="/issues/1">1 eCookbook: Cannot print recipes</a>'], issue_link_list([Issue.first])
4848
end
4949
end

0 commit comments

Comments
 (0)