diff options
author | Santiago Pastorino <santiago@wyeworks.com> | 2010-06-27 20:02:48 -0300 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2010-06-28 01:26:25 +0200 |
commit | 6c28959e86222a6932f9cc62bf21aad7a2f9c067 (patch) | |
tree | fa9db8fdb9c53e1aa26d375f6a5027670697a5de /activerecord/test/cases/adapters/sqlite3/copy_table_test.rb | |
parent | 3ab296fd594d9d9e8b96d12f81ac3582dd81fd1f (diff) | |
download | rails-6c28959e86222a6932f9cc62bf21aad7a2f9c067.tar.gz rails-6c28959e86222a6932f9cc62bf21aad7a2f9c067.tar.bz2 rails-6c28959e86222a6932f9cc62bf21aad7a2f9c067.zip |
Move sqlite to sqlite3 for this tests to be run only on sqlite3 adapter
Signed-off-by: José Valim <jose.valim@gmail.com>
Diffstat (limited to 'activerecord/test/cases/adapters/sqlite3/copy_table_test.rb')
-rw-r--r-- | activerecord/test/cases/adapters/sqlite3/copy_table_test.rb | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/activerecord/test/cases/adapters/sqlite3/copy_table_test.rb b/activerecord/test/cases/adapters/sqlite3/copy_table_test.rb new file mode 100644 index 0000000000..575b4806c1 --- /dev/null +++ b/activerecord/test/cases/adapters/sqlite3/copy_table_test.rb @@ -0,0 +1,80 @@ +require "cases/helper" + +class CopyTableTest < ActiveRecord::TestCase + fixtures :customers, :companies, :comments + + def setup + @connection = ActiveRecord::Base.connection + class << @connection + public :copy_table, :table_structure, :indexes + end + end + + def test_copy_table(from = 'customers', to = 'customers2', options = {}) + assert_nothing_raised {copy_table(from, to, options)} + assert_equal row_count(from), row_count(to) + + if block_given? + yield from, to, options + else + assert_equal column_names(from), column_names(to) + end + + @connection.drop_table(to) rescue nil + end + + def test_copy_table_renaming_column + test_copy_table('customers', 'customers2', + :rename => {'name' => 'person_name'}) do |from, to, options| + expected = column_values(from, 'name') + assert_equal expected, column_values(to, 'person_name') + assert expected.any?, "No values in table: #{expected.inspect}" + end + end + + def test_copy_table_with_index + test_copy_table('comments', 'comments_with_index') do + @connection.add_index('comments_with_index', ['post_id', 'type']) + test_copy_table('comments_with_index', 'comments_with_index2') do + assert_equal table_indexes_without_name('comments_with_index'), + table_indexes_without_name('comments_with_index2') + end + end + end + + def test_copy_table_without_primary_key + test_copy_table('developers_projects', 'programmers_projects') + end + + def test_copy_table_with_id_col_that_is_not_primary_key + test_copy_table('goofy_string_id', 'goofy_string_id2') do |from, to, options| + original_id = @connection.columns('goofy_string_id').detect{|col| col.name == 'id' } + copied_id = @connection.columns('goofy_string_id2').detect{|col| col.name == 'id' } + assert_equal original_id.type, copied_id.type + assert_equal original_id.sql_type, copied_id.sql_type + assert_equal original_id.limit, copied_id.limit + assert_equal original_id.primary, copied_id.primary + end + end + +protected + def copy_table(from, to, options = {}) + @connection.copy_table(from, to, {:temporary => true}.merge(options)) + end + + def column_names(table) + @connection.table_structure(table).map {|column| column['name']} + end + + def column_values(table, column) + @connection.select_all("SELECT #{column} FROM #{table} ORDER BY id").map {|row| row[column]} + end + + def table_indexes_without_name(table) + @connection.indexes('comments_with_index').delete(:name) + end + + def row_count(table) + @connection.select_one("SELECT COUNT(*) AS count FROM #{table}")['count'] + end +end |