groupdate 4.0.1 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in groupdate.gemspec
4
- gemspec path: "../../"
5
-
6
- gem "activerecord", "~> 4.2.0"
7
-
8
- if defined?(JRUBY_VERSION)
9
- gem "activerecord-jdbcpostgresql-adapter", "~> 1.3.24"
10
- gem "activerecord-jdbcmysql-adapter", "~> 1.3.24"
11
- gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.24"
12
- end
@@ -1,12 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in groupdate.gemspec
4
- gemspec path: "../../"
5
-
6
- gem "activerecord", "~> 5.0.0"
7
-
8
- if defined?(JRUBY_VERSION)
9
- gem "activerecord-jdbcpostgresql-adapter", "~> 50.0"
10
- gem "activerecord-jdbcmysql-adapter", "~> 50.0"
11
- gem "activerecord-jdbcsqlite3-adapter", "~> 50.0"
12
- end
@@ -1,12 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in groupdate.gemspec
4
- gemspec path: "../../"
5
-
6
- gem "activerecord", "~> 5.1.0"
7
-
8
- if defined?(JRUBY_VERSION)
9
- gem "activerecord-jdbcpostgresql-adapter" # no 51.0 yet
10
- gem "activerecord-jdbcmysql-adapter", "~> 51.0"
11
- gem "activerecord-jdbcsqlite3-adapter", "~> 51.0"
12
- end
@@ -1,7 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in groupdate.gemspec
4
- gemspec path: "../../"
5
-
6
- gem "activerecord", "~> 5.1.0"
7
- gem "activerecord5-redshift-adapter"
@@ -1,15 +0,0 @@
1
- require_relative "test_helper"
2
-
3
- class MysqlTest < Minitest::Test
4
- include TestGroupdate
5
- include TestDatabase
6
-
7
- def setup
8
- super
9
- @@setup ||= begin
10
- ActiveRecord::Base.establish_connection adapter: "mysql2", database: "groupdate_test", username: "root"
11
- create_tables
12
- true
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- require_relative "test_helper"
2
-
3
- class PostgresqlTest < Minitest::Test
4
- include TestGroupdate
5
- include TestDatabase
6
-
7
- def setup
8
- super
9
- @@setup ||= begin
10
- ActiveRecord::Base.establish_connection adapter: "postgresql", database: "groupdate_test"
11
- create_tables
12
- true
13
- end
14
- end
15
- end
@@ -1,18 +0,0 @@
1
- require_relative "test_helper"
2
-
3
- class RedshiftTest < Minitest::Test
4
- include TestGroupdate
5
- include TestDatabase
6
-
7
- def setup
8
- super
9
- @@setup ||= begin
10
- abort("REDSHIFT_URL environment variable must be set in order to run tests") unless ENV["REDSHIFT_URL"].present?
11
-
12
- ActiveRecord::Base.establish_connection(ENV["REDSHIFT_URL"])
13
-
14
- create_redshift_tables
15
- true
16
- end
17
- end
18
- end
@@ -1,29 +0,0 @@
1
- require_relative "test_helper"
2
-
3
- class TestSqlite < Minitest::Test
4
- include TestGroupdate
5
- include TestDatabase
6
-
7
- def setup
8
- super
9
- @@setup ||= begin
10
- ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
11
- create_tables
12
- true
13
- end
14
- end
15
-
16
- def test_where_after
17
- skip
18
- end
19
-
20
- def call_method(method, field, options)
21
- if method == :quarter || options[:time_zone] || options[:day_start] || options[:week_start] || Groupdate.week_start != :sun || (Time.zone && options[:time_zone] != false)
22
- error = assert_raises(Groupdate::Error) { super }
23
- assert_includes error.message, "not supported for SQLite"
24
- skip # after assertions
25
- else
26
- super
27
- end
28
- end
29
- end
@@ -1,1246 +0,0 @@
1
- require "bundler/setup"
2
- Bundler.require(:default)
3
- require "minitest/autorun"
4
- require "minitest/pride"
5
- require "logger"
6
- require "active_record"
7
-
8
- Minitest::Test = Minitest::Unit::TestCase unless defined?(Minitest::Test)
9
-
10
- ENV["TZ"] = "UTC"
11
-
12
- # for debugging
13
- ActiveRecord::Base.logger = ActiveSupport::Logger.new(STDOUT) if ENV["VERBOSE"]
14
-
15
- # rails does this in activerecord/lib/active_record/railtie.rb
16
- ActiveRecord::Base.default_timezone = :utc
17
- ActiveRecord::Base.time_zone_aware_attributes = true
18
-
19
- class User < ActiveRecord::Base
20
- has_many :posts
21
-
22
- def self.custom_count
23
- count
24
- end
25
- end
26
-
27
- class Post < ActiveRecord::Base
28
- end
29
-
30
- # i18n
31
- I18n.enforce_available_locales = true
32
- I18n.backend.store_translations :de, date: {
33
- abbr_month_names: %w(Jan Feb Mar Apr Mai Jun Jul Aug Sep Okt Nov Dez).unshift(nil)
34
- },
35
- time: {
36
- formats: {special: "%b %e, %Y"}
37
- }
38
-
39
- # migrations
40
- def create_tables
41
- ActiveRecord::Migration.verbose = false
42
-
43
- ActiveRecord::Migration.create_table :users, force: true do |t|
44
- t.string :name
45
- t.integer :score
46
- t.timestamp :created_at
47
- t.date :created_on
48
- end
49
-
50
- ActiveRecord::Migration.create_table :posts, force: true do |t|
51
- t.references :user
52
- t.timestamp :created_at
53
- end
54
- end
55
-
56
- def create_redshift_tables
57
- ActiveRecord::Migration.verbose = false
58
-
59
- if ActiveRecord::Migration.table_exists?(:users)
60
- ActiveRecord::Migration.drop_table(:users, force: :cascade)
61
- end
62
-
63
- if ActiveRecord::Migration.table_exists?(:posts)
64
- ActiveRecord::Migration.drop_table(:posts, force: :cascade)
65
- end
66
-
67
- ActiveRecord::Migration.execute "CREATE TABLE users (id INT IDENTITY(1,1) PRIMARY KEY, name VARCHAR(255), score INT, created_at DATETIME, created_on DATE);"
68
-
69
- ActiveRecord::Migration.execute "CREATE TABLE posts (id INT IDENTITY(1,1) PRIMARY KEY, user_id INT REFERENCES users, created_at DATETIME);"
70
- end
71
-
72
- module TestDatabase
73
- def test_zeros_previous_scope
74
- create_user "2013-05-01"
75
- expected = {
76
- Date.parse("2013-05-01") => 0
77
- }
78
- assert_equal expected, User.where("id = 0").group_by_day(:created_at, range: Date.parse("2013-05-01")..Date.parse("2013-05-01 23:59:59 UTC")).count
79
- end
80
-
81
- def test_table_name
82
- # This test is to ensure there's not an error when using the table
83
- # name as part of the column name.
84
- assert_empty User.group_by_day("users.created_at").count
85
- end
86
-
87
- def test_previous_scopes
88
- create_user "2013-05-01"
89
- assert_empty User.where("id = 0").group_by_day(:created_at).count
90
- end
91
-
92
- def test_where_after
93
- create_user "2013-05-01"
94
- create_user "2013-05-02"
95
- expected = {Date.parse("2013-05-02") => 1}
96
- assert_equal expected, User.group_by_day(:created_at).where("created_at > ?", "2013-05-01").count
97
- end
98
-
99
- def test_group_before
100
- create_user "2013-05-01", 1
101
- create_user "2013-05-02", 2
102
- create_user "2013-05-03", 2
103
- expected = {
104
- [1, Date.parse("2013-05-01")] => 1,
105
- [1, Date.parse("2013-05-02")] => 0,
106
- [1, Date.parse("2013-05-03")] => 0,
107
- [2, Date.parse("2013-05-01")] => 0,
108
- [2, Date.parse("2013-05-02")] => 1,
109
- [2, Date.parse("2013-05-03")] => 1
110
- }
111
- assert_equal expected, User.group(:score).group_by_day(:created_at).order(:score).count
112
- end
113
-
114
- def test_group_after
115
- create_user "2013-05-01", 1
116
- create_user "2013-05-02", 2
117
- create_user "2013-05-03", 2
118
- expected = {
119
- [Date.parse("2013-05-01"), 1] => 1,
120
- [Date.parse("2013-05-02"), 1] => 0,
121
- [Date.parse("2013-05-03"), 1] => 0,
122
- [Date.parse("2013-05-01"), 2] => 0,
123
- [Date.parse("2013-05-02"), 2] => 1,
124
- [Date.parse("2013-05-03"), 2] => 1
125
- }
126
- assert_equal expected, User.group_by_day(:created_at).group(:score).order(:score).count
127
- end
128
-
129
- def test_group_day_of_week
130
- create_user "2013-05-01", 1
131
- create_user "2013-05-02", 2
132
- create_user "2013-05-03", 2
133
- expected = {
134
- [1, 0] => 0,
135
- [1, 1] => 0,
136
- [1, 2] => 0,
137
- [1, 3] => 1,
138
- [1, 4] => 0,
139
- [1, 5] => 0,
140
- [1, 6] => 0,
141
- [2, 0] => 0,
142
- [2, 1] => 0,
143
- [2, 2] => 0,
144
- [2, 3] => 0,
145
- [2, 4] => 1,
146
- [2, 5] => 1,
147
- [2, 6] => 0
148
- }
149
- assert_equal expected, User.group(:score).group_by_day_of_week(:created_at).count
150
- end
151
-
152
- def test_groupdate_multiple
153
- create_user "2013-05-01", 1
154
- expected = {
155
- [Date.parse("2013-05-01"), Date.parse("2013-01-01")] => 1
156
- }
157
- assert_equal expected, User.group_by_day(:created_at).group_by_year(:created_at).count
158
- end
159
-
160
- def test_groupdate_multiple_hour_of_day_day_of_week
161
- create_user "2013-05-01 00:00:00 UTC", 1
162
- expected = {}
163
- 24.times do |i|
164
- 7.times do |j|
165
- expected[[i, j]] = i == 0 && j == 3 ? 1 : 0
166
- end
167
- end
168
- assert_equal expected, User.group_by_hour_of_day(:created_at).group_by_day_of_week(:created_at).count
169
- end
170
-
171
- def test_not_modified
172
- create_user "2013-05-01"
173
- expected = {Date.parse("2013-05-01") => 1}
174
- relation = User.group_by_day(:created_at)
175
- relation.where("created_at > ?", "2013-05-01")
176
- assert_equal expected, relation.count
177
- end
178
-
179
- def test_bad_method
180
- assert_raises(NoMethodError) { User.group_by_day(:created_at).no_such_method }
181
- end
182
-
183
- def test_respond_to_order
184
- assert User.group_by_day(:created_at).respond_to?(:order)
185
- end
186
-
187
- def test_respond_to_bad_method
188
- assert !User.group_by_day(:created_at).respond_to?(:no_such_method)
189
- end
190
-
191
- def test_last
192
- create_user "#{this_year - 3}-01-01"
193
- create_user "#{this_year - 1}-01-01"
194
- expected = {
195
- Date.parse("#{this_year - 2}-01-01") => 0,
196
- Date.parse("#{this_year - 1}-01-01") => 1,
197
- Date.parse("#{this_year}-01-01") => 0
198
- }
199
- assert_equal expected, User.group_by_year(:created_at, last: 3).count
200
- end
201
-
202
- def test_last_date
203
- Time.zone = pt
204
- today = Time.zone.now.to_date
205
- create_user today.to_s
206
- this_month = pt.parse(today.to_s).beginning_of_month
207
- last_month = this_month - 1.month
208
- expected = {
209
- last_month.to_date => 0,
210
- this_month.to_date => 1
211
- }
212
- assert_equal expected, call_method(:month, :created_on, last: 2)
213
- ensure
214
- Time.zone = nil
215
- end
216
-
217
- def test_last_hour_of_day
218
- error = assert_raises(ArgumentError) { User.group_by_hour_of_day(:created_at, last: 3).count }
219
- assert_equal "Cannot use last option with hour_of_day", error.message
220
- end
221
-
222
- def test_current
223
- create_user "#{this_year - 3}-01-01"
224
- create_user "#{this_year - 1}-01-01"
225
- expected = {
226
- Date.parse("#{this_year - 2}-01-01") => 0,
227
- Date.parse("#{this_year - 1}-01-01") => 1
228
- }
229
- assert_equal expected, User.group_by_year(:created_at, last: 2, current: false).count
230
- end
231
-
232
- def test_quarter_and_last
233
- today = Date.today
234
- create_user today.to_s
235
- this_quarter = today.to_time.beginning_of_quarter
236
- last_quarter = this_quarter - 3.months
237
- expected = {
238
- last_quarter.to_date => 0,
239
- this_quarter.to_date => 1
240
- }
241
- assert_equal expected, call_method(:quarter, :created_at, last: 2)
242
- end
243
-
244
- def test_format_locale
245
- create_user "2014-10-01"
246
- assert_equal ({"Okt" => 1}), User.group_by_day(:created_at, format: "%b", locale: :de).count
247
- end
248
-
249
- def test_format_locale_by_symbol
250
- create_user "2014-10-01"
251
- assert_equal ({"Okt 1, 2014" => 1}), User.group_by_day(:created_at, format: :special, locale: :de).count
252
- end
253
-
254
- def test_format_locale_global
255
- create_user "2014-10-01"
256
- I18n.locale = :de
257
- assert_equal ({"Okt" => 1}), User.group_by_day(:created_at, format: "%b").count
258
- ensure
259
- I18n.locale = :en
260
- end
261
-
262
- def test_format_multiple_groups
263
- create_user "2014-03-01"
264
- assert_equal ({["Sun", 1] => 1}), User.group_by_week(:created_at, format: "%a").group(:score).count
265
- assert_equal ({[1, "Sun"] => 1}), User.group(:score).group_by_week(:created_at, format: "%a").count
266
- end
267
-
268
- # permit
269
-
270
- def test_permit
271
- error = assert_raises(ArgumentError) { User.group_by_period(:day, :created_at, permit: %w(week)).count }
272
- assert_equal "Unpermitted period", error.message
273
- end
274
-
275
- def test_permit_bad_period
276
- error = assert_raises(ArgumentError) { User.group_by_period(:bad_period, :created_at).count }
277
- assert_equal "Unpermitted period", error.message
278
- end
279
-
280
- def test_permit_symbol_symbols
281
- assert_equal ({}), User.group_by_period(:day, :created_at, permit: [:day]).count
282
- end
283
-
284
- def test_permit_string_symbols
285
- assert_equal ({}), User.group_by_period("day", :created_at, permit: [:day]).count
286
- end
287
-
288
- def test_permit_symbol_strings
289
- assert_equal ({}), User.group_by_period(:day, :created_at, permit: %w(day)).count
290
- end
291
-
292
- def test_permit_string_strings
293
- assert_equal ({}), User.group_by_period("day", :created_at, permit: %w(day)).count
294
- end
295
-
296
- # default value
297
-
298
- def test_default_value
299
- create_user "#{this_year}-01-01"
300
- expected = {
301
- Date.parse("#{this_year - 1}-01-01") => nil,
302
- Date.parse("#{this_year}-01-01") => 1
303
- }
304
- assert_equal expected, User.group_by_year(:created_at, last: 2, default_value: nil).count
305
- end
306
-
307
- # associations
308
-
309
- def test_associations
310
- user = create_user("2014-03-01")
311
- user.posts.create!(created_at: "2014-04-01 00:00:00 UTC")
312
- expected = {
313
- Date.parse("2014-04-01") => 1
314
- }
315
- assert_equal expected, user.posts.group_by_day(:created_at).count
316
- end
317
-
318
- def test_associations_period
319
- user = create_user("2014-03-01")
320
- user.posts.create!(created_at: "2014-04-01 00:00:00 UTC")
321
- expected = {
322
- Date.parse("2014-04-01") => 1
323
- }
324
- assert_equal expected, user.posts.group_by_period(:day, :created_at).count
325
- end
326
-
327
- # activerecord default_timezone option
328
-
329
- def test_default_timezone_local
330
- User.default_timezone = :local
331
- assert_raises(Groupdate::Error) { User.group_by_day(:created_at).count }
332
- ensure
333
- User.default_timezone = :utc
334
- end
335
-
336
- # Brasilia Summer Time
337
-
338
- def test_brasilia_summer_time
339
- # must parse and convert to UTC for ActiveRecord 3.1
340
- create_user(brasilia.parse("2014-10-19 02:00:00").utc.to_s)
341
- create_user(brasilia.parse("2014-10-20 02:00:00").utc.to_s)
342
- expected = {
343
- Date.parse("2014-10-19") => 1,
344
- Date.parse("2014-10-20") => 1
345
- }
346
- assert_equal expected, call_method(:day, :created_at, time_zone: "Brasilia")
347
- end
348
-
349
- # carry_forward option
350
-
351
- def test_carry_forward
352
- create_user "2014-05-01"
353
- create_user "2014-05-01"
354
- create_user "2014-05-03"
355
- assert_equal 2, User.group_by_day(:created_at, carry_forward: true).count[Date.parse("2014-05-02")]
356
- end
357
-
358
- # no column
359
-
360
- def test_no_column
361
- assert_raises(ArgumentError) { User.group_by_day.first }
362
- end
363
-
364
- # custom model calculation methods
365
-
366
- def test_custom_model_calculation_method
367
- create_user "2014-05-01"
368
- create_user "2014-05-01"
369
- create_user "2014-05-03"
370
-
371
- expected = {
372
- Date.parse("2014-05-01") => 2,
373
- Date.parse("2014-05-02") => 0,
374
- Date.parse("2014-05-03") => 1
375
- }
376
-
377
- assert_equal expected, User.group_by_day(:created_at).custom_count
378
- end
379
-
380
- def test_using_listed_but_undefined_custom_calculation_method_raises_error
381
- assert_raises(NoMethodError) do
382
- User.group_by_day(:created_at).undefined_calculation
383
- end
384
- end
385
-
386
- # unscope
387
-
388
- def test_unscope
389
- assert_equal User.all, User.group_by_day(:created_at).unscoped.all
390
- end
391
-
392
- # pluck
393
-
394
- def test_pluck
395
- create_user "2014-05-01"
396
- assert_equal [0], User.group_by_hour_of_day(:created_at).pluck(0)
397
- end
398
-
399
- # test relation
400
-
401
- def test_relation
402
- assert User.group_by_day(:created_at).is_a?(ActiveRecord::Relation)
403
- end
404
-
405
- private
406
-
407
- def call_method(method, field, options)
408
- User.group_by_period(method, field, options).count
409
- end
410
-
411
- def create_user(created_at, score = 1)
412
- user =
413
- User.create!(
414
- name: "Andrew",
415
- score: score,
416
- created_at: created_at ? utc.parse(created_at) : nil,
417
- created_on: created_at ? Date.parse(created_at) : nil
418
- )
419
-
420
- # hack for Redshift adapter, which doesn't return id on creation...
421
- user = User.last if user.id.nil?
422
-
423
- user.update_columns(created_at: nil, created_on: nil) if created_at.nil?
424
-
425
- user
426
- end
427
-
428
- def is_redshift?
429
- ActiveRecord::Base.connection.adapter_name == "Redshift"
430
- end
431
-
432
- def teardown
433
- User.delete_all
434
- end
435
-
436
- def enumerable_test?
437
- false
438
- end
439
- end
440
-
441
- module TestGroupdate
442
- def setup
443
- Groupdate.week_start = :sun
444
- end
445
-
446
- # second
447
-
448
- def test_second_end_of_second
449
- if enumerable_test? || ActiveRecord::Base.connection.adapter_name == "Mysql2"
450
- skip # no millisecond precision
451
- else
452
- assert_result_time :second, "2013-05-03 00:00:00 UTC", "2013-05-03 00:00:00.999"
453
- end
454
- end
455
-
456
- def test_second_start_of_second
457
- assert_result_time :second, "2013-05-03 00:00:01 UTC", "2013-05-03 00:00:01.000"
458
- end
459
-
460
- # minute
461
-
462
- def test_minute_end_of_minute
463
- assert_result_time :minute, "2013-05-03 00:00:00 UTC", "2013-05-03 00:00:59"
464
- end
465
-
466
- def test_minute_start_of_minute
467
- assert_result_time :minute, "2013-05-03 00:01:00 UTC", "2013-05-03 00:01:00"
468
- end
469
-
470
- # hour
471
-
472
- def test_hour_end_of_hour
473
- assert_result_time :hour, "2013-05-03 00:00:00 UTC", "2013-05-03 00:59:59"
474
- end
475
-
476
- def test_hour_start_of_hour
477
- assert_result_time :hour, "2013-05-03 01:00:00 UTC", "2013-05-03 01:00:00"
478
- end
479
-
480
- # day
481
-
482
- def test_day_end_of_day
483
- assert_result_date :day, "2013-05-03", "2013-05-03 23:59:59"
484
- end
485
-
486
- def test_day_start_of_day
487
- assert_result_date :day, "2013-05-04", "2013-05-04 00:00:00"
488
- end
489
-
490
- def test_day_end_of_day_with_time_zone
491
- assert_result_date :day, "2013-05-02", "2013-05-03 06:59:59", true
492
- end
493
-
494
- def test_day_start_of_day_with_time_zone
495
- assert_result_date :day, "2013-05-03", "2013-05-03 07:00:00", true
496
- end
497
-
498
- # day hour starts at 2 am
499
-
500
- def test_test_day_end_of_day_day_start_2am
501
- assert_result_date :day, "2013-05-03", "2013-05-04 01:59:59", false, day_start: 2
502
- end
503
-
504
- def test_test_day_start_of_day_day_start_2am
505
- assert_result_date :day, "2013-05-03", "2013-05-03 02:00:00", false, day_start: 2
506
- end
507
-
508
- def test_test_day_end_of_day_with_time_zone_day_start_2am
509
- assert_result_date :day, "2013-05-03", "2013-05-04 07:59:59", true, day_start: 2
510
- end
511
-
512
- def test_test_day_start_of_day_with_time_zone_day_start_2am
513
- assert_result_date :day, "2013-05-03", "2013-05-03 09:00:00", true, day_start: 2
514
- end
515
-
516
- # week
517
-
518
- def test_week_end_of_week
519
- assert_result_date :week, "2013-03-17", "2013-03-23 23:59:59"
520
- end
521
-
522
- def test_week_start_of_week
523
- assert_result_date :week, "2013-03-24", "2013-03-24 00:00:00"
524
- end
525
-
526
- def test_week_end_of_week_with_time_zone
527
- assert_result_date :week, "2013-03-10", "2013-03-17 06:59:59", true
528
- end
529
-
530
- def test_week_start_of_week_with_time_zone
531
- assert_result_date :week, "2013-03-17", "2013-03-17 07:00:00", true
532
- end
533
-
534
- # week starting on monday
535
-
536
- def test_week_end_of_week_mon
537
- assert_result_date :week, "2013-03-18", "2013-03-24 23:59:59", false, week_start: :mon
538
- end
539
-
540
- def test_week_start_of_week_mon
541
- assert_result_date :week, "2013-03-25", "2013-03-25 00:00:00", false, week_start: :mon
542
- end
543
-
544
- def test_week_end_of_week_with_time_zone_mon
545
- assert_result_date :week, "2013-03-11", "2013-03-18 06:59:59", true, week_start: :mon
546
- end
547
-
548
- def test_week_start_of_week_with_time_zone_mon
549
- assert_result_date :week, "2013-03-18", "2013-03-18 07:00:00", true, week_start: :mon
550
- end
551
-
552
- # week starting on saturday
553
-
554
- def test_week_end_of_week_sat
555
- assert_result_date :week, "2013-03-16", "2013-03-22 23:59:59", false, week_start: :sat
556
- end
557
-
558
- def test_week_start_of_week_sat
559
- assert_result_date :week, "2013-03-23", "2013-03-23 00:00:00", false, week_start: :sat
560
- end
561
-
562
- def test_week_end_of_week_with_time_zone_sat
563
- assert_result_date :week, "2013-03-09", "2013-03-16 06:59:59", true, week_start: :sat
564
- end
565
-
566
- def test_week_start_of_week_with_time_zone_sat
567
- assert_result_date :week, "2013-03-16", "2013-03-16 07:00:00", true, week_start: :sat
568
- end
569
-
570
- # week starting at 2am
571
-
572
- def test_week_end_of_week_day_start_2am
573
- assert_result_date :week, "2013-03-17", "2013-03-24 01:59:59", false, day_start: 2
574
- end
575
-
576
- def test_week_start_of_week_day_start_2am
577
- assert_result_date :week, "2013-03-17", "2013-03-17 02:00:00", false, day_start: 2
578
- end
579
-
580
- def test_week_end_of_week_day_with_time_zone_start_2am
581
- assert_result_date :week, "2013-03-17", "2013-03-24 08:59:59", true, day_start: 2
582
- end
583
-
584
- def test_week_start_of_week_day_with_time_zone_start_2am
585
- assert_result_date :week, "2013-03-17", "2013-03-17 09:00:00", true, day_start: 2
586
- end
587
-
588
- # month
589
-
590
- def test_month_end_of_month
591
- assert_result_date :month, "2013-05-01", "2013-05-31 23:59:59"
592
- end
593
-
594
- def test_month_start_of_month
595
- assert_result_date :month, "2013-06-01", "2013-06-01 00:00:00"
596
- end
597
-
598
- def test_month_end_of_month_with_time_zone
599
- assert_result_date :month, "2013-05-01", "2013-06-01 06:59:59", true
600
- end
601
-
602
- def test_month_start_of_month_with_time_zone
603
- assert_result_date :month, "2013-06-01", "2013-06-01 07:00:00", true
604
- end
605
-
606
- # month starts at 2am
607
-
608
- def test_month_end_of_month_day_start_2am
609
- assert_result_date :month, "2013-03-01", "2013-04-01 01:59:59", false, day_start: 2
610
- end
611
-
612
- def test_month_start_of_month_day_start_2am
613
- assert_result_date :month, "2013-03-01", "2013-03-01 02:00:00", false, day_start: 2
614
- end
615
-
616
- def test_month_end_of_month_with_time_zone_day_start_2am
617
- assert_result_date :month, "2013-03-01", "2013-04-01 08:59:59", true, day_start: 2
618
- end
619
-
620
- def test_month_start_of_month_with_time_zone_day_start_2am
621
- assert_result_date :month, "2013-03-01", "2013-03-01 10:00:00", true, day_start: 2
622
- end
623
-
624
- # quarter
625
-
626
- def test_quarter_end_of_quarter
627
- assert_result_date :quarter, "2013-04-01", "2013-06-30 23:59:59"
628
- end
629
-
630
- def test_quarter_start_of_quarter
631
- assert_result_date :quarter, "2013-04-01", "2013-04-01 00:00:00"
632
- end
633
-
634
- def test_quarter_end_of_quarter_with_time_zone
635
- assert_result_date :quarter, "2013-04-01", "2013-07-01 06:59:59", true
636
- end
637
-
638
- def test_quarter_start_of_quarter_with_time_zone
639
- assert_result_date :quarter, "2013-04-01", "2013-04-01 07:00:00", true
640
- end
641
-
642
- # quarter starts at 2am
643
-
644
- def test_quarter_end_of_quarter_day_start_2am
645
- assert_result_date :quarter, "2013-04-01", "2013-07-01 01:59:59", false, day_start: 2
646
- end
647
-
648
- def test_quarter_start_of_quarter_day_start_2am
649
- assert_result_date :quarter, "2013-04-01", "2013-04-01 02:00:00", false, day_start: 2
650
- end
651
-
652
- def test_quarter_end_of_quarter_with_time_zone_day_start_2am
653
- assert_result_date :quarter, "2013-01-01", "2013-04-01 08:59:59", true, day_start: 2
654
- end
655
-
656
- def test_quarter_start_of_quarter_with_time_zone_day_start_2am
657
- assert_result_date :quarter, "2013-01-01", "2013-01-01 10:00:00", true, day_start: 2
658
- end
659
-
660
- # year
661
-
662
- def test_year_end_of_year
663
- assert_result_date :year, "2013-01-01", "2013-12-31 23:59:59"
664
- end
665
-
666
- def test_year_start_of_year
667
- assert_result_date :year, "2014-01-01", "2014-01-01 00:00:00"
668
- end
669
-
670
- def test_year_end_of_year_with_time_zone
671
- assert_result_date :year, "2013-01-01", "2014-01-01 07:59:59", true
672
- end
673
-
674
- def test_year_start_of_year_with_time_zone
675
- assert_result_date :year, "2014-01-01", "2014-01-01 08:00:00", true
676
- end
677
-
678
- # year starts at 2am
679
-
680
- def test_year_end_of_year_day_start_2am
681
- assert_result_date :year, "2013-01-01", "2014-01-01 01:59:59", false, day_start: 2
682
- end
683
-
684
- def test_year_start_of_year_day_start_2am
685
- assert_result_date :year, "2013-01-01", "2013-01-01 02:00:00", false, day_start: 2
686
- end
687
-
688
- def test_year_end_of_year_with_time_zone_day_start_2am
689
- assert_result_date :year, "2013-01-01", "2014-01-01 09:59:59", true, day_start: 2
690
- end
691
-
692
- def test_year_start_of_year_with_time_zone_day_start_2am
693
- assert_result_date :year, "2013-01-01", "2013-01-01 10:00:00", true, day_start: 2
694
- end
695
-
696
- # hour of day
697
-
698
- def test_hour_of_day_end_of_hour
699
- assert_result :hour_of_day, 0, "2013-01-01 00:59:59"
700
- end
701
-
702
- def test_hour_of_day_start_of_hour
703
- assert_result :hour_of_day, 1, "2013-01-01 01:00:00"
704
- end
705
-
706
- def test_hour_of_day_end_of_hour_with_time_zone
707
- assert_result :hour_of_day, 0, "2013-01-01 08:59:59", true
708
- end
709
-
710
- def test_hour_of_day_start_of_hour_with_time_zone
711
- assert_result :hour_of_day, 1, "2013-01-01 09:00:00", true
712
- end
713
-
714
- # hour of day starts at 2am
715
-
716
- def test_hour_of_day_end_of_day_day_start_2am
717
- assert_result :hour_of_day, 23, "2013-01-01 01:59:59", false, day_start: 2
718
- end
719
-
720
- def test_hour_of_day_start_of_day_day_start_2am
721
- assert_result :hour_of_day, 0, "2013-01-01 02:00:00", false, day_start: 2
722
- end
723
-
724
- def test_hour_of_day_end_of_day_with_time_zone_day_start_2am
725
- assert_result :hour_of_day, 23, "2013-01-01 09:59:59", true, day_start: 2
726
- end
727
-
728
- def test_hour_of_day_start_of_day_with_time_zone_day_start_2am
729
- assert_result :hour_of_day, 0, "2013-01-01 10:00:00", true, day_start: 2
730
- end
731
-
732
- # minute of hour
733
-
734
- def test_minute_of_hour_end_of_hour
735
- assert_result :minute_of_hour, 59, "2017-02-09 23:59:59"
736
- end
737
-
738
- def test_minute_of_hour_beginning_of_hour
739
- assert_result :minute_of_hour, 0, "2017-02-09 00:00:00"
740
- end
741
-
742
- # day of week
743
-
744
- def test_day_of_week_end_of_day
745
- assert_result :day_of_week, 2, "2013-01-01 23:59:59"
746
- end
747
-
748
- def test_day_of_week_start_of_day
749
- assert_result :day_of_week, 3, "2013-01-02 00:00:00"
750
- end
751
-
752
- def test_day_of_week_end_of_week_with_time_zone
753
- assert_result :day_of_week, 2, "2013-01-02 07:59:59", true
754
- end
755
-
756
- def test_day_of_week_start_of_week_with_time_zone
757
- assert_result :day_of_week, 3, "2013-01-02 08:00:00", true
758
- end
759
-
760
- # day of week starts at 2am
761
-
762
- def test_day_of_week_end_of_day_day_start_2am
763
- assert_result :day_of_week, 3, "2013-01-03 01:59:59", false, day_start: 2
764
- end
765
-
766
- def test_day_of_week_start_of_day_day_start_2am
767
- assert_result :day_of_week, 3, "2013-01-02 02:00:00", false, day_start: 2
768
- end
769
-
770
- def test_day_of_week_end_of_day_with_time_zone_day_start_2am
771
- assert_result :day_of_week, 3, "2013-01-03 09:59:59", true, day_start: 2
772
- end
773
-
774
- def test_day_of_week_start_of_day_with_time_zone_day_start_2am
775
- assert_result :day_of_week, 3, "2013-01-02 10:00:00", true, day_start: 2
776
- end
777
-
778
- # day of week week start monday
779
-
780
- def test_day_of_week_end_of_day_week_start_mon
781
- assert_result :day_of_week, 1, "2013-01-01 23:59:59", false, week_start: :mon
782
- end
783
-
784
- def test_day_of_week_start_of_day_week_start_mon
785
- assert_result :day_of_week, 2, "2013-01-02 00:00:00", false, week_start: :mon
786
- end
787
-
788
- def test_day_of_week_end_of_week_with_time_zone_week_start_mon
789
- assert_result :day_of_week, 1, "2013-01-02 07:59:59", true, week_start: :mon
790
- end
791
-
792
- def test_day_of_week_start_of_week_with_time_zone_week_start_mon
793
- assert_result :day_of_week, 2, "2013-01-02 08:00:00", true, week_start: :mon
794
- end
795
-
796
- # day of month
797
-
798
- def test_day_of_month_end_of_day
799
- assert_result :day_of_month, 31, "2013-01-31 23:59:59"
800
- end
801
-
802
- def test_day_of_month_end_of_day_feb_leap_year
803
- assert_result :day_of_month, 29, "2012-02-29 23:59:59"
804
- end
805
-
806
- def test_day_of_month_start_of_day
807
- assert_result :day_of_month, 3, "2013-01-03 00:00:00"
808
- end
809
-
810
- def test_day_of_month_end_of_day_with_time_zone
811
- assert_result :day_of_month, 31, "2013-02-01 07:59:59", true
812
- end
813
-
814
- def test_day_of_month_start_of_day_with_time_zone
815
- assert_result :day_of_month, 1, "2013-01-01 08:00:00", true
816
- end
817
-
818
- # day of month starts at 2am
819
-
820
- def test_day_of_month_end_of_day_day_start_2am
821
- assert_result :day_of_month, 31, "2013-01-01 01:59:59", false, day_start: 2
822
- end
823
-
824
- def test_day_of_month_start_of_day_day_start_2am
825
- assert_result :day_of_month, 1, "2013-01-01 02:00:00", false, day_start: 2
826
- end
827
-
828
- def test_day_of_month_end_of_day_with_time_zone_day_start_2am
829
- assert_result :day_of_month, 31, "2013-01-01 09:59:59", true, day_start: 2
830
- end
831
-
832
- def test_day_of_month_start_of_day_with_time_zone_day_start_2am
833
- assert_result :day_of_month, 1, "2013-01-01 10:00:00", true, day_start: 2
834
- end
835
-
836
- # month of year
837
-
838
- def test_month_of_year_end_of_month
839
- assert_result :month_of_year, 1, "2013-01-31 23:59:59"
840
- end
841
-
842
- def test_month_of_year_start_of_month
843
- assert_result :month_of_year, 1, "2013-01-01 00:00:00"
844
- end
845
-
846
- def test_month_of_year_end_of_month_with_time_zone
847
- assert_result :month_of_year, 1, "2013-02-01 07:59:59", true
848
- end
849
-
850
- def test_month_of_year_start_of_month_with_time_zone
851
- assert_result :month_of_year, 1, "2013-01-01 08:00:00", true
852
- end
853
-
854
- # month of year starts at 2am
855
-
856
- def test_month_of_year_end_of_month_day_start_2am
857
- assert_result :month_of_year, 12, "2013-01-01 01:59:59", false, day_start: 2
858
- end
859
-
860
- def test_month_of_year_start_of_month_day_start_2am
861
- assert_result :month_of_year, 1, "2013-01-01 02:00:00", false, day_start: 2
862
- end
863
-
864
- def test_month_of_year_end_of_month_with_time_zone_day_start_2am
865
- assert_result :month_of_year, 12, "2013-01-01 09:59:59", true, day_start: 2
866
- end
867
-
868
- def test_month_of_year_start_of_month_with_time_zone_day_start_2am
869
- assert_result :month_of_year, 1, "2013-01-01 10:00:00", true, day_start: 2
870
- end
871
-
872
- # zeros
873
-
874
- def test_zeros_second
875
- assert_zeros :second, "2013-05-01 00:00:01 UTC", ["2013-05-01 00:00:00 UTC", "2013-05-01 00:00:01 UTC", "2013-05-01 00:00:02 UTC"], "2013-05-01 00:00:00.999 UTC", "2013-05-01 00:00:02 UTC"
876
- end
877
-
878
- def test_zeros_minute
879
- assert_zeros :minute, "2013-05-01 00:01:00 UTC", ["2013-05-01 00:00:00 UTC", "2013-05-01 00:01:00 UTC", "2013-05-01 00:02:00 UTC"], "2013-05-01 00:00:59 UTC", "2013-05-01 00:02:00 UTC"
880
- end
881
-
882
- def test_zeros_hour
883
- assert_zeros :hour, "2013-05-01 04:01:01 UTC", ["2013-05-01 03:00:00 UTC", "2013-05-01 04:00:00 UTC", "2013-05-01 05:00:00 UTC"], "2013-05-01 03:59:59 UTC", "2013-05-01 05:00:00 UTC"
884
- end
885
-
886
- def test_zeros_day
887
- assert_zeros_date :day, "2013-05-01 20:00:00 UTC", ["2013-04-30", "2013-05-01", "2013-05-02"], "2013-04-30 00:00:00 UTC", "2013-05-02 23:59:59 UTC"
888
- end
889
-
890
- def test_zeros_day_time_zone
891
- assert_zeros_date :day, "2013-05-01 20:00:00 PDT", ["2013-04-30", "2013-05-01", "2013-05-02"], "2013-04-30 00:00:00 PDT", "2013-05-02 23:59:59 PDT", true
892
- end
893
-
894
- def test_zeros_week
895
- assert_zeros_date :week, "2013-05-01 20:00:00 UTC", ["2013-04-21", "2013-04-28", "2013-05-05"], "2013-04-27 23:59:59 UTC", "2013-05-11 23:59:59 UTC"
896
- end
897
-
898
- def test_zeros_week_time_zone
899
- assert_zeros_date :week, "2013-05-01 20:00:00 PDT", ["2013-04-21", "2013-04-28", "2013-05-05"], "2013-04-27 23:59:59 PDT", "2013-05-11 23:59:59 PDT", true
900
- end
901
-
902
- def test_zeros_week_mon
903
- assert_zeros_date :week, "2013-05-01 20:00:00 UTC", ["2013-04-22", "2013-04-29", "2013-05-06"], "2013-04-27 23:59:59 UTC", "2013-05-11 23:59:59 UTC", false, week_start: :mon
904
- end
905
-
906
- def test_zeros_week_time_zone_mon
907
- assert_zeros_date :week, "2013-05-01 20:00:00 PDT", ["2013-04-22", "2013-04-29", "2013-05-06"], "2013-04-27 23:59:59 PDT", "2013-05-11 23:59:59 PDT", true, week_start: :mon
908
- end
909
-
910
- def test_zeros_week_sat
911
- assert_zeros_date :week, "2013-05-01 20:00:00 UTC", ["2013-04-20", "2013-04-27", "2013-05-04"], "2013-04-26 23:59:59 UTC", "2013-05-10 23:59:59 UTC", false, week_start: :sat
912
- end
913
-
914
- def test_zeros_week_time_zone_sat
915
- assert_zeros_date :week, "2013-05-01 20:00:00 PDT", ["2013-04-20", "2013-04-27", "2013-05-04"], "2013-04-26 23:59:59 PDT", "2013-05-10 23:59:59 PDT", true, week_start: :sat
916
- end
917
-
918
- def test_zeros_month
919
- assert_zeros_date :month, "2013-04-16 20:00:00 UTC", ["2013-03-01", "2013-04-01", "2013-05-01"], "2013-03-01", "2013-05-31 23:59:59 UTC"
920
- end
921
-
922
- def test_zeros_month_time_zone
923
- assert_zeros_date :month, "2013-04-16 20:00:00 PDT", ["2013-03-01", "2013-04-01", "2013-05-01"], "2013-03-01 00:00:00 PST", "2013-05-31 23:59:59 PDT", true
924
- end
925
-
926
- def test_zeros_quarter
927
- assert_zeros_date :quarter, "2013-04-16 20:00:00 UTC", ["2013-01-01", "2013-04-01", "2013-07-01"], "2013-01-01", "2013-09-30 23:59:59 UTC"
928
- end
929
-
930
- def test_zeros_quarter_time_zone
931
- assert_zeros_date :quarter, "2013-04-16 20:00:00 PDT", ["2013-01-01", "2013-04-01", "2013-07-01"], "2013-01-01 00:00:00 PST", "2013-09-30 23:59:59 PDT", true
932
- end
933
-
934
- def test_zeros_year
935
- assert_zeros_date :year, "2013-04-16 20:00:00 UTC", ["2012-01-01", "2013-01-01", "2014-01-01"], "2012-01-01", "2014-12-31 23:59:59 UTC"
936
- end
937
-
938
- def test_zeros_year_time_zone
939
- assert_zeros_date :year, "2013-04-16 20:00:00 PDT", ["2012-01-01 00:00:00 PST", "2013-01-01 00:00:00 PST", "2014-01-01 00:00:00 PST"], "2012-01-01 00:00:00 PST", "2014-12-31 23:59:59 PST", true
940
- end
941
-
942
- def test_zeros_day_of_week
943
- create_user "2013-05-01"
944
- expected = {}
945
- 7.times do |n|
946
- expected[n] = n == 3 ? 1 : 0
947
- end
948
- assert_equal expected, call_method(:day_of_week, :created_at, {series: true})
949
- end
950
-
951
- def test_zeros_hour_of_day
952
- create_user "2013-05-01 20:00:00 UTC"
953
- expected = {}
954
- 24.times do |n|
955
- expected[n] = n == 20 ? 1 : 0
956
- end
957
- assert_equal expected, call_method(:hour_of_day, :created_at, {series: true})
958
- end
959
-
960
- def test_zeros_minute_of_hour
961
- create_user "2017-02-09 20:05:00 UTC"
962
- expected = {}
963
- 60.times do |n|
964
- expected[n] = n == 5 ? 1 : 0
965
- end
966
- assert_equal expected, call_method(:minute_of_hour, :created_at, {series: true})
967
- end
968
-
969
- def test_zeros_day_of_month
970
- create_user "1978-12-18"
971
- expected = {}
972
- (1..31).each do |n|
973
- expected[n] = n == 18 ? 1 : 0
974
- end
975
- assert_equal expected, call_method(:day_of_month, :created_at, {series: true})
976
- end
977
-
978
- def test_zeros_month_of_year
979
- create_user "2013-05-01"
980
- expected = {}
981
- (1..12).each do |n|
982
- expected[n] = n == 5 ? 1 : 0
983
- end
984
- assert_equal expected, call_method(:month_of_year, :created_at, {series: true})
985
- end
986
-
987
- def test_zeros_excludes_end
988
- create_user "2013-05-02"
989
- expected = {
990
- Date.parse("2013-05-01") => 0
991
- }
992
- assert_equal expected, call_method(:day, :created_at, range: Date.parse("2013-05-01")...Date.parse("2013-05-02"), series: true)
993
- end
994
-
995
- def test_zeros_datetime
996
- create_user "2013-05-01"
997
- expected = {
998
- Date.parse("2013-05-01") => 1
999
- }
1000
- assert_equal expected, call_method(:day, :created_at, range: DateTime.parse("2013-05-01")..DateTime.parse("2013-05-01"), series: true)
1001
- end
1002
-
1003
- def test_zeros_null_value
1004
- create_user nil
1005
- assert_equal 0, call_method(:hour_of_day, :created_at, range: true, series: true)[0]
1006
- end
1007
-
1008
- def test_zeroes_range_true
1009
- create_user "2013-05-01"
1010
- create_user "2013-05-03"
1011
- expected = {
1012
- Date.parse("2013-05-01") => 1,
1013
- Date.parse("2013-05-02") => 0,
1014
- Date.parse("2013-05-03") => 1
1015
- }
1016
- assert_equal expected, call_method(:day, :created_at, range: true, series: true)
1017
- end
1018
-
1019
- # week_start
1020
-
1021
- def test_week_start
1022
- Groupdate.week_start = :mon
1023
- assert_result_date :week, "2013-03-18", "2013-03-24 23:59:59"
1024
- end
1025
-
1026
- def test_week_start_and_start_option
1027
- Groupdate.week_start = :mon
1028
- assert_result_date :week, "2013-03-16", "2013-03-22 23:59:59", false, week_start: :sat
1029
- end
1030
-
1031
- # misc
1032
-
1033
- def test_order_hour_of_day_reverse_option
1034
- assert_equal 23, call_method(:hour_of_day, :created_at, reverse: true, series: true).keys.first
1035
- end
1036
-
1037
- def test_time_zone
1038
- create_user "2013-05-01"
1039
- time_zone = "Pacific Time (US & Canada)"
1040
- assert_equal time_zone, call_method(:hour, :created_at, time_zone: time_zone).keys.first.time_zone.name
1041
- end
1042
-
1043
- def test_format_day
1044
- create_user "2014-03-01"
1045
- assert_format :day, "March 1, 2014", "%B %-e, %Y"
1046
- end
1047
-
1048
- def test_format_month
1049
- create_user "2014-03-01"
1050
- assert_format :month, "March 2014", "%B %Y"
1051
- end
1052
-
1053
- def test_format_quarter
1054
- create_user "2014-03-05"
1055
- assert_format :quarter, "January 1, 2014", "%B %-e, %Y"
1056
- end
1057
-
1058
- def test_format_year
1059
- create_user "2014-03-01"
1060
- assert_format :year, "2014", "%Y"
1061
- end
1062
-
1063
- def test_format_hour_of_day
1064
- create_user "2014-03-01"
1065
- assert_format :hour_of_day, "12 am", "%-l %P"
1066
- end
1067
-
1068
- def test_format_hour_of_day_day_start
1069
- create_user "2014-03-01"
1070
- assert_format :hour_of_day, "12 am", "%-l %P", day_start: 2
1071
- end
1072
-
1073
- def test_format_minute_of_hour
1074
- create_user "2017-02-09"
1075
- assert_format :minute_of_hour, "0", "%-M"
1076
- end
1077
-
1078
- def test_format_minute_of_hour_day_start
1079
- create_user "2017-02-09"
1080
- assert_format :minute_of_hour, "0", "%-M", day_start: 2
1081
- end
1082
-
1083
- def test_format_day_of_week
1084
- create_user "2014-03-01"
1085
- assert_format :day_of_week, "Sat", "%a"
1086
- end
1087
-
1088
- def test_format_day_of_week_day_start
1089
- create_user "2014-03-01"
1090
- assert_format :day_of_week, "Fri", "%a", day_start: 2
1091
- end
1092
-
1093
- def test_format_day_of_week_week_start
1094
- create_user "2014-03-01"
1095
- assert_format :day_of_week, "Sat", "%a", week_start: :mon
1096
- end
1097
-
1098
- def test_format_day_of_week_week_start
1099
- assert_equal "Mon", call_method(:day_of_week, :created_at, week_start: :mon, format: "%a", series: true).keys.first
1100
- end
1101
-
1102
- def test_format_day_of_month
1103
- create_user "2014-03-01"
1104
- assert_format :day_of_month, " 1", "%e"
1105
- end
1106
-
1107
- def test_format_month_of_year
1108
- create_user "2014-01-01"
1109
- assert_format :month_of_year, "Jan", "%b"
1110
- end
1111
-
1112
- # date column
1113
-
1114
- def test_date_column
1115
- expected = {
1116
- Date.parse("2013-05-03") => 1
1117
- }
1118
- assert_equal expected, result(:day, "2013-05-03", false)
1119
- end
1120
-
1121
- def test_date_column_with_time_zone
1122
- expected = {
1123
- Date.parse("2013-05-02") => 1
1124
- }
1125
- assert_equal expected, result(:day, "2013-05-03", true)
1126
- end
1127
-
1128
- def test_date_column_with_time_zone_false
1129
- Time.zone = pt
1130
- create_user "2013-05-03"
1131
- expected = {
1132
- Date.parse("2013-05-03") => 1
1133
- }
1134
- assert_equal expected, call_method(:day, :created_at, time_zone: false)
1135
- ensure
1136
- Time.zone = nil
1137
- end
1138
-
1139
- # date range
1140
-
1141
- def test_date_range
1142
- ENV["TZ"] = "Europe/Oslo"
1143
- expected = {
1144
- Date.parse("2013-05-01") => 0,
1145
- Date.parse("2013-05-02") => 0,
1146
- Date.parse("2013-05-03") => 0
1147
- }
1148
- assert_equal expected, call_method(:day, :created_at, series: true, range: Date.parse("2013-05-01")..Date.parse("2013-05-03"))
1149
- ensure
1150
- ENV["TZ"] = "UTC"
1151
- end
1152
-
1153
- def test_date_range_exclude_end
1154
- ENV["TZ"] = "Europe/Oslo"
1155
- expected = {
1156
- Date.parse("2013-05-01") => 0,
1157
- Date.parse("2013-05-02") => 0
1158
- }
1159
- assert_equal expected, call_method(:day, :created_at, series: true, range: Date.parse("2013-05-01")...Date.parse("2013-05-03"))
1160
- ensure
1161
- ENV["TZ"] = "UTC"
1162
- end
1163
-
1164
- # day start
1165
-
1166
- def test_day_start_decimal_end_of_day
1167
- assert_result_date :day, "2013-05-03", "2013-05-04 02:29:59", false, day_start: 2.5
1168
- end
1169
-
1170
- def test_day_start_decimal_start_of_day
1171
- assert_result_date :day, "2013-05-03", "2013-05-03 02:30:00", false, day_start: 2.5
1172
- end
1173
-
1174
- private
1175
-
1176
- # helpers
1177
-
1178
- def assert_format(method, expected, format, options = {})
1179
- assert_equal({expected => 1}, call_method(method, :created_at, options.merge(format: format, series: false)))
1180
- end
1181
-
1182
- def assert_result_time(method, expected, time_str, time_zone = false, options = {})
1183
- expected = {utc.parse(expected).in_time_zone(time_zone ? "Pacific Time (US & Canada)" : utc) => 1}
1184
- assert_equal expected, result(method, time_str, time_zone, options)
1185
- end
1186
-
1187
- def assert_result_date(method, expected_str, time_str, time_zone = false, options = {})
1188
- create_user time_str
1189
- expected = {Date.parse(expected_str) => 1}
1190
- assert_equal expected, call_method(method, :created_at, options.merge(time_zone: time_zone ? "Pacific Time (US & Canada)" : nil))
1191
- expected = {(time_zone ? pt : utc).parse(expected_str) + options[:day_start].to_f.hours => 1}
1192
- assert_equal expected, call_method(method, :created_at, options.merge(dates: false, time_zone: time_zone ? "Pacific Time (US & Canada)" : nil))
1193
- # assert_equal expected, call_method(method, :created_on, options.merge(time_zone: time_zone ? "Pacific Time (US & Canada)" : nil))
1194
- end
1195
-
1196
- def assert_result(method, expected, time_str, time_zone = false, options = {})
1197
- assert_equal 1, result(method, time_str, time_zone, options)[expected]
1198
- end
1199
-
1200
- def result(method, time_str, time_zone = false, options = {})
1201
- create_user time_str
1202
- call_method(method, :created_at, options.merge(time_zone: time_zone ? "Pacific Time (US & Canada)" : nil))
1203
- end
1204
-
1205
- def assert_zeros(method, created_at, keys, range_start, range_end, time_zone = nil, options = {})
1206
- create_user created_at
1207
- expected = {}
1208
- keys.each_with_index do |key, i|
1209
- expected[utc.parse(key).in_time_zone(time_zone ? "Pacific Time (US & Canada)" : utc)] = i == 1 ? 1 : 0
1210
- end
1211
- assert_equal expected, call_method(method, :created_at, options.merge(series: true, time_zone: time_zone ? "Pacific Time (US & Canada)" : nil, range: Time.parse(range_start)..Time.parse(range_end)))
1212
- end
1213
-
1214
- def assert_zeros_date(method, created_at, keys, range_start, range_end, time_zone = nil, options = {})
1215
- create_user created_at
1216
- expected = {}
1217
- keys.each_with_index do |key, i|
1218
- expected[Date.parse(key)] = i == 1 ? 1 : 0
1219
- end
1220
- assert_equal expected, call_method(method, :created_at, options.merge(series: true, time_zone: time_zone ? "Pacific Time (US & Canada)" : nil, range: Time.parse(range_start)..Time.parse(range_end)))
1221
- end
1222
-
1223
- def this_quarters_month
1224
- Time.now.beginning_of_quarter.month
1225
- end
1226
-
1227
- def this_year
1228
- Time.now.year
1229
- end
1230
-
1231
- def this_month
1232
- Time.now.month
1233
- end
1234
-
1235
- def utc
1236
- ActiveSupport::TimeZone["UTC"]
1237
- end
1238
-
1239
- def pt
1240
- ActiveSupport::TimeZone["Pacific Time (US & Canada)"]
1241
- end
1242
-
1243
- def brasilia
1244
- ActiveSupport::TimeZone["Brasilia"]
1245
- end
1246
- end