database_cleaner 1.0.0.RC1 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +6 -0
- data/History.txt +11 -3
- data/README.markdown +39 -3
- data/VERSION.yml +2 -2
- data/examples/Gemfile +2 -0
- data/examples/Gemfile.lock +6 -0
- data/examples/config/redis.yml +8 -0
- data/examples/features/support/env.rb +8 -1
- data/examples/lib/mongoid_models.rb +1 -1
- data/examples/lib/ohm_models.rb +43 -0
- data/examples/lib/redis_models.rb +65 -0
- data/features/cleaning.feature +11 -9
- data/features/cleaning_default_strategy.feature +2 -0
- data/features/cleaning_multiple_orms.feature +19 -0
- data/features/step_definitions/database_cleaner_steps.rb +3 -2
- data/features/step_definitions/ohm_steps.rb +31 -0
- data/features/step_definitions/redis_steps.rb +31 -0
- data/lib/database_cleaner/active_record/base.rb +1 -7
- data/lib/database_cleaner/active_record/transaction.rb +4 -0
- data/lib/database_cleaner/base.rb +19 -3
- data/lib/database_cleaner/configuration.rb +5 -1
- data/lib/database_cleaner/mongoid/truncation.rb +2 -2
- data/lib/database_cleaner/moped/base.rb +35 -0
- data/lib/database_cleaner/moped/truncation.rb +4 -24
- data/lib/database_cleaner/moped/truncation_base.rb +34 -0
- data/lib/database_cleaner/ohm/truncation.rb +15 -0
- data/lib/database_cleaner/redis/base.rb +31 -0
- data/lib/database_cleaner/redis/truncation.rb +26 -0
- data/spec/database_cleaner/active_record/base_spec.rb +2 -19
- data/spec/database_cleaner/active_record/transaction_spec.rb +2 -0
- data/spec/database_cleaner/base_spec.rb +73 -7
- data/spec/database_cleaner/configuration_spec.rb +15 -1
- data/spec/database_cleaner/moped/moped_examples.rb +26 -0
- data/spec/database_cleaner/moped/truncation_spec.rb +75 -0
- data/spec/database_cleaner/ohm/truncation_spec.rb +70 -0
- data/spec/database_cleaner/redis/base_spec.rb +32 -0
- data/spec/database_cleaner/redis/truncation_spec.rb +63 -0
- metadata +20 -5
data/Gemfile.lock
CHANGED
@@ -135,6 +135,10 @@ GEM
|
|
135
135
|
multi_json (1.5.0)
|
136
136
|
mysql (2.8.1)
|
137
137
|
mysql2 (0.3.11)
|
138
|
+
nest (1.1.2)
|
139
|
+
redis
|
140
|
+
ohm (0.1.5)
|
141
|
+
nest (~> 1.0)
|
138
142
|
origin (1.0.11)
|
139
143
|
pg (0.14.1)
|
140
144
|
plucky (0.5.2)
|
@@ -160,6 +164,7 @@ GEM
|
|
160
164
|
rake (10.0.3)
|
161
165
|
rdoc (3.12)
|
162
166
|
json (~> 1.4)
|
167
|
+
redis (3.0.4)
|
163
168
|
rest-client (1.6.7)
|
164
169
|
mime-types (>= 1.16)
|
165
170
|
rspec (2.12.0)
|
@@ -213,6 +218,7 @@ DEPENDENCIES
|
|
213
218
|
mongoid
|
214
219
|
mysql (~> 2.8.1)
|
215
220
|
mysql2
|
221
|
+
ohm (~> 0.1.3)
|
216
222
|
pg
|
217
223
|
rake
|
218
224
|
rspec-rails
|
data/History.txt
CHANGED
@@ -1,20 +1,28 @@
|
|
1
|
-
== 1.0.
|
1
|
+
== 1.0.1 2013-05-13
|
2
|
+
|
3
|
+
* Patch release to fix broken gemspec file. Sorry folks!
|
4
|
+
|
5
|
+
== 1.0.0 2013-05-13
|
2
6
|
|
3
7
|
=== New Features/Changes
|
4
8
|
|
5
9
|
* Dropping support for Ruby 1.8.x; Only 1.9.x and beyond will be supported going forward.
|
6
|
-
* Now supporting (and testing against 2.0.x).
|
10
|
+
* Now supporting (and testing against ruby 2.0.x).
|
7
11
|
* Adds support for AR 4.0 by using `begin_transaction` (David Chelimsky and Steve Madsen)
|
8
12
|
* Adds Rails 4 support for SQLite3Adapter
|
13
|
+
* Suppport for Moped when used without Mongoid (Cyprian Kowalczyk)
|
14
|
+
* Redis & Ohm support (Hengbin Qiu, James Conroy-Finn)
|
9
15
|
|
10
16
|
* CI Improvements (Jan Vlnas, Murahashi Sanemat Kenichi, Samer Masry, Jordan Hollinger)
|
11
|
-
* README/Documentation improvements (Marcelo Cajueiro, Donald Ball, TJ Chambers, Nick Huanca
|
17
|
+
* README/Documentation improvements (Marcelo Cajueiro, Donald Ball, TJ Chambers, Nick Huanca, Justin Edwards, Ryota Arai)
|
12
18
|
|
13
19
|
=== Bug Fixes
|
14
20
|
* Fixes transaction errors when using `after_commit` hooks in AR.
|
15
21
|
* Fixes truncation error with SQLite (Daniel White)
|
16
22
|
* Fixes `pre_count` logic in AR Postgres. (Jordan Hollinger)
|
17
23
|
* Sequel fix to normalize all table names to strings. (Lauri Peltola)
|
24
|
+
* #clean_with now works with multiple connections. (John Ferlito)
|
25
|
+
* Always start a AR transaction to prevent nil errors in AR when rolling back (John Hampton, M.Shibuya)
|
18
26
|
|
19
27
|
== 0.9.1 2012-10-11 (0.9.0 was released first but was yanked due to bad gemspec)
|
20
28
|
|
data/README.markdown
CHANGED
@@ -5,7 +5,7 @@ Database Cleaner is a set of strategies for cleaning your database in Ruby.
|
|
5
5
|
The original use case was to ensure a clean state during tests.
|
6
6
|
Each strategy is a small amount of code but is code that is usually needed in any ruby app that is testing with a database.
|
7
7
|
|
8
|
-
ActiveRecord, DataMapper, Sequel, MongoMapper, Mongoid, and
|
8
|
+
ActiveRecord, DataMapper, Sequel, MongoMapper, Mongoid, CouchPotato, Ohm and Redis are supported.
|
9
9
|
|
10
10
|
[](http://travis-ci.org/bmabey/database_cleaner)
|
11
11
|
|
@@ -55,6 +55,18 @@ Here is an overview of the strategies supported for each library:
|
|
55
55
|
<td> Yes</td>
|
56
56
|
<td> No</td>
|
57
57
|
</tr>
|
58
|
+
<tr>
|
59
|
+
<td>Redis</td>
|
60
|
+
<td><b>Yes</b></td>
|
61
|
+
<td>No</td>
|
62
|
+
<td>No</td>
|
63
|
+
</tr>
|
64
|
+
<tr>
|
65
|
+
<td>Ohm</td>
|
66
|
+
<td><b>Yes</b></td>
|
67
|
+
<td>No</td>
|
68
|
+
<td>No</td>
|
69
|
+
</tr>
|
58
70
|
</tbody>
|
59
71
|
</table>
|
60
72
|
|
@@ -72,6 +84,12 @@ Here is an overview of the strategies supported for each library:
|
|
72
84
|
<td> No</td>
|
73
85
|
<td> No</td>
|
74
86
|
</tr>
|
87
|
+
<tr>
|
88
|
+
<td> Moped</td>
|
89
|
+
<td> Yes</td>
|
90
|
+
<td> No</td>
|
91
|
+
<td> No</td>
|
92
|
+
</tr>
|
75
93
|
</tbody>
|
76
94
|
</table>
|
77
95
|
|
@@ -88,11 +106,11 @@ For the SQL libraries the fastest option will be to use `:transaction` as transa
|
|
88
106
|
|
89
107
|
One common approach is to force all processes to use the same database connection ([common ActiveRecord hack](http://blog.plataformatec.com.br/2011/12/three-tips-to-improve-the-performance-of-your-test-suite/)) however this approach has been reported to result in non-deterministic failures.
|
90
108
|
|
91
|
-
Another approach is to have the transactions rolled back in the application's process and relax the isolation level of the database (so the tests can read the
|
109
|
+
Another approach is to have the transactions rolled back in the application's process and relax the isolation level of the database (so the tests can read the uncommitted transactions).
|
92
110
|
|
93
111
|
An easier, but slower, solution is to use the `:truncation` or `:deletion` strategy.
|
94
112
|
|
95
|
-
So what is fastest out of `:deletion` and `:truncation`? Well, it depends on your table structure and what percentage of tables you populate in an average test. The reasoning is out
|
113
|
+
So what is fastest out of `:deletion` and `:truncation`? Well, it depends on your table structure and what percentage of tables you populate in an average test. The reasoning is out of the scope of this README but here is a [good SO answer on this topic for Postgres](http://stackoverflow.com/questions/11419536/postgresql-truncation-speed/11423886#11423886).
|
96
114
|
|
97
115
|
Some people report much faster speeds with `:deletion` while others say `:truncation` is faster for them. The best approach therefore is it try all options on your test suite and see what is faster.
|
98
116
|
|
@@ -123,6 +141,9 @@ DatabaseCleaner.strategy = :truncation, {:only => %w[widgets dogs some_other_tab
|
|
123
141
|
DatabaseCleaner.strategy = :truncation, {:except => %w[widgets]}
|
124
142
|
```
|
125
143
|
|
144
|
+
With Ohm and Redis, `:only` and `:except` take a list of strings to be
|
145
|
+
passed to [`keys`](http://redis.io/commands/keys)).
|
146
|
+
|
126
147
|
(I should point out the truncation strategy will never truncate your schema_migrations table.)
|
127
148
|
|
128
149
|
Some strategies require that you call `DatabaseCleaner.start` before calling `clean` (for example the `:transaction` one needs to know to open up a transaction). So you would have:
|
@@ -276,6 +297,11 @@ Usage beyond that remains the same with `DatabaseCleaner.start` calling any setu
|
|
276
297
|
<td> <code>DatabaseCleaner[:mongoid]</code></td>
|
277
298
|
<td> Multiple databases supported for Mongoid 3. Specify <code>DatabaseCleaner[:mongoid, {:connection => :db_name}]</code> </td>
|
278
299
|
</tr>
|
300
|
+
<tr>
|
301
|
+
<td> Moped</td>
|
302
|
+
<td> <code>DatabaseCleaner[:moped]</code></td>
|
303
|
+
<td> It is necessary to configure database name with <code>DatabaseCleaner[:moped].db = db_name</code> otherwise name `default` will be used.</td>
|
304
|
+
</tr>
|
279
305
|
<tr>
|
280
306
|
<td> Couch Potato</td>
|
281
307
|
<td> <code>DatabaseCleaner[:couch_potato]</code></td>
|
@@ -286,6 +312,16 @@ Usage beyond that remains the same with `DatabaseCleaner.start` calling any setu
|
|
286
312
|
<td> <code>DatabaseCleaner[:sequel]</code></td>
|
287
313
|
<td> Multiple databases supported; specify <code>Databasecleaner[:sequel, {:connection => Sequel.connect(uri)}]</code></td>
|
288
314
|
</tr>
|
315
|
+
<tr>
|
316
|
+
<td>Redis</td>
|
317
|
+
<td><code>DatabaseCleaner[:redis]</code></td>
|
318
|
+
<td>Connection specified as Redis URI</td>
|
319
|
+
</tr>
|
320
|
+
<tr>
|
321
|
+
<td>Ohm</td>
|
322
|
+
<td><code>DatabaseCleaner[:ohm]</code></td>
|
323
|
+
<td>Connection specified as Redis URI</td>
|
324
|
+
</tr>
|
289
325
|
</tbody>
|
290
326
|
</table>
|
291
327
|
|
data/VERSION.yml
CHANGED
data/examples/Gemfile
CHANGED
data/examples/Gemfile.lock
CHANGED
@@ -135,6 +135,10 @@ GEM
|
|
135
135
|
multi_json (1.5.0)
|
136
136
|
mysql (2.8.1)
|
137
137
|
mysql2 (0.3.11)
|
138
|
+
nest (1.1.2)
|
139
|
+
redis
|
140
|
+
ohm (0.1.5)
|
141
|
+
nest (~> 1.0)
|
138
142
|
origin (1.0.11)
|
139
143
|
pg (0.14.1)
|
140
144
|
plucky (0.5.2)
|
@@ -160,6 +164,7 @@ GEM
|
|
160
164
|
rake (10.0.3)
|
161
165
|
rdoc (3.12)
|
162
166
|
json (~> 1.4)
|
167
|
+
redis (3.0.4)
|
163
168
|
rest-client (1.6.7)
|
164
169
|
mime-types (>= 1.16)
|
165
170
|
rspec (2.12.0)
|
@@ -213,6 +218,7 @@ DEPENDENCIES
|
|
213
218
|
mongoid
|
214
219
|
mysql (~> 2.8.1)
|
215
220
|
mysql2
|
221
|
+
ohm (~> 0.1.3)
|
216
222
|
pg
|
217
223
|
rake
|
218
224
|
rspec-rails
|
@@ -15,6 +15,10 @@ another_orm = ENV['ANOTHER_ORM']
|
|
15
15
|
strategy = ENV['STRATEGY']
|
16
16
|
multiple_db = ENV['MULTIPLE_DBS']
|
17
17
|
|
18
|
+
config = YAML::load(File.open("#{File.dirname(__FILE__)}/../../config/redis.yml"))
|
19
|
+
ENV['REDIS_URL'] = config['test']['url']
|
20
|
+
ENV['REDIS_URL_ONE'] = config['one']['url']
|
21
|
+
ENV['REDIS_URL_TWO'] = config['two']['url']
|
18
22
|
|
19
23
|
if orm && strategy
|
20
24
|
$:.unshift(File.dirname(__FILE__) + '/../../../lib')
|
@@ -37,6 +41,9 @@ if orm && strategy
|
|
37
41
|
when :mongo_mapper
|
38
42
|
DatabaseCleaner[ orm_sym, {:connection => 'database_cleaner_test_one'} ].strategy = strategy.to_sym
|
39
43
|
DatabaseCleaner[ orm_sym, {:connection => 'database_cleaner_test_two'} ].strategy = strategy.to_sym
|
44
|
+
when :redis, :ohm
|
45
|
+
DatabaseCleaner[ orm_sym, {:connection => ENV['REDIS_URL_ONE']} ].strategy = strategy.to_sym
|
46
|
+
DatabaseCleaner[ orm_sym, {:connection => ENV['REDIS_URL_TWO']} ].strategy = strategy.to_sym
|
40
47
|
when :active_record
|
41
48
|
DatabaseCleaner[:active_record, {:model => ActiveRecordWidgetUsingDatabaseOne} ].strategy = strategy.to_sym
|
42
49
|
DatabaseCleaner[:active_record, {:model => ActiveRecordWidgetUsingDatabaseTwo} ].strategy = strategy.to_sym
|
@@ -53,5 +60,5 @@ if orm && strategy
|
|
53
60
|
end
|
54
61
|
|
55
62
|
else
|
56
|
-
raise "Run 'ORM=ActiveRecord|DataMapper|MongoMapper|CouchPotato [ANOTHER_ORM=...] [MULTIPLE_DBS=true] STRATEGY=transaction|truncation|default cucumber examples/features'"
|
63
|
+
raise "Run 'ORM=ActiveRecord|DataMapper|MongoMapper|CouchPotato|Ohm|Redis [ANOTHER_ORM=...] [MULTIPLE_DBS=true] STRATEGY=transaction|truncation|default cucumber examples/features'"
|
57
64
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'ohm'
|
2
|
+
|
3
|
+
Ohm.connect :url => ENV['REDIS_URL']
|
4
|
+
|
5
|
+
class OhmWidget < Ohm::Model
|
6
|
+
attribute :name
|
7
|
+
|
8
|
+
def self.create!(attrs = {})
|
9
|
+
new({:name => 'some widget'}.merge(attrs)).save
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.count
|
13
|
+
all.count
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
class OhmWidgetUsingDatabaseOne < Ohm::Model
|
19
|
+
connect :url => ENV['REDIS_URL_ONE']
|
20
|
+
attribute :name
|
21
|
+
|
22
|
+
def self.create!(attrs = {})
|
23
|
+
new({:name => 'a widget using database one'}.merge(attrs)).save
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.count
|
27
|
+
all.count
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
class OhmWidgetUsingDatabaseTwo < Ohm::Model
|
33
|
+
connect :url => ENV['REDIS_URL_TWO']
|
34
|
+
attribute :name
|
35
|
+
|
36
|
+
def self.create!(attrs = {})
|
37
|
+
new({:name => 'a widget using database two'}.merge(attrs)).save
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.count
|
41
|
+
all.count
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'redis'
|
2
|
+
|
3
|
+
class RedisWidget
|
4
|
+
|
5
|
+
def self.redis
|
6
|
+
threaded ||= Redis.connect
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.redis=(connection)
|
10
|
+
threaded = connection
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.threaded
|
14
|
+
Thread.current[self.class.to_s] ||= {}
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(options = {})
|
18
|
+
options = options.dup
|
19
|
+
@name = options[:name]
|
20
|
+
end
|
21
|
+
|
22
|
+
def connection
|
23
|
+
self.class.redis
|
24
|
+
end
|
25
|
+
|
26
|
+
def save
|
27
|
+
unless connection.get(self.class.to_s + ':id')
|
28
|
+
@id = 0
|
29
|
+
connection.set(self.class.to_s + ':id', @id)
|
30
|
+
end
|
31
|
+
@id = connection.incr(self.class.to_s + ':id')
|
32
|
+
connection.set(self.class.to_s + ':%d:name' % @id, @name)
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.count
|
36
|
+
self.redis.keys(self.to_s + '*name').size
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.create!
|
40
|
+
new(:name => 'some widget').save
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class RedisWidgetUsingDatabaseOne < RedisWidget
|
46
|
+
|
47
|
+
def self.redis
|
48
|
+
threaded[self.class.to_s] ||= Redis.connect :url => ENV['REDIS_URL_ONE']
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.create!
|
52
|
+
new(:name => 'a widget using database one').save
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class RedisWidgetUsingDatabaseTwo < RedisWidget
|
57
|
+
|
58
|
+
def self.redis
|
59
|
+
threaded[self.class.to_s] ||= Redis.connect :url => ENV['REDIS_URL_TWO']
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.create!
|
63
|
+
new(:name => 'a widget using database two').save
|
64
|
+
end
|
65
|
+
end
|
data/features/cleaning.feature
CHANGED
@@ -11,12 +11,14 @@ Feature: database cleaning
|
|
11
11
|
Then I should see all green
|
12
12
|
|
13
13
|
Examples:
|
14
|
-
| ORM | Strategy
|
15
|
-
| ActiveRecord | transaction
|
16
|
-
| ActiveRecord | truncation
|
17
|
-
| ActiveRecord | deletion
|
18
|
-
| DataMapper | transaction
|
19
|
-
| DataMapper | truncation
|
20
|
-
| MongoMapper | truncation
|
21
|
-
| Mongoid | truncation
|
22
|
-
| CouchPotato | truncation
|
14
|
+
| ORM | Strategy |
|
15
|
+
| ActiveRecord | transaction |
|
16
|
+
| ActiveRecord | truncation |
|
17
|
+
| ActiveRecord | deletion |
|
18
|
+
| DataMapper | transaction |
|
19
|
+
| DataMapper | truncation |
|
20
|
+
| MongoMapper | truncation |
|
21
|
+
| Mongoid | truncation |
|
22
|
+
| CouchPotato | truncation |
|
23
|
+
| Redis | truncation |
|
24
|
+
| Ohm | truncation |
|
@@ -15,15 +15,34 @@ Feature: database cleaning using multiple ORMs
|
|
15
15
|
| ActiveRecord | MongoMapper |
|
16
16
|
| ActiveRecord | Mongoid |
|
17
17
|
| ActiveRecord | CouchPotato |
|
18
|
+
| ActiveRecord | Ohm |
|
19
|
+
| ActiveRecord | Redis |
|
18
20
|
| DataMapper | ActiveRecord |
|
19
21
|
| DataMapper | MongoMapper |
|
20
22
|
| DataMapper | Mongoid |
|
21
23
|
| DataMapper | CouchPotato |
|
24
|
+
| DataMapper | Ohm |
|
25
|
+
| DataMapper | Redis |
|
22
26
|
| MongoMapper | ActiveRecord |
|
23
27
|
| MongoMapper | DataMapper |
|
24
28
|
| MongoMapper | Mongoid |
|
25
29
|
| MongoMapper | CouchPotato |
|
30
|
+
| MongoMapper | Ohm |
|
31
|
+
| MongoMapper | Redis |
|
26
32
|
| CouchPotato | ActiveRecord |
|
27
33
|
| CouchPotato | DataMapper |
|
28
34
|
| CouchPotato | MongoMapper |
|
29
35
|
| CouchPotato | Mongoid |
|
36
|
+
| CouchPotato | Ohm |
|
37
|
+
| CouchPotato | Redis |
|
38
|
+
| Ohm | ActiveRecord |
|
39
|
+
| Ohm | DataMapper |
|
40
|
+
| Ohm | MongoMapper |
|
41
|
+
| Ohm | Mongoid |
|
42
|
+
| Ohm | CouchPotato |
|
43
|
+
| Redis | ActiveRecord |
|
44
|
+
| Redis | DataMapper |
|
45
|
+
| Redis | MongoMapper |
|
46
|
+
| Redis | Mongoid |
|
47
|
+
| Redis | CouchPotato |
|
48
|
+
| Redis | Ohm |
|
@@ -1,10 +1,11 @@
|
|
1
|
+
orms_pattern = /(ActiveRecord|DataMapper|MongoMapper|Mongoid|CouchPotato|Redis|Ohm)/
|
1
2
|
|
2
|
-
Given /^I am using
|
3
|
+
Given /^I am using #{orms_pattern}$/ do |orm|
|
3
4
|
@feature_runner = FeatureRunner.new
|
4
5
|
@feature_runner.orm = orm
|
5
6
|
end
|
6
7
|
|
7
|
-
Given /^I am using
|
8
|
+
Given /^I am using #{orms_pattern} and #{orms_pattern}$/ do |orm1,orm2|
|
8
9
|
@feature_runner = FeatureRunner.new
|
9
10
|
@feature_runner.orm = orm1
|
10
11
|
@feature_runner.another_orm = orm2
|
@@ -0,0 +1,31 @@
|
|
1
|
+
Given /^I have setup database cleaner to clean multiple databases using ohm$/ do
|
2
|
+
#DatabaseCleaner
|
3
|
+
# require "#{File.dirname(__FILE__)}/../../../lib/ohm_models"
|
4
|
+
#
|
5
|
+
# DatabaseCleaner[:ohm, {:connection => ENV['REDIS_URL_ONE']} ].strategy = :truncation
|
6
|
+
# DatabaseCleaner[:ohm, {:connection => ENV['REDIS_URL_TWO']} ].strategy = :truncation
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I create a widget using ohm$/ do
|
10
|
+
OhmWidget.create!
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^I should see ([\d]+) widget using ohm$/ do |widget_count|
|
14
|
+
OhmWidget.count.should == widget_count.to_i
|
15
|
+
end
|
16
|
+
|
17
|
+
When /^I create a widget in one db using ohm$/ do
|
18
|
+
OhmWidgetUsingDatabaseOne.create!
|
19
|
+
end
|
20
|
+
|
21
|
+
When /^I create a widget in another db using ohm$/ do
|
22
|
+
OhmWidgetUsingDatabaseTwo.create!
|
23
|
+
end
|
24
|
+
|
25
|
+
Then /^I should see ([\d]+) widget in one db using ohm$/ do |widget_count|
|
26
|
+
OhmWidgetUsingDatabaseOne.count.should == widget_count.to_i
|
27
|
+
end
|
28
|
+
|
29
|
+
Then /^I should see ([\d]+) widget in another db using ohm$/ do |widget_count|
|
30
|
+
OhmWidgetUsingDatabaseTwo.count.should == widget_count.to_i
|
31
|
+
end
|