test/groupdate_test.rb in groupdate-0.1.1 vs test/groupdate_test.rb in groupdate-0.1.2
- old
+ new
@@ -1,9 +1,9 @@
+require "bundler/setup"
+Bundler.require(:default)
require "minitest/autorun"
require "minitest/pride"
-require "active_record"
-require "groupdate"
require "logger"
# for debugging
# ActiveRecord::Base.logger = Logger.new(STDOUT)
@@ -29,104 +29,118 @@
User.delete_all
end
it "works!" do
[
- {name: "Andrew", score: 1, created_at: Time.parse("2013-04-01 00:00:10.200 UTC")},
- {name: "Jordan", score: 2, created_at: Time.parse("2013-04-01 00:00:10.200 UTC")},
- {name: "Nick", score: 3, created_at: Time.parse("2013-04-02 00:00:20.800 UTC")}
+ {name: "Andrew", score: 1, created_at: Time.parse("2013-04-01 00:00:00 UTC")},
+ {name: "Jordan", score: 2, created_at: Time.parse("2013-04-01 00:00:00 UTC")},
+ {name: "Nick", score: 3, created_at: Time.parse("2013-04-02 00:00:00 UTC")}
].each{|u| User.create!(u) }
assert_equal(
- {"2013-04-01 00:00:00+00".to_time => 1, "2013-04-02 00:00:00+00".to_time => 1},
+ {
+ time_key("2013-04-01 00:00:00 UTC") => 1,
+ time_key("2013-04-02 00:00:00 UTC") => 1
+ },
User.where("score > 1").group_by_day(:created_at).count
)
end
+ it "doesn't throw exception with order" do
+ User.group_by_day(:created_at).order("group_field desc").limit(20).count == {}
+ end
+
it "group_by_second" do
- create_user "2013-04-01 00:00:01 UTC"
- assert_equal({"2013-04-01 00:00:01+00".to_time => 1}, User.group_by_second(:created_at).count)
+ assert_group :second, "2013-04-01 00:00:01 UTC", "2013-04-01 00:00:01 UTC"
end
it "group_by_minute" do
- create_user "2013-04-01 00:01:01 UTC"
- assert_equal({"2013-04-01 00:01:00+00".to_time => 1}, User.group_by_minute(:created_at).count)
+ assert_group :minute, "2013-04-01 00:01:01 UTC", "2013-04-01 00:01:00 UTC"
end
it "group_by_hour" do
- create_user "2013-04-01 01:01:01 UTC"
- assert_equal({"2013-04-01 01:00:00+00".to_time => 1}, User.group_by_hour(:created_at).count)
+ assert_group :hour, "2013-04-01 01:01:01 UTC", "2013-04-01 01:00:00 UTC"
end
it "group_by_day" do
- create_user "2013-04-01 01:01:01 UTC"
- assert_equal({"2013-04-01 00:00:00+00".to_time => 1}, User.group_by_day(:created_at).count)
+ assert_group :day, "2013-04-01 01:01:01 UTC", "2013-04-01 00:00:00 UTC"
end
it "group_by_day with time zone" do
- create_user "2013-04-01 01:01:01 UTC"
- assert_equal({"2013-03-31 07:00:00+00".to_time => 1}, User.group_by_day(:created_at, "Pacific Time (US & Canada)").count)
+ assert_group_tz :day, "2013-04-01 01:01:01 UTC", "2013-03-31 07:00:00 UTC"
end
it "group_by_week" do
- create_user "2013-03-17 01:01:01 UTC"
- assert_equal({"2013-03-17 00:00:00+00".to_time => 1}, User.group_by_week(:created_at).count)
+ assert_group :week, "2013-03-17 01:01:01 UTC", "2013-03-17 00:00:00 UTC"
end
it "group_by_week with time zone" do # day of DST
- create_user "2013-03-17 01:01:01 UTC"
- assert_equal({"2013-03-10 08:00:00+00".to_time => 1}, User.group_by_week(:created_at, "Pacific Time (US & Canada)").count)
+ assert_group_tz :week, "2013-03-17 01:01:01 UTC", "2013-03-10 08:00:00 UTC"
end
it "group_by_month" do
- create_user "2013-04-01 01:01:01 UTC"
- assert_equal({"2013-04-01 00:00:00+00".to_time(:utc) => 1}, User.group_by_month(:created_at).count)
+ assert_group :month, "2013-04-01 01:01:01 UTC", "2013-04-01 00:00:00 UTC"
end
it "group_by_month with time zone" do
- create_user "2013-04-01 01:01:01 UTC"
- assert_equal({"2013-03-01 08:00:00+00".to_time(:utc) => 1}, User.group_by_month(:created_at, "Pacific Time (US & Canada)").count)
+ assert_group_tz :month, "2013-04-01 01:01:01 UTC", "2013-03-01 08:00:00 UTC"
end
it "group_by_year" do
- create_user "2013-01-01 01:01:01 UTC"
- assert_equal({"2013-01-01 00:00:00+00".to_time(:utc) => 1}, User.group_by_year(:created_at).count)
+ assert_group :year, "2013-01-01 01:01:01 UTC", "2013-01-01 00:00:00 UTC"
end
it "group_by_year with time zone" do
- create_user "2013-01-01 01:01:01 UTC"
- assert_equal({"2012-01-01 08:00:00+00".to_time(:utc) => 1}, User.group_by_year(:created_at, "Pacific Time (US & Canada)").count)
+ assert_group_tz :year, "2013-01-01 01:01:01 UTC", "2012-01-01 08:00:00 UTC"
end
it "group_by_hour_of_day" do
- create_user "2013-01-01 11:00:00 UTC"
- expected = adapter == "mysql2" ? {11 => 1} : {11.0 => 1}
- assert_equal(expected, User.group_by_hour_of_day(:created_at).count)
+ assert_group_number :hour_of_day, "2013-01-01 11:00:00 UTC", 11
end
it "group_by_hour_of_day with time zone" do
- create_user "2013-01-01 11:00:00 UTC"
- expected = adapter == "mysql2" ? {3 => 1} : {3.0 => 1}
- assert_equal(expected, User.group_by_hour_of_day(:created_at, "Pacific Time (US & Canada)").count)
+ assert_group_number_tz :hour_of_day, "2013-01-01 11:00:00 UTC", 3
end
it "group_by_day_of_week" do
- create_user "2013-03-03 00:00:00 UTC"
- expected = adapter == "mysql2" ? {0 => 1} : {0.0 => 1}
- assert_equal(expected, User.group_by_day_of_week(:created_at).count)
+ assert_group_number :day_of_week, "2013-03-03 00:00:00 UTC", 0
end
it "group_by_day_of_week with time zone" do
- create_user "2013-03-03 00:00:00 UTC"
- expected = adapter == "mysql2" ? {6 => 1} : {6.0 => 1}
- assert_equal(expected, User.group_by_day_of_week(:created_at, "Pacific Time (US & Canada)").count)
+ assert_group_number_tz :day_of_week, "2013-03-03 00:00:00 UTC", 6
end
+ end
+ end
- # helper methods
+ # helper methods
- def create_user(created_at)
- User.create!(name: "Andrew", score: 1, created_at: Time.parse(created_at))
- end
+ def assert_group(method, created_at, key, time_zone = nil)
+ create_user created_at
+ assert_equal({time_key(key) => 1}, User.send(:"group_by_#{method}", :created_at, time_zone).count)
+ end
- end
+ def assert_group_tz(method, created_at, key)
+ assert_group method, created_at, key, "Pacific Time (US & Canada)"
end
+
+ def assert_group_number(method, created_at, key, time_zone = nil)
+ create_user created_at
+ assert_equal({number_key(key) => 1}, User.send(:"group_by_#{method}", :created_at, time_zone).count)
+ end
+
+ def assert_group_number_tz(method, created_at, key)
+ assert_group_number method, created_at, key, "Pacific Time (US & Canada)"
+ end
+
+ def time_key(key)
+ User.connection.adapter_name == "PostgreSQL" && ActiveRecord::VERSION::MAJOR == 3 ? Time.parse(key).strftime("%Y-%m-%d %H:%M:%S+00") : Time.parse(key)
+ end
+
+ def number_key(key)
+ User.connection.adapter_name == "PostgreSQL" ? (ActiveRecord::VERSION::MAJOR == 3 ? key.to_s : key.to_f) : key
+ end
+
+ def create_user(created_at)
+ User.create!(name: "Andrew", score: 1, created_at: Time.parse(created_at))
+ end
+
end