1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Fix test failures from premature merge of #21317

Apparently I managed to forget how similar the "tests passing" and
"no status reported" merge indicators look.

Note that the previous `stubs` in test_add_index wasn't working:
the method was still called, and just happened to return false.
This commit is contained in:
Matthew Draper 2015-09-07 01:07:51 +09:30
parent 0962527953
commit f1f0a3f8d9
2 changed files with 16 additions and 5 deletions

View file

@ -101,15 +101,19 @@ module ActiveRecord
# Verifies existence of an index with a given name. # Verifies existence of an index with a given name.
def index_name_exists?(table_name, index_name, default) def index_name_exists?(table_name, index_name, default)
table = Utils.extract_schema_qualified_name(table_name.to_s)
index = Utils.extract_schema_qualified_name(index_name.to_s)
select_value(<<-SQL, 'SCHEMA').to_i > 0 select_value(<<-SQL, 'SCHEMA').to_i > 0
SELECT COUNT(*) SELECT COUNT(*)
FROM pg_class t FROM pg_class t
INNER JOIN pg_index d ON t.oid = d.indrelid INNER JOIN pg_index d ON t.oid = d.indrelid
INNER JOIN pg_class i ON d.indexrelid = i.oid INNER JOIN pg_class i ON d.indexrelid = i.oid
LEFT JOIN pg_namespace n ON n.oid = i.relnamespace
WHERE i.relkind = 'i' WHERE i.relkind = 'i'
AND i.relname = '#{index_name}' AND i.relname = '#{index.identifier}'
AND t.relname = '#{table_name}' AND t.relname = '#{table.identifier}'
AND i.relnamespace IN (SELECT oid FROM pg_namespace WHERE nspname = ANY (current_schemas(false)) ) AND n.nspname = #{index.schema ? "'#{index.schema}'" : 'ANY (current_schemas(false))'}
SQL SQL
end end
@ -450,7 +454,7 @@ module ActiveRecord
def remove_index(table_name, options = {}) #:nodoc: def remove_index(table_name, options = {}) #:nodoc:
index_name = index_name_for_remove(table_name, options) index_name = index_name_for_remove(table_name, options)
algorithm = algorithm =
if options.key?(:algorithm) if Hash === options && options.key?(:algorithm)
index_algorithms.fetch(options[:algorithm]) do index_algorithms.fetch(options[:algorithm]) do
raise ArgumentError.new("Algorithm must be one of the following: #{index_algorithms.keys.map(&:inspect).join(', ')}") raise ArgumentError.new("Algorithm must be one of the following: #{index_algorithms.keys.map(&:inspect).join(', ')}")
end end

View file

@ -25,7 +25,7 @@ class PostgresqlActiveSchemaTest < ActiveRecord::PostgreSQLTestCase
def test_add_index def test_add_index
# add_index calls index_name_exists? which can't work since execute is stubbed # add_index calls index_name_exists? which can't work since execute is stubbed
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.stubs(:index_name_exists?).returns(false) ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.send(:define_method, :index_name_exists?) { |*| false }
expected = %(CREATE UNIQUE INDEX "index_people_on_last_name" ON "people" ("last_name") WHERE state = 'active') expected = %(CREATE UNIQUE INDEX "index_people_on_last_name" ON "people" ("last_name") WHERE state = 'active')
assert_equal expected, add_index(:people, :last_name, :unique => true, :where => "state = 'active'") assert_equal expected, add_index(:people, :last_name, :unique => true, :where => "state = 'active'")
@ -49,15 +49,22 @@ class PostgresqlActiveSchemaTest < ActiveRecord::PostgreSQLTestCase
expected = %(CREATE UNIQUE INDEX "index_people_on_last_name" ON "people" USING gist ("last_name") WHERE state = 'active') expected = %(CREATE UNIQUE INDEX "index_people_on_last_name" ON "people" USING gist ("last_name") WHERE state = 'active')
assert_equal expected, add_index(:people, :last_name, :unique => true, :where => "state = 'active'", :using => :gist) assert_equal expected, add_index(:people, :last_name, :unique => true, :where => "state = 'active'", :using => :gist)
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.send :remove_method, :index_name_exists?
end end
def test_remove_index def test_remove_index
# remove_index calls index_name_exists? which can't work since execute is stubbed
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.send(:define_method, :index_name_exists?) { |*| true }
expected = %(DROP INDEX CONCURRENTLY "index_people_on_last_name") expected = %(DROP INDEX CONCURRENTLY "index_people_on_last_name")
assert_equal expected, remove_index(:people, name: "index_people_on_last_name", algorithm: :concurrently) assert_equal expected, remove_index(:people, name: "index_people_on_last_name", algorithm: :concurrently)
assert_raise ArgumentError do assert_raise ArgumentError do
add_index(:people, :last_name, algorithm: :copy) add_index(:people, :last_name, algorithm: :copy)
end end
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.send :remove_method, :index_name_exists?
end end
private private