aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases
diff options
context:
space:
mode:
authorYves Senn <yves.senn@gmail.com>2014-09-09 11:21:23 +0200
committerYves Senn <yves.senn@gmail.com>2014-09-09 11:26:30 +0200
commitae9412e857a78236b359eb1b636511d07fe45cf3 (patch)
treeaa29021dfe5cdbaa3b3ea72f7c8e52922b5ce393 /activerecord/test/cases
parent2dbfd7783277936c71664365a01cc20b77d6326c (diff)
downloadrails-ae9412e857a78236b359eb1b636511d07fe45cf3.tar.gz
rails-ae9412e857a78236b359eb1b636511d07fe45cf3.tar.bz2
rails-ae9412e857a78236b359eb1b636511d07fe45cf3.zip
introduce `connection.supports_views?` and basic view tests.
`AbstractAdapter#supports_views?` defaults to `false` so we have to turn it on in adapter subclasses. Currently the flag only controls test execution. /cc @yahonda
Diffstat (limited to 'activerecord/test/cases')
-rw-r--r--activerecord/test/cases/view_test.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/activerecord/test/cases/view_test.rb b/activerecord/test/cases/view_test.rb
new file mode 100644
index 0000000000..aef6ad2296
--- /dev/null
+++ b/activerecord/test/cases/view_test.rb
@@ -0,0 +1,42 @@
+require "cases/helper"
+require "models/book"
+
+if ActiveRecord::Base.connection.supports_views?
+class ViewWithPrimaryKeyTest < ActiveRecord::TestCase
+ fixtures :books
+
+ class Ebook < ActiveRecord::Base
+ self.primary_key = "id"
+ end
+
+ setup do
+ @connection = ActiveRecord::Base.connection
+ @connection.execute <<-SQL
+ CREATE VIEW ebooks
+ AS SELECT id, name, status FROM books WHERE format = 'ebook'
+ SQL
+ end
+
+ teardown do
+ @connection.execute "DROP VIEW IF EXISTS ebooks"
+ end
+
+ def test_reading
+ books = Ebook.all
+ assert_equal [books(:rfr).id], books.map(&:id)
+ assert_equal ["Ruby for Rails"], books.map(&:name)
+ end
+
+ def test_table_exists
+ skip "SQLite does not currently treat views as tables" if current_adapter?(:SQLite3Adapter)
+ view_name = Ebook.table_name
+ assert @connection.table_exists?(view_name), "'#{view_name}' table should exist"
+ end
+
+ def test_column_definitions
+ assert_equal([["id", :integer],
+ ["name", :string],
+ ["status", :integer]], Ebook.columns.map { |c| [c.name, c.type] })
+ end
+end
+end