Class: TimeExtensionsTest

Inherits:
Minitest::Test
  • Object
show all
Defined in:
lib/tests/support/time_extension_test.rb

Instance Method Summary collapse

Instance Method Details

#setupObject



4
5
6
7
8
9
# File 'lib/tests/support/time_extension_test.rb', line 4

def setup
  @time = Time.new(2026, 6, 15, 14, 30, 45) # Sunday
  @weekday = Time.new(2026, 6, 16, 9, 0, 0)  # Monday
  @saturday = Time.new(2026, 6, 20, 9, 0, 0) # Saturday
  @sunday = Time.new(2026, 6, 21, 9, 0, 0)   # Sunday
end

#test_add_and_subtract_roundtripObject



121
122
123
# File 'lib/tests/support/time_extension_test.rb', line 121

def test_add_and_subtract_roundtrip
  assert_equal @time, @time.add_days(7).subtract_days(7)
end

#test_add_daysObject

---------- add_days ----------



89
90
91
92
# File 'lib/tests/support/time_extension_test.rb', line 89

def test_add_days
  result = @time.add_days(3)
  assert_equal Time.new(2026, 6, 18, 14, 30, 45), result
end

#test_add_days_crosses_monthObject



98
99
100
101
102
# File 'lib/tests/support/time_extension_test.rb', line 98

def test_add_days_crosses_month
  result = Time.new(2026, 6, 30, 0, 0, 0).add_days(1)
  assert_equal 7, result.month
  assert_equal 1, result.day
end

#test_add_days_zeroObject



94
95
96
# File 'lib/tests/support/time_extension_test.rb', line 94

def test_add_days_zero
  assert_equal @time, @time.add_days(0)
end

#test_all_day_beginObject



74
75
76
# File 'lib/tests/support/time_extension_test.rb', line 74

def test_all_day_begin
  assert_equal @time.beginning_of_day, @time.all_day.first
end

#test_all_day_endObject



78
79
80
# File 'lib/tests/support/time_extension_test.rb', line 78

def test_all_day_end
  assert_equal @time.end_of_day, @time.all_day.last
end

#test_all_day_includes_noonObject



82
83
84
85
# File 'lib/tests/support/time_extension_test.rb', line 82

def test_all_day_includes_noon
  noon = Time.new(2026, 6, 15, 12, 0, 0)
  assert @time.all_day.include?(noon)
end

#test_all_day_returns_rangeObject

---------- all_day ----------



70
71
72
# File 'lib/tests/support/time_extension_test.rb', line 70

def test_all_day_returns_range
  assert_kind_of Range, @time.all_day
end

#test_atObject

---------- at ----------



56
57
58
59
# File 'lib/tests/support/time_extension_test.rb', line 56

def test_at
  result = @time.at(10, 20, 30)
  assert_equal Time.new(2026, 6, 15, 10, 20, 30), result
end

#test_at_preserves_dateObject



61
62
63
64
65
66
# File 'lib/tests/support/time_extension_test.rb', line 61

def test_at_preserves_date
  result = @time.at(0, 0, 0)
  assert_equal @time.year,  result.year
  assert_equal @time.month, result.month
  assert_equal @time.day,   result.day
end

#test_beginning_and_end_of_today_same_dateObject



203
204
205
206
207
208
209
# File 'lib/tests/support/time_extension_test.rb', line 203

def test_beginning_and_end_of_today_same_date
  b = Time.beginning_of_today
  e = Time.end_of_today
  assert_equal b.year,  e.year
  assert_equal b.month, e.month
  assert_equal b.day,   e.day
end

#test_beginning_of_dayObject

---------- beginning_of_day ----------



30
31
32
33
# File 'lib/tests/support/time_extension_test.rb', line 30

def test_beginning_of_day
  result = @time.beginning_of_day
  assert_equal Time.new(2026, 6, 15, 0, 0, 0), result
end

#test_beginning_of_day_preserves_dateObject



35
36
37
38
39
# File 'lib/tests/support/time_extension_test.rb', line 35

def test_beginning_of_day_preserves_date
  assert_equal @time.year,  @time.beginning_of_day.year
  assert_equal @time.month, @time.beginning_of_day.month
  assert_equal @time.day,   @time.beginning_of_day.day
end

#test_beginning_of_todayObject



183
184
185
186
187
188
189
# File 'lib/tests/support/time_extension_test.rb', line 183

def test_beginning_of_today
  t = Time.beginning_of_today
  assert_equal 0, t.hour
  assert_equal 0, t.min
  assert_equal 0, t.sec
  assert_equal Time.now.day, t.day
end

#test_closest_future_working_day_from_saturdayObject



132
133
134
135
136
# File 'lib/tests/support/time_extension_test.rb', line 132

def test_closest_future_working_day_from_saturday
  result = @saturday.closest_future_working_day
  assert_equal 1, result.wday # Monday
  assert_equal 22, result.day
end

#test_closest_future_working_day_from_sundayObject



138
139
140
141
142
# File 'lib/tests/support/time_extension_test.rb', line 138

def test_closest_future_working_day_from_sunday
  result = @sunday.closest_future_working_day
  assert_equal 1, result.wday # Monday
  assert_equal 22, result.day
end

#test_closest_future_working_day_from_weekdayObject

---------- closest_future_working_day ----------



127
128
129
130
# File 'lib/tests/support/time_extension_test.rb', line 127

def test_closest_future_working_day_from_weekday
  # Monday — already a working day, should not advance
  assert_equal @weekday, @weekday.closest_future_working_day
end

#test_closest_future_working_day_not_weekendObject



144
145
146
147
# File 'lib/tests/support/time_extension_test.rb', line 144

def test_closest_future_working_day_not_weekend
  result = @saturday.closest_future_working_day
  refute [0, 6].include?(result.wday)
end

#test_days_secondsObject

---------- days_seconds ----------



13
14
15
16
# File 'lib/tests/support/time_extension_test.rb', line 13

def test_days_seconds
  t = Time.new(2026, 6, 15, 1, 2, 3)
  assert_equal 1 * 3600 + 2 * 60 + 3, t.days_seconds
end

#test_days_seconds_end_of_dayObject



23
24
25
26
# File 'lib/tests/support/time_extension_test.rb', line 23

def test_days_seconds_end_of_day
  t = Time.new(2026, 6, 15, 23, 59, 59)
  assert_equal 23 * 3600 + 59 * 60 + 59, t.days_seconds
end

#test_days_seconds_midnightObject



18
19
20
21
# File 'lib/tests/support/time_extension_test.rb', line 18

def test_days_seconds_midnight
  t = Time.new(2026, 6, 15, 0, 0, 0)
  assert_equal 0, t.days_seconds
end

#test_end_of_dayObject

---------- end_of_day ----------



43
44
45
46
# File 'lib/tests/support/time_extension_test.rb', line 43

def test_end_of_day
  result = @time.end_of_day
  assert_equal Time.new(2026, 6, 15, 23, 59, 59), result
end

#test_end_of_day_preserves_dateObject



48
49
50
51
52
# File 'lib/tests/support/time_extension_test.rb', line 48

def test_end_of_day_preserves_date
  assert_equal @time.year,  @time.end_of_day.year
  assert_equal @time.month, @time.end_of_day.month
  assert_equal @time.day,   @time.end_of_day.day
end

#test_end_of_todayObject



191
192
193
194
195
196
197
# File 'lib/tests/support/time_extension_test.rb', line 191

def test_end_of_today
  t = Time.end_of_today
  assert_equal 23, t.hour
  assert_equal 59, t.min
  assert_equal 59, t.sec
  assert_equal Time.now.day, t.day
end

#test_start_of_today_equals_beginning_of_todayObject



199
200
201
# File 'lib/tests/support/time_extension_test.rb', line 199

def test_start_of_today_equals_beginning_of_today
  assert_equal Time.beginning_of_today, Time.start_of_today
end

#test_subtract_daysObject

---------- subtract_days ----------



106
107
108
109
# File 'lib/tests/support/time_extension_test.rb', line 106

def test_subtract_days
  result = @time.subtract_days(5)
  assert_equal Time.new(2026, 6, 10, 14, 30, 45), result
end

#test_subtract_days_crosses_monthObject



115
116
117
118
119
# File 'lib/tests/support/time_extension_test.rb', line 115

def test_subtract_days_crosses_month
  result = Time.new(2026, 6, 1, 0, 0, 0).subtract_days(1)
  assert_equal 5, result.month
  assert_equal 31, result.day
end

#test_subtract_days_zeroObject



111
112
113
# File 'lib/tests/support/time_extension_test.rb', line 111

def test_subtract_days_zero
  assert_equal @time, @time.subtract_days(0)
end

#test_today_is_roughly_nowObject



171
172
173
# File 'lib/tests/support/time_extension_test.rb', line 171

def test_today_is_roughly_now
  assert_in_delta Time.now.to_i, Time.today.to_i, 2
end

#test_today_is_timeObject

---------- class methods ----------



167
168
169
# File 'lib/tests/support/time_extension_test.rb', line 167

def test_today_is_time
  assert_kind_of Time, Time.today
end

#test_tomorrow_is_one_day_aheadObject



175
176
177
# File 'lib/tests/support/time_extension_test.rb', line 175

def test_tomorrow_is_one_day_ahead
  assert_in_delta Time.today.to_i + 86_400, Time.tomorrow.to_i, 2
end

#test_with_current_time_preserves_dateObject

---------- with_current_time ----------



151
152
153
154
155
156
# File 'lib/tests/support/time_extension_test.rb', line 151

def test_with_current_time_preserves_date
  result = @time.with_current_time
  assert_equal @time.year,  result.year
  assert_equal @time.month, result.month
  assert_equal @time.day,   result.day
end

#test_with_current_time_uses_current_hoursObject



158
159
160
161
162
163
# File 'lib/tests/support/time_extension_test.rb', line 158

def test_with_current_time_uses_current_hours
  result = @time.with_current_time
  now = Time.now
  assert_in_delta now.hour, result.hour, 1
  assert_in_delta now.min,  result.min,  1
end

#test_yesterday_is_one_day_behindObject



179
180
181
# File 'lib/tests/support/time_extension_test.rb', line 179

def test_yesterday_is_one_day_behind
  assert_in_delta Time.today.to_i - 86_400, Time.yesterday.to_i, 2
end