diff --git a/.gitignore b/.gitignore index 09a18c2..26dd738 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ vendor/ examples/db/*.db examples/config/database.yml db/config.yml +db/test.sqlite3 .vagrant diff --git a/db/sample.config.yml b/db/sample.config.yml index 142ea80..ee1e55b 100644 --- a/db/sample.config.yml +++ b/db/sample.config.yml @@ -24,3 +24,9 @@ postgres: host: 127.0.0.1 encoding: unicode template: template0 + +sqlite3: + adapter: sqlite3 + database: db/test.sqlite3 + pool: 5 + timeout: 5000 diff --git a/lib/database_cleaner/active_record/truncation.rb b/lib/database_cleaner/active_record/truncation.rb index 3b5756d..73f4f2d 100755 --- a/lib/database_cleaner/active_record/truncation.rb +++ b/lib/database_cleaner/active_record/truncation.rb @@ -100,6 +100,10 @@ module DatabaseCleaner end alias truncate_table delete_table + def truncate_tables(tables) + tables.each { |t| truncate_table(t) } + end + private # Returns a boolean indicating if the SQLite database is using the sqlite_sequence table. diff --git a/spec/database_cleaner/active_record/truncation/sqlite3_spec.rb b/spec/database_cleaner/active_record/truncation/sqlite3_spec.rb new file mode 100644 index 0000000..d43a57f --- /dev/null +++ b/spec/database_cleaner/active_record/truncation/sqlite3_spec.rb @@ -0,0 +1,42 @@ +require 'spec_helper' +require 'active_record' +require 'support/active_record/sqlite3_setup' +require 'database_cleaner/active_record/truncation' + +module ActiveRecord + module ConnectionAdapters + describe do + before(:all) { active_record_sqlite3_setup } + + let(:adapter) { SQLite3Adapter } + + let(:connection) do + active_record_sqlite3_connection + end + + before(:each) do + connection.truncate_tables connection.tables + end + + describe "#truncate_table" do + it "truncates the table" do + 2.times { User.create } + + connection.truncate_table('users') + User.count.should eq 0 + end + + it "resets AUTO_INCREMENT index of table" do + 2.times { User.create } + User.delete_all + + connection.truncate_table('users') + + User.create.id.should eq 1 + end + end + + end + end +end + diff --git a/spec/support/active_record/sqlite3_setup.rb b/spec/support/active_record/sqlite3_setup.rb new file mode 100644 index 0000000..cf6dc04 --- /dev/null +++ b/spec/support/active_record/sqlite3_setup.rb @@ -0,0 +1,40 @@ +require 'support/active_record/database_setup' +require 'support/active_record/schema_setup' + +module SQLite3Helper + puts "Active Record #{ActiveRecord::VERSION::STRING}, sqlite3" + + # ActiveRecord::Base.logger = Logger.new(STDERR) + + def config + db_config['sqlite3'] + end + + def create_db + @encoding = config['encoding'] || ENV['CHARSET'] || 'utf8' + begin + establish_connection(config.merge('database' => 'sqlite3', 'schema_search_path' => 'public')) + rescue Exception => e + $stderr.puts e, *(e.backtrace) + $stderr.puts "Couldn't create database for #{config.inspect}" + end + end + + def establish_connection config = config + ActiveRecord::Base.establish_connection(config) + end + + def active_record_sqlite3_setup + create_db + establish_connection + load_schema + end + + def active_record_sqlite3_connection + ActiveRecord::Base.connection + end +end + +RSpec.configure do |c| + c.include SQLite3Helper +end