strip down cucumber scenarios to just use the two most popular adapter gems, and reenable to validate the end-to-end UX.

This commit is contained in:
Micah Geisel 2020-04-05 12:05:02 -07:00 committed by Micah Geisel
parent 592f2e23ef
commit 12abeae48b
26 changed files with 33 additions and 711 deletions

View file

@ -1,4 +1,6 @@
language: ruby language: ruby
services:
- redis
rvm: rvm:
- 2.5 - 2.5
- 2.6 - 2.6

View file

@ -3,3 +3,5 @@ source "https://rubygems.org"
gemspec name: "database_cleaner-core" gemspec name: "database_cleaner-core"
gem "byebug" gem "byebug"
gem "database_cleaner-active_record", git: "https://github.com/DatabaseCleaner/database_cleaner-active_record"
gem "database_cleaner-redis", git: "https://github.com/DatabaseCleaner/database_cleaner-redis"

View file

@ -1,7 +1,9 @@
# testing # testing
require "rspec/core/rake_task" require "rspec/core/rake_task"
RSpec::Core::RakeTask.new(:spec) RSpec::Core::RakeTask.new(:spec)
task :default => :spec require "cucumber/rake/task"
Cucumber::Rake::Task.new(:features)
task :default => [:spec, :features]
# releasing # releasing
require "rake/clean" require "rake/clean"

View file

@ -25,5 +25,10 @@ Gem::Specification.new do |spec|
spec.add_development_dependency 'guard-rspec' spec.add_development_dependency 'guard-rspec'
spec.add_development_dependency "listen" spec.add_development_dependency "listen"
spec.add_development_dependency "rspec" spec.add_development_dependency "rspec"
spec.add_development_dependency "cucumber" spec.add_development_dependency "cucumber"
spec.add_development_dependency "activesupport"
spec.add_development_dependency "database_cleaner-active_record"
spec.add_development_dependency "sqlite3"
spec.add_development_dependency "database_cleaner-redis"
end end

View file

@ -1,5 +1,5 @@
Feature: example Feature: example
In order to test DataBase Cleaner In order to test DatabaseCleaner
Here are some scenarios that rely on the DB being clean! Here are some scenarios that rely on the DB being clean!
Scenario: dirty the db Scenario: dirty the db

View file

@ -2,8 +2,8 @@ Given /^I have setup database cleaner to clean multiple databases using activere
#DatabaseCleaner #DatabaseCleaner
# require "#{File.dirname(__FILE__)}/../../../lib/datamapper_models" # require "#{File.dirname(__FILE__)}/../../../lib/datamapper_models"
# #
# DatabaseCleaner[:datamapper, {:connection => :one} ].strategy = :truncation # DatabaseCleaner[:active_record, connection: :one].strategy = :truncation
# DatabaseCleaner[:datamapper, {:connection => :two} ].strategy = :truncation # DatabaseCleaner[:active_record, connection: :two].strategy = :truncation
end end
When /^I create a widget using activerecord$/ do When /^I create a widget using activerecord$/ do

View file

@ -1,31 +0,0 @@
Given /^I have setup database cleaner to clean multiple databases using couchpotato$/ do
#DatabaseCleaner
# require "#{File.dirname(__FILE__)}/../../../lib/couchpotato_models"
#
# DatabaseCleaner[:couchpotato, {:connection => :one} ].strategy = :truncation
# DatabaseCleaner[:couchpotato, {:connection => :two} ].strategy = :truncation
end
When /^I create a widget using couchpotato$/ do
CouchPotatoWidget.create!
end
Then /^I should see ([\d]+) widget using couchpotato$/ do |widget_count|
expect(CouchPotatoWidget.count).to eq widget_count.to_i
end
When /^I create a widget in one db using couchpotato$/ do
CouchPotatoWidgetUsingDatabaseOne.create!
end
When /^I create a widget in another db using couchpotato$/ do
CouchPotatoWidgetUsingDatabaseTwo.create!
end
Then /^I should see ([\d]+) widget in one db using couchpotato$/ do |widget_count|
expect(CouchPotatoWidgetUsingDatabaseOne.count).to eq widget_count.to_i
end
Then /^I should see ([\d]+) widget in another db using couchpotato$/ do |widget_count|
expect(CouchPotatoWidgetUsingDatabaseTwo.count).to eq widget_count.to_i
end

View file

@ -1,37 +0,0 @@
Given /^I have setup database cleaner to clean multiple databases using datamapper$/ do
#DatabaseCleaner
# require "#{File.dirname(__FILE__)}/../../../lib/datamapper_models"
#
# DatabaseCleaner[:datamapper, {:connection => :one} ].strategy = :truncation
# DatabaseCleaner[:datamapper, {:connection => :two} ].strategy = :truncation
end
When /^I create a widget using datamapper$/ do
DataMapperWidget.create!
end
Then /^I should see ([\d]+) widget using datamapper$/ do |widget_count|
expect(DataMapperWidget.count).to eq widget_count.to_i
end
When /^I create a widget in one db using datamapper$/ do
begin
DataMapperWidgetUsingDatabaseOne.create!
rescue StandardError => e
BREAK = e.backtrace
debugger
DataMapperWidgetUsingDatabaseOne.create!
end
end
When /^I create a widget in another db using datamapper$/ do
DataMapperWidgetUsingDatabaseTwo.create!
end
Then /^I should see ([\d]+) widget in one db using datamapper$/ do |widget_count|
expect(DataMapperWidgetUsingDatabaseOne.count).to eq widget_count.to_i
end
Then /^I should see ([\d]+) widget in another db using datamapper$/ do |widget_count|
expect(DataMapperWidgetUsingDatabaseTwo.count).to eq widget_count.to_i
end

View file

@ -1,23 +0,0 @@
When /^I create a widget using mongoid$/ do
MongoidWidget.create!( :id => rand(1000)+1000)
end
Then /^I should see ([\d]+) widget using mongoid$/ do |widget_count|
expect(MongoidWidget.count).to eq widget_count.to_i
end
When /^I create a widget in one db using mongoid$/ do
MongoidWidgetUsingDatabaseOne.create!
end
When /^I create a widget in another db using mongoid$/ do
MongoidWidgetUsingDatabaseTwo.create!
end
Then /^I should see ([\d]+) widget in one db using mongoid$/ do |widget_count|
expect(MongoidWidgetUsingDatabaseOne.count).to eq widget_count.to_i
end
Then /^I should see ([\d]+) widget in another db using mongoid$/ do |widget_count|
expect(MongoidWidgetUsingDatabaseTwo.count).to eq widget_count.to_i
end

View file

@ -1,31 +0,0 @@
Given /^I have setup database cleaner to clean multiple databases using mongomapper$/ do
#DatabaseCleaner
# require "#{File.dirname(__FILE__)}/../../../lib/datamapper_models"
#
# DatabaseCleaner[:datamapper, {:connection => :one} ].strategy = :truncation
# DatabaseCleaner[:datamapper, {:connection => :two} ].strategy = :truncation
end
When /^I create a widget using mongomapper$/ do
MongoMapperWidget.create!
end
Then /^I should see ([\d]+) widget using mongomapper$/ do |widget_count|
expect(MongoMapperWidget.count).to eq widget_count.to_i
end
When /^I create a widget in one db using mongomapper$/ do
MongoMapperWidgetUsingDatabaseOne.create!
end
When /^I create a widget in another db using mongomapper$/ do
MongoMapperWidgetUsingDatabaseTwo.create!
end
Then /^I should see ([\d]+) widget in one db using mongomapper$/ do |widget_count|
expect(MongoMapperWidgetUsingDatabaseOne.count).to eq widget_count.to_i
end
Then /^I should see ([\d]+) widget in another db using mongomapper$/ do |widget_count|
expect(MongoMapperWidgetUsingDatabaseTwo.count).to eq widget_count.to_i
end

View file

@ -1,23 +0,0 @@
When /^I create a widget using neo4j$/ do
Neo4jWidget.create!
end
Then /^I should see ([\d]+) widget using neo4j$/ do |widget_count|
expect(Neo4jWidget.count).to eq widget_count.to_i
end
When /^I create a widget in one db using neo4j$/ do
Neo4jWidgetUsingDatabaseOne.create!
end
When /^I create a widget in another db using neo4j$/ do
Neo4jWidgetUsingDatabaseTwo.create!
end
Then /^I should see ([\d]+) widget in one db using neo4j$/ do |widget_count|
expect(Neo4jWidgetUsingDatabaseOne.count).to eq widget_count.to_i
end
Then /^I should see ([\d]+) widget in another db using neo4j$/ do |widget_count|
expect(Neo4jWidgetUsingDatabaseTwo.count).to eq widget_count.to_i
end

View file

@ -1,31 +0,0 @@
Given /^I have setup database cleaner to clean multiple databases using ohm$/ do
#DatabaseCleaner
# require "#{File.dirname(__FILE__)}/../../../lib/ohm_models"
#
# DatabaseCleaner[:ohm, {:connection => ENV['REDIS_URL_ONE']} ].strategy = :truncation
# DatabaseCleaner[:ohm, {:connection => ENV['REDIS_URL_TWO']} ].strategy = :truncation
end
When /^I create a widget using ohm$/ do
OhmWidget.create!
end
Then /^I should see ([\d]+) widget using ohm$/ do |widget_count|
expect(OhmWidget.count).to eq widget_count.to_i
end
When /^I create a widget in one db using ohm$/ do
OhmWidgetUsingDatabaseOne.create!
end
When /^I create a widget in another db using ohm$/ do
OhmWidgetUsingDatabaseTwo.create!
end
Then /^I should see ([\d]+) widget in one db using ohm$/ do |widget_count|
expect(OhmWidgetUsingDatabaseOne.count).to eq widget_count.to_i
end
Then /^I should see ([\d]+) widget in another db using ohm$/ do |widget_count|
expect(OhmWidgetUsingDatabaseTwo.count).to eq widget_count.to_i
end

View file

@ -1,6 +1,3 @@
#Hilarious as it seems, this is necessary so bundle exec cucumber works for mongoid cukeage (I'm assuming mongomapper is automatically present because its a git repo)
Object.send(:remove_const, 'MongoMapper') if defined?(::MongoMapper)
require 'bundler' require 'bundler'
Bundler.setup Bundler.setup
@ -9,7 +6,6 @@ require 'rspec/expectations'
DB_DIR = "#{File.dirname(__FILE__)}/../../db" DB_DIR = "#{File.dirname(__FILE__)}/../../db"
use_gems = ENV['USE_GEMS']
orm = ENV['ORM'] orm = ENV['ORM']
another_orm = ENV['ANOTHER_ORM'] another_orm = ENV['ANOTHER_ORM']
strategy = ENV['STRATEGY'] strategy = ENV['STRATEGY']
@ -24,48 +20,34 @@ require "active_support/core_ext/string/inflections"
if orm && strategy if orm && strategy
require "#{File.dirname(__FILE__)}/../../lib/#{orm.downcase}_models" require "#{File.dirname(__FILE__)}/../../lib/#{orm.downcase}_models"
if use_gems
require "database_cleaner-#{orm.underscore}" require "database_cleaner-#{orm.underscore}"
else
$:.unshift(File.dirname(__FILE__) + '/../../../lib')
require "database_cleaner-core"
end
if another_orm if another_orm
require "#{File.dirname(__FILE__)}/../../lib/#{another_orm.downcase}_models" require "#{File.dirname(__FILE__)}/../../lib/#{another_orm.downcase}_models"
if use_gems
require "database_cleaner-#{another_orm.underscore}" require "database_cleaner-#{another_orm.underscore}"
end end
end
require 'database_cleaner/cucumber' require 'database_cleaner/cucumber'
if multiple_db if multiple_db
DatabaseCleaner.app_root = "#{File.dirname(__FILE__)}/../.."
orm_sym = orm.gsub(/(.)([A-Z]+)/,'\1_\2').downcase.to_sym orm_sym = orm.gsub(/(.)([A-Z]+)/,'\1_\2').downcase.to_sym
case orm_sym case orm_sym
when :mongo_mapper when :redis
DatabaseCleaner[ orm_sym, {:connection => 'database_cleaner_test_one'} ].strategy = strategy.to_sym DatabaseCleaner[orm_sym, connection: ENV['REDIS_URL_ONE']].strategy = strategy.to_sym
DatabaseCleaner[ orm_sym, {:connection => 'database_cleaner_test_two'} ].strategy = strategy.to_sym DatabaseCleaner[orm_sym, connection: ENV['REDIS_URL_TWO']].strategy = strategy.to_sym
when :redis, :ohm
DatabaseCleaner[ orm_sym, {:connection => ENV['REDIS_URL_ONE']} ].strategy = strategy.to_sym
DatabaseCleaner[ orm_sym, {:connection => ENV['REDIS_URL_TWO']} ].strategy = strategy.to_sym
when :active_record when :active_record
DatabaseCleaner[:active_record, {:model => ActiveRecordWidgetUsingDatabaseOne} ].strategy = strategy.to_sym DatabaseCleaner[:active_record, model: ActiveRecordWidgetUsingDatabaseOne].strategy = strategy.to_sym
DatabaseCleaner[:active_record, {:model => ActiveRecordWidgetUsingDatabaseTwo} ].strategy = strategy.to_sym DatabaseCleaner[:active_record, model: ActiveRecordWidgetUsingDatabaseTwo].strategy = strategy.to_sym
else
DatabaseCleaner[ orm_sym, {:connection => :one} ].strategy = strategy.to_sym
DatabaseCleaner[ orm_sym, {:connection => :two} ].strategy = strategy.to_sym
end end
elsif another_orm elsif another_orm
DatabaseCleaner[ orm.gsub(/(.)([A-Z]+)/,'\1_\2').downcase.to_sym ].strategy = strategy.to_sym 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 DatabaseCleaner[another_orm.gsub(/(.)([A-Z]+)/,'\1_\2').downcase.to_sym].strategy = strategy.to_sym
else else
DatabaseCleaner.strategy = strategy.to_sym unless strategy == "default" DatabaseCleaner.strategy = strategy.to_sym unless strategy == "default"
end end
else else
raise "Run 'ORM=ActiveRecord|DataMapper|MongoMapper|CouchPotato|Ohm|Redis [ANOTHER_ORM=...] [MULTIPLE_DBS=true] STRATEGY=transaction|truncation|default cucumber examples/features'" raise "Run 'ORM=ActiveRecord|Redis [ANOTHER_ORM=...] [MULTIPLE_DBS=true] STRATEGY=transaction|truncation|default cucumber examples/features'"
end end

View file

@ -1,61 +0,0 @@
require 'couch_potato'
require 'json/pure' unless defined? ::JSON
::CouchPotato::Config.database_name = 'couch_potato_test'
class CouchPotatoWidget
include CouchPotato::Persistence
property :name
view :by_name, :key => :name
# mimic the AR interface used in example_steps
def self.create!(attrs = {})
CouchPotato.database.save(self.new)
end
def self.count
CouchPotato.database.view(self.by_name).size
end
end
class CouchPotatoWidgetUsingDatabaseOne
include CouchPotato::Persistence
database_name = 'couch_potato_test_one'
property :name
view :by_name, :key => :name
# mimic the AR interface used in example_steps
def self.create!(attrs = {})
CouchPotato.database.save(self.new)
end
def self.count
CouchPotato.database.view(self.by_name).size
end
end
class CouchPotatoWidgetUsingDatabaseTwo
include CouchPotato::Persistence
database_name = 'couch_potato_test_two'
property :name
view :by_name, :key => :name
# mimic the AR interface used in example_steps
def self.create!(attrs = {})
CouchPotato.database.save(self.new)
end
def self.count
CouchPotato.database.view(self.by_name).size
end
end

View file

@ -1,50 +0,0 @@
require "dm-core"
require "dm-transactions"
#Datamapper 1.0 requires you to require dm-migrations to automigrate
require "dm-migrations"
# only to please activerecord API used in database_cleaner/examples/features/step_definitions
# yes, i know that's lazy ...
require "dm-validations"
require "dm-aggregates"
DataMapper.setup(:default, "sqlite3:#{DB_DIR}/datamapper_default.db")
DataMapper.setup(:one, "sqlite3:#{DB_DIR}/datamapper_one.db")
DataMapper.setup(:two, "sqlite3:#{DB_DIR}/datamapper_two.db")
class DataMapperWidget
include DataMapper::Resource
property :id, Serial
property :name, String
end
class DataMapperWidgetUsingDatabaseOne
include DataMapper::Resource
def self.default_repository_name
:one
end
property :id, Serial
property :name, String
end
class DataMapperWidgetUsingDatabaseTwo
include DataMapper::Resource
def self.default_repository_name
:two
end
property :id, Serial
property :name, String
end
DataMapperWidget.auto_migrate!
DataMapperWidgetUsingDatabaseOne.auto_migrate!
DataMapperWidgetUsingDatabaseTwo.auto_migrate!

View file

@ -1,44 +0,0 @@
require 'mongoid'
Mongoid.configure do |config|
config.master = Mongo::Connection.new.db('database_cleaner_test')
end
class MongoidWidget
include Mongoid::Document
field :id, :type => Integer
field :name
class << self
#mongoid doesn't seem to provide this...
def create!(*args)
new(*args).save!
end
end
end
class MongoidWidgetUsingDatabaseOne
include Mongoid::Document
field :id, :type => Integer
field :name
class << self
#mongoid doesn't seem to provide this...
def create!(*args)
new(*args).save!
end
end
end
class MongoidWidgetUsingDatabaseTwo
include Mongoid::Document
field :id, :type => Integer
field :name
class << self
#mongoid doesn't seem to provide this...
def create!(*args)
new(*args).save!
end
end
end

View file

@ -1,51 +0,0 @@
require 'mongo_mapper'
::MongoMapper.connection = Mongo::Connection.new('127.0.0.1')
::MongoMapper.database = 'database_cleaner_test'
class MongoMapperWidget
include MongoMapper::Document
key :id, Integer
key :name, String
class << self
#mongomapper doesn't seem to provide this...
def create!(*args)
new(*args).save!
end
end
end
class MongoMapperWidgetUsingDatabaseOne
include MongoMapper::Document
connection = Mongo::Connection.new('127.0.0.1')
set_database_name = 'database_cleaner_test_one'
key :id, Integer
key :name, String
class << self
#mongomapper doesn't seem to provide this...
def create!(*args)
new(*args).save!
end
end
end
class MongoMapperWidgetUsingDatabaseTwo
include MongoMapper::Document
connection = Mongo::Connection.new('127.0.0.1')
set_database_name = 'database_cleaner_test_two'
key :id, Integer
key :name, String
class << self
#mongomapper doesn't seem to provide this...
def create!(*args)
new(*args).save!
end
end
end

View file

@ -1,17 +0,0 @@
require 'neo4j-core'
class Neo4jWidget < Neo4j::Node
def self.create!(*args)
create(*args)
end
def self.count
Neo4j::Session.query.match('n').pluck('COUNT(n)').first
end
end
class Neo4jWidgetUsingDatabaseOne < Neo4jWidget
end
class Neo4jWidgetUsingDatabaseTwo < Neo4jWidget
end

View file

@ -1,43 +0,0 @@
require 'ohm'
Ohm.connect :url => ENV['REDIS_URL']
class OhmWidget < Ohm::Model
attribute :name
def self.create!(attrs = {})
new({:name => 'some widget'}.merge(attrs)).save
end
def self.count
all.count
end
end
class OhmWidgetUsingDatabaseOne < Ohm::Model
connect :url => ENV['REDIS_URL_ONE']
attribute :name
def self.create!(attrs = {})
new({:name => 'a widget using database one'}.merge(attrs)).save
end
def self.count
all.count
end
end
class OhmWidgetUsingDatabaseTwo < Ohm::Model
connect :url => ENV['REDIS_URL_TWO']
attribute :name
def self.create!(attrs = {})
new({:name => 'a widget using database two'}.merge(attrs)).save
end
def self.count
all.count
end
end

View file

@ -1,9 +0,0 @@
require 'sequel'
db = Sequel.sqlite # memory database
db.run 'DROP TABLE IF EXISTS "sequel_widgets"'
db.create_table :sequel_widgets do
String :name
end

View file

@ -15,42 +15,4 @@ Feature: database cleaning
| ActiveRecord | transaction | | ActiveRecord | transaction |
| ActiveRecord | truncation | | ActiveRecord | truncation |
| ActiveRecord | deletion | | ActiveRecord | deletion |
| CouchPotato | truncation |
| DataMapper | transaction |
| DataMapper | truncation |
| Mongoid | truncation |
| MongoMapper | truncation |
| Neo4j | deletion |
| Neo4j | truncation |
| Neo4j | transaction |
| Ohm | truncation |
| Redis | truncation | | Redis | truncation |
| Sequel | transaction |
| Sequel | truncation |
| Sequel | deletion |
Scenario Outline: ruby app
Given I am using <ORM>
And the <Strategy> cleaning strategy
When I run my scenarios that rely on a clean database
Then I should see all green
Examples:
| ORM | Strategy |
| ActiveRecord | transaction |
| ActiveRecord | truncation |
| ActiveRecord | deletion |
| DataMapper | transaction |
| DataMapper | truncation |
| Sequel | transaction |
| Sequel | truncation |
| Sequel | deletion |
| MongoMapper | truncation |
| Mongoid | truncation |
| CouchPotato | truncation |
| Redis | truncation |
| Ohm | truncation |
| Neo4j | deletion |
| Neo4j | truncation |
| Neo4j | transaction |

View file

@ -13,30 +13,5 @@ Feature: database cleaning
Examples: Examples:
| ORM | | ORM |
| ActiveRecord | | ActiveRecord |
| CouchPotato |
| DataMapper |
| Mongoid |
| MongoMapper |
| Neo4j |
| Ohm |
| Redis | | Redis |
| Sequel |
Scenario Outline: ruby app
Given I am using <ORM>
And the default cleaning strategy
When I run my scenarios that rely on a clean database
Then I should see all green
Examples:
| ORM |
| ActiveRecord |
| DataMapper |
| Sequel |
| MongoMapper |
| Mongoid |
| CouchPotato |
| Redis |
| Ohm |
| Neo4j |

View file

@ -15,26 +15,5 @@ Feature: multiple database cleaning
| ActiveRecord | truncation | | ActiveRecord | truncation |
| ActiveRecord | deletion | | ActiveRecord | deletion |
| ActiveRecord | transaction | | ActiveRecord | transaction |
| DataMapper | truncation | | Redis | truncation |
| DataMapper | transaction |
| MongoMapper | truncation |
| Sequel | truncation |
| Sequel | transaction |
Scenario Outline: ruby app
Given I am using <ORM>
And the <Strategy> cleaning strategy
When I run my scenarios that rely on clean databases
Then I should see all green
Examples:
| ORM | Strategy |
| ActiveRecord | truncation |
| ActiveRecord | deletion |
| DataMapper | truncation |
| Sequel | truncation |
| MongoMapper | truncation |
| DataMapper | transaction |
| ActiveRecord | transaction |
| Sequel | transaction |

View file

@ -11,138 +11,6 @@ Feature: database cleaning using multiple ORMs
Examples: Examples:
| ORM1 | ORM2 | | ORM1 | ORM2 |
| ActiveRecord | CouchPotato |
| ActiveRecord | DataMapper |
| ActiveRecord | Mongoid |
| ActiveRecord | MongoMapper |
| ActiveRecord | Neo4j |
| ActiveRecord | Ohm |
| ActiveRecord | Redis | | ActiveRecord | Redis |
| ActiveRecord | Sequel |
| CouchPotato | ActiveRecord |
| CouchPotato | DataMapper |
| CouchPotato | Mongoid |
| CouchPotato | MongoMapper |
| CouchPotato | Neo4j |
| CouchPotato | Ohm |
| CouchPotato | Redis |
| CouchPotato | Sequel |
| DataMapper | ActiveRecord |
| DataMapper | CouchPotato |
| DataMapper | Mongoid |
| DataMapper | MongoMapper |
| DataMapper | Neo4j |
| DataMapper | Ohm |
| DataMapper | Redis |
| DataMapper | Sequel |
| Mongoid | ActiveRecord |
| Mongoid | CouchPotato |
| Mongoid | DataMapper |
| Mongoid | MongoMapper |
| Mongoid | Neo4j |
| Mongoid | Ohm |
| Mongoid | Redis |
| Mongoid | Sequel |
| MongoMapper | ActiveRecord |
| MongoMapper | CouchPotato |
| MongoMapper | DataMapper |
| MongoMapper | Mongoid |
| MongoMapper | Neo4j |
| MongoMapper | Ohm |
| MongoMapper | Redis |
| MongoMapper | Sequel |
| Neo4j | ActiveRecord |
| Neo4j | CouchPotato |
| Neo4j | DataMapper |
| Neo4j | Mongoid |
| Neo4j | MongoMapper |
| Neo4j | Ohm |
| Neo4j | Redis |
| Neo4j | Sequel |
| Ohm | ActiveRecord |
| Ohm | CouchPotato |
| Ohm | DataMapper |
| Ohm | Mongoid |
| Ohm | MongoMapper |
| Ohm | Neo4j |
| Ohm | Redis |
| Ohm | Sequel |
| Redis | ActiveRecord | | Redis | ActiveRecord |
| Redis | CouchPotato |
| Redis | DataMapper |
| Redis | Mongoid |
| Redis | MongoMapper |
| Redis | Neo4j |
| Redis | Ohm |
| Redis | Sequel |
| Sequel | ActiveRecord |
| Sequel | CouchPotato |
| Sequel | DataMapper |
| Sequel | Mongoid |
| Sequel | MongoMapper |
| Sequel | Neo4j |
| Sequel | Ohm |
| Sequel | Redis |
Scenario Outline: ruby app
Given I am using <ORM1> and <ORM2>
When I run my scenarios that rely on clean databases using multiple orms
Then I should see all green
Examples:
| ORM1 | ORM2 |
| ActiveRecord | DataMapper |
| ActiveRecord | Sequel |
| ActiveRecord | MongoMapper |
| ActiveRecord | Mongoid |
| ActiveRecord | CouchPotato |
| ActiveRecord | Ohm |
| ActiveRecord | Redis |
| DataMapper | ActiveRecord |
| DataMapper | Sequel |
| DataMapper | MongoMapper |
| DataMapper | Mongoid |
| DataMapper | CouchPotato |
| DataMapper | Ohm |
| DataMapper | Redis |
| Sequel | ActiveRecord |
| Sequel | DataMapper |
| Sequel | MongoMapper |
| Sequel | Mongoid |
| Sequel | CouchPotato |
| Sequel | Ohm |
| Sequel | Redis |
| MongoMapper | ActiveRecord |
| MongoMapper | DataMapper |
| MongoMapper | Sequel |
| MongoMapper | Mongoid |
| MongoMapper | CouchPotato |
| MongoMapper | Ohm |
| MongoMapper | Redis |
| CouchPotato | ActiveRecord |
| CouchPotato | DataMapper |
| CouchPotato | Sequel |
| CouchPotato | MongoMapper |
| CouchPotato | Mongoid |
| CouchPotato | Ohm |
| CouchPotato | Redis |
| Ohm | ActiveRecord |
| Ohm | DataMapper |
| Ohm | Sequel |
| Ohm | MongoMapper |
| Ohm | Mongoid |
| Ohm | CouchPotato |
| Redis | ActiveRecord |
| Redis | DataMapper |
| Redis | Sequel |
| Redis | MongoMapper |
| Redis | Mongoid |
| Redis | CouchPotato |
| Redis | Ohm |
| Neo4j | ActiveRecord |
| Neo4j | DataMapper |
| Neo4j | Sequel |
| Neo4j | Redis |
| Neo4j | Ohm |
| Neo4j | MongoMapper |

View file

@ -1,14 +1,12 @@
orms_pattern = /(ActiveRecord|DataMapper|Sequel|MongoMapper|Mongoid|CouchPotato|Redis|Ohm|Neo4j)/ orms_pattern = /(ActiveRecord|DataMapper|Sequel|MongoMapper|Mongoid|CouchPotato|Redis|Ohm|Neo4j)/
Given /^I am using #{orms_pattern}( from its adapter gem)?$/ do |orm, from_gems| Given /^I am using #{orms_pattern} from its adapter gem$/ do |orm|
@feature_runner = FeatureRunner.new @feature_runner = FeatureRunner.new
@feature_runner.use_gems = !!from_gems
@feature_runner.orm = orm @feature_runner.orm = orm
end end
Given /^I am using #{orms_pattern} and #{orms_pattern}( from their adapter gems)?$/ do |orm1, orm2, from_gems| Given /^I am using #{orms_pattern} and #{orms_pattern} from their adapter gems$/ do |orm1, orm2|
@feature_runner = FeatureRunner.new @feature_runner = FeatureRunner.new
@feature_runner.use_gems = !!from_gems
@feature_runner.orm = orm1 @feature_runner.orm = orm1
@feature_runner.another_orm = orm2 @feature_runner.another_orm = orm2
end end

View file

@ -1,5 +1,4 @@
class FeatureRunner class FeatureRunner
attr_accessor :use_gems
attr_accessor :orm attr_accessor :orm
attr_accessor :another_orm attr_accessor :another_orm
attr_accessor :multiple_databases attr_accessor :multiple_databases
@ -16,7 +15,6 @@ class FeatureRunner
Dir.chdir(full_dir) do Dir.chdir(full_dir) do
ENV['USE_GEMS'] = use_gems ? "true" : nil
ENV['ORM'] = orm ENV['ORM'] = orm
ENV['STRATEGY'] = strategy ENV['STRATEGY'] = strategy
@ -32,7 +30,7 @@ class FeatureRunner
ENV['MULTIPLE_DBS'] = nil ENV['MULTIPLE_DBS'] = nil
end end
self.output = `#{"jruby -S " if defined?(JRUBY_VERSION)}cucumber features/#{feature}.feature` self.output = `cucumber features/#{feature}.feature`
self.exit_status = $?.exitstatus self.exit_status = $?.exitstatus
end end