mirror of
https://github.com/DatabaseCleaner/database_cleaner
synced 2023-03-27 23:22:03 -04:00
Tweak features/steps for multiple orm, and fixed a bug in the couch example models
This commit is contained in:
parent
b723ed8bda
commit
d2da58156e
11 changed files with 66 additions and 38 deletions
|
@ -1,7 +1,10 @@
|
|||
Feature: example
|
||||
In order to test DataBase Cleaner
|
||||
Here are some scenarios that rely on the DB being clean!
|
||||
|
||||
|
||||
# Background:
|
||||
# Given I have setup DatabaseCleaner to clean multiple databases
|
||||
#
|
||||
Scenario: dirty the db
|
||||
When I create a widget in one db
|
||||
And I create a widget in another db
|
||||
|
|
|
@ -2,6 +2,9 @@ Feature: example
|
|||
In order to test DataBase Cleaner
|
||||
Here are some scenarios that rely on the DB being clean!
|
||||
|
||||
# Background:
|
||||
# Given I have setup DatabaseCleaner to clean multiple orms
|
||||
|
||||
Scenario: dirty the db
|
||||
When I create a widget in one orm
|
||||
And I create a widget in another orm
|
||||
|
|
|
@ -1,15 +1,23 @@
|
|||
Given /^I have setup databasecleaner to clean multiple dbs$/ do
|
||||
DatabaseCleaner
|
||||
end
|
||||
|
||||
When /^I create a widget in one db$/ do
|
||||
Widget.establish_connection_one
|
||||
Widget.create!
|
||||
end
|
||||
|
||||
When /^I create a widget in another db$/ do
|
||||
TwinWidget.create!
|
||||
Widget.establish_connection_two
|
||||
Widget.create!
|
||||
end
|
||||
|
||||
Then /^I should see ([\d]+) widget in one db $/ do |widget_count|
|
||||
Widget.count.should == widget_count
|
||||
Then /^I should see ([\d]+) widget in one db$/ do |widget_count|
|
||||
Widget.establish_connection_one
|
||||
Widget.count.should == widget_count.to_i
|
||||
end
|
||||
|
||||
Then /^I should see ([\d]+) widget in another db$/ do |widget_count|
|
||||
TwinWidget.count.should == widget_count
|
||||
Widget.establish_connection_two
|
||||
Widget.count.should == widget_count.to_i
|
||||
end
|
|
@ -6,10 +6,10 @@ When /^I create a widget in another orm$/ do
|
|||
AnotherWidget.create!
|
||||
end
|
||||
|
||||
Then /^I should see ([\d]+) widget in one orm $/ do |widget_count|
|
||||
Widget.count.should == widget_count
|
||||
Then /^I should see ([\d]+) widget in one orm$/ do |widget_count|
|
||||
Widget.count.should == widget_count.to_i
|
||||
end
|
||||
|
||||
Then /^I should see ([\d]+) widget in another orm$/ do |widget_count|
|
||||
AnotherWidget.count.should == widget_count
|
||||
AnotherWidget.count.should == widget_count.to_i
|
||||
end
|
|
@ -3,12 +3,17 @@ Bundler.setup
|
|||
require 'spec/expectations'
|
||||
require 'ruby-debug'
|
||||
|
||||
DB_DIR = "#{File.dirname(__FILE__)}/../../db"
|
||||
|
||||
orm = ENV['ORM']
|
||||
another_orm = ENV['ANOTHER_ORM']
|
||||
strategy = ENV['STRATEGY']
|
||||
|
||||
if orm && strategy
|
||||
|
||||
$:.unshift(File.dirname(__FILE__) + '/../../../lib')
|
||||
require 'database_cleaner'
|
||||
require 'database_cleaner/cucumber'
|
||||
|
||||
begin
|
||||
require "#{File.dirname(__FILE__)}/../../lib/#{orm}_models"
|
||||
rescue LoadError => e
|
||||
|
@ -21,14 +26,20 @@ if orm && strategy
|
|||
rescue LoadError => e
|
||||
raise "You don't have the #{another_orm} ORM installed"
|
||||
end
|
||||
else
|
||||
|
||||
end
|
||||
|
||||
|
||||
$:.unshift(File.dirname(__FILE__) + '/../../../lib')
|
||||
require 'database_cleaner'
|
||||
require 'database_cleaner/cucumber'
|
||||
|
||||
DatabaseCleaner.strategy = strategy.to_sym
|
||||
|
||||
unless another_orm
|
||||
DatabaseCleaner.strategy = strategy.to_sym
|
||||
else
|
||||
DatabaseCleaner[ orm.gsub(/(.)([A-Z]+)/,'\1_\2').downcase.to_sym ].strategy = strategy.to_sym
|
||||
DatabaseCleaner[ another_orm.gsub(/(.)([A-Z]+)/,'\1_\2').downcase.to_sym ].strategy = strategy.to_sym
|
||||
end
|
||||
|
||||
else
|
||||
raise "Run 'ORM=activerecord|datamapper|mongomapper|couchpotato [ANOTHER_ORM=activerecord|datamapper|mongomapper|couchpotato] STRATEGY=transaction|truncation cucumber examples/features'"
|
||||
raise "Run 'ORM=activerecord|datamapper|mongomapper|couchpotato [ANOTHER_ORM=activerecord|datamapper|mongomapper|couchpotato] [MULTIPLE_DBS=true] STRATEGY=transaction|truncation cucumber examples/features'"
|
||||
end
|
||||
|
|
|
@ -1,34 +1,37 @@
|
|||
require 'active_record'
|
||||
db_dir = "#{File.dirname(__FILE__)}/../db"
|
||||
|
||||
ActiveRecord::Base.establish_connection(:adapter => "#{"jdbc" if defined?(JRUBY_VERSION)}sqlite3", :database => "#{db_dir}/activerecord_one.db")
|
||||
class SchemeInfo < ActiveRecord::Base
|
||||
end
|
||||
|
||||
# check to see if the schema needs resetting (when using file based db)
|
||||
begin
|
||||
|
||||
result = ActiveRecord::Base.connection.execute("SELECT version FROM schema_migrations")
|
||||
raise StandardError unless result.first["version"] == "1"
|
||||
|
||||
rescue
|
||||
["two","one"].each do |db|
|
||||
ActiveRecord::Base.establish_connection(:adapter => "#{"jdbc" if defined?(JRUBY_VERSION)}sqlite3", :database => "#{DB_DIR}/activerecord_#{db}.db")
|
||||
ActiveRecord::Base.connection.execute('DROP TABLE IF EXISTS "widgets"')
|
||||
ActiveRecord::Base.connection.execute('DROP TABLE IF EXISTS "another_widgets"')
|
||||
|
||||
ActiveRecord::Schema.define(:version => 1) do
|
||||
create_table :widgets do |t|
|
||||
t.string :name
|
||||
end
|
||||
|
||||
|
||||
create_table :another_widgets do |t|
|
||||
t.string :name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class ActiveRecordWidgetBase < ActiveRecord::Base
|
||||
def self.establish_connection_one
|
||||
establish_connection(:adapter => "#{"jdbc" if defined?(JRUBY_VERSION)}sqlite3", :database => "#{DB_DIR}/activerecord_one.db")
|
||||
end
|
||||
|
||||
def self.establish_connection_two
|
||||
establish_connection(:adapter => "#{"jdbc" if defined?(JRUBY_VERSION)}sqlite3", :database => "#{DB_DIR}/activerecord_two.db")
|
||||
end
|
||||
end
|
||||
|
||||
unless defined? Widget
|
||||
class Widget < ActiveRecord::Base
|
||||
class Widget < ActiveRecordWidgetBase
|
||||
set_table_name 'widgets'
|
||||
end
|
||||
else
|
||||
class AnotherWidget < ActiveRecord::Base
|
||||
end
|
||||
class AnotherWidget < ActiveRecordWidgetBase
|
||||
set_table_name 'another_widgets'
|
||||
end
|
||||
end
|
||||
|
|
|
@ -16,7 +16,7 @@ class CouchWidget
|
|||
end
|
||||
|
||||
def self.count
|
||||
CouchPotato.database.view(::Widget.by_name).size
|
||||
CouchPotato.database.view(self.by_name).size
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -5,9 +5,7 @@ require "dm-core"
|
|||
require "dm-validations"
|
||||
require "dm-aggregates"
|
||||
|
||||
db_dir = "#{File.dirname(__FILE__)}/../db"
|
||||
|
||||
DataMapper.setup(:default, "sqlite3:#{db_dir}/datamapper_one.db")
|
||||
DataMapper.setup(:default, "sqlite3:#{DB_DIR}/datamapper_one.db")
|
||||
|
||||
class MapperWidget
|
||||
include DataMapper::Resource
|
||||
|
|
|
@ -19,6 +19,7 @@ When "I run my scenarios that rely on a clean database" do
|
|||
end
|
||||
|
||||
When "I run my scenarios that rely on clean databases" do
|
||||
@feature_runner.multiple_databases = true
|
||||
@feature_runner.go 'example_multiple_db'
|
||||
end
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
class FeatureRunner
|
||||
attr_accessor :orm
|
||||
attr_accessor :another_orm
|
||||
attr_accessor :multiple_databases
|
||||
attr_accessor :strategy
|
||||
attr_accessor :exit_status
|
||||
attr_accessor :output
|
||||
|
@ -13,9 +14,10 @@ class FeatureRunner
|
|||
full_dir ||= File.expand_path(File.dirname(__FILE__) + "/../../examples/")
|
||||
Dir.chdir(full_dir) do
|
||||
|
||||
ENV['ORM'] = orm.downcase
|
||||
ENV['ANOTHER_ORM'] = another_orm.downcase if another_orm
|
||||
ENV['STRATEGY'] = strategy
|
||||
ENV['ORM'] = orm#.downcase
|
||||
ENV['ANOTHER_ORM'] = another_orm if another_orm#.downcase if another_orm
|
||||
ENV['MULTIPLE_DBS'] = "true" if multiple_databases
|
||||
ENV['STRATEGY'] = strategy
|
||||
|
||||
self.output = `#{"jruby -S " if defined?(JRUBY_VERSION)}cucumber features/#{feature}.feature`
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
Before do
|
||||
DatabaseCleaner.start
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue