diff options
author | Yves Senn <yves.senn@gmail.com> | 2014-09-09 11:21:23 +0200 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2014-09-09 11:26:30 +0200 |
commit | ae9412e857a78236b359eb1b636511d07fe45cf3 (patch) | |
tree | aa29021dfe5cdbaa3b3ea72f7c8e52922b5ce393 /activerecord/test/cases | |
parent | 2dbfd7783277936c71664365a01cc20b77d6326c (diff) | |
download | rails-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.rb | 42 |
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 |