aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/arel/nodes/extract_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/test/cases/arel/nodes/extract_test.rb')
-rw-r--r--activerecord/test/cases/arel/nodes/extract_test.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/activerecord/test/cases/arel/nodes/extract_test.rb b/activerecord/test/cases/arel/nodes/extract_test.rb
new file mode 100644
index 0000000000..f6dc1626a4
--- /dev/null
+++ b/activerecord/test/cases/arel/nodes/extract_test.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+require_relative '../helper'
+
+class Arel::Nodes::ExtractTest < Arel::Spec
+ it "should extract field" do
+ table = Arel::Table.new :users
+ table[:timestamp].extract('date').to_sql.must_be_like %{
+ EXTRACT(DATE FROM "users"."timestamp")
+ }
+ end
+
+ describe "as" do
+ it 'should alias the extract' do
+ table = Arel::Table.new :users
+ table[:timestamp].extract('date').as('foo').to_sql.must_be_like %{
+ EXTRACT(DATE FROM "users"."timestamp") AS foo
+ }
+ end
+
+ it 'should not mutate the extract' do
+ table = Arel::Table.new :users
+ extract = table[:timestamp].extract('date')
+ before = extract.dup
+ extract.as('foo')
+ assert_equal extract, before
+ end
+ end
+
+ describe 'equality' do
+ it 'is equal with equal ivars' do
+ table = Arel::Table.new :users
+ array = [table[:attr].extract('foo'), table[:attr].extract('foo')]
+ assert_equal 1, array.uniq.size
+ end
+
+ it 'is not equal with different ivars' do
+ table = Arel::Table.new :users
+ array = [table[:attr].extract('foo'), table[:attr].extract('bar')]
+ assert_equal 2, array.uniq.size
+ end
+ end
+end