From b0d59907f733841280095b16c98a95574b3a0938 Mon Sep 17 00:00:00 2001
From: Paul Gallagher <gallagher.paul@gmail.com>
Date: Fri, 17 Jun 2011 21:57:47 +0800
Subject: Make PostgreSQL adapter view-compatible

* amongst other things, allows meta_search to run against view-backed models
---
 .../test/cases/adapters/postgresql/schema_test.rb  |  1 -
 .../test/cases/adapters/postgresql/view_test.rb    | 49 ++++++++++++++++++++++
 2 files changed, 49 insertions(+), 1 deletion(-)
 create mode 100644 activerecord/test/cases/adapters/postgresql/view_test.rb

(limited to 'activerecord/test')

diff --git a/activerecord/test/cases/adapters/postgresql/schema_test.rb b/activerecord/test/cases/adapters/postgresql/schema_test.rb
index 8668957d5a..27e7b1a1c3 100644
--- a/activerecord/test/cases/adapters/postgresql/schema_test.rb
+++ b/activerecord/test/cases/adapters/postgresql/schema_test.rb
@@ -111,7 +111,6 @@ class SchemaTest < ActiveRecord::TestCase
     end
   end
 
-
   def test_proper_encoding_of_table_name
     assert_equal '"table_name"', @connection.quote_table_name('table_name')
     assert_equal '"table.name"', @connection.quote_table_name('"table.name"')
diff --git a/activerecord/test/cases/adapters/postgresql/view_test.rb b/activerecord/test/cases/adapters/postgresql/view_test.rb
new file mode 100644
index 0000000000..303ba9245a
--- /dev/null
+++ b/activerecord/test/cases/adapters/postgresql/view_test.rb
@@ -0,0 +1,49 @@
+require "cases/helper"
+
+class ViewTest < ActiveRecord::TestCase
+  self.use_transactional_fixtures = false
+
+  SCHEMA_NAME = 'test_schema'
+  TABLE_NAME = 'things'
+  VIEW_NAME = 'view_things'
+  COLUMNS = [
+    'id integer',
+    'name character varying(50)',
+    'email character varying(50)',
+    'moment timestamp without time zone'
+  ]
+
+  class ThingView < ActiveRecord::Base
+    set_table_name 'test_schema.view_things'
+  end
+
+  def setup
+    @connection = ActiveRecord::Base.connection
+    @connection.execute "CREATE SCHEMA #{SCHEMA_NAME} CREATE TABLE #{TABLE_NAME} (#{COLUMNS.join(',')})"
+    @connection.execute "CREATE TABLE #{SCHEMA_NAME}.\"#{TABLE_NAME}.table\" (#{COLUMNS.join(',')})"
+    @connection.execute "CREATE VIEW #{SCHEMA_NAME}.#{VIEW_NAME} AS SELECT id,name,email,moment FROM #{SCHEMA_NAME}.#{TABLE_NAME}"
+  end
+
+  def teardown
+    @connection.execute "DROP SCHEMA #{SCHEMA_NAME} CASCADE"
+  end
+
+  def test_table_exists
+    name = ThingView.table_name
+    assert @connection.table_exists?(name), "'#{name}' table should exist"
+  end
+
+  def test_column_definitions
+    assert_nothing_raised do
+      assert_equal COLUMNS, columns("#{SCHEMA_NAME}.#{VIEW_NAME}")
+    end
+  end
+
+  private
+    def columns(table_name)
+      @connection.send(:column_definitions, table_name).map do |name, type, default|
+        "#{name} #{type}" + (default ? " default #{default}" : '')
+      end
+    end
+
+end
-- 
cgit v1.2.3