database_cleaner 0.5.0 → 0.6.0.rc.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 +145 -0
- data/History.txt +43 -1
- data/README.textile +49 -1
- data/Rakefile +4 -0
- data/TODO +3 -0
- data/VERSION.yml +3 -2
- data/examples/Gemfile +46 -0
- data/examples/Gemfile.lock +145 -0
- data/examples/config/database.yml +7 -0
- data/examples/config/database.yml.example +8 -0
- data/examples/db/activerecord_one.db +0 -0
- data/examples/db/activerecord_two.db +0 -0
- data/examples/db/datamapper_default.db +0 -0
- data/examples/db/datamapper_one.db +0 -0
- data/examples/db/datamapper_two.db +0 -0
- data/examples/db/sqlite_databases_go_here +0 -0
- data/examples/features/example_multiple_db.feature +23 -0
- data/examples/features/example_multiple_orm.feature +22 -0
- data/examples/features/step_definitions/activerecord_steps.rb +31 -0
- data/examples/features/step_definitions/couchpotato_steps.rb +31 -0
- data/examples/features/step_definitions/datamapper_steps.rb +37 -0
- data/examples/features/step_definitions/mongoid_steps.rb +23 -0
- data/examples/features/step_definitions/mongomapper_steps.rb +31 -0
- data/examples/features/step_definitions/translation_steps.rb +55 -0
- data/examples/features/support/env.rb +49 -10
- data/examples/lib/activerecord_models.rb +34 -5
- data/examples/lib/couchpotato_models.rb +46 -6
- data/examples/lib/datamapper_models.rb +37 -3
- data/examples/lib/mongoid_models.rb +49 -0
- data/examples/lib/mongomapper_models.rb +36 -2
- data/features/cleaning.feature +1 -0
- data/features/cleaning_multiple_dbs.feature +20 -0
- data/features/cleaning_multiple_orms.feature +29 -0
- data/features/step_definitions/database_cleaner_steps.rb +21 -14
- data/features/support/feature_runner.rb +39 -0
- data/lib/database_cleaner/active_record/base.rb +46 -0
- data/lib/database_cleaner/active_record/transaction.rb +10 -10
- data/lib/database_cleaner/active_record/truncation.rb +42 -11
- data/lib/database_cleaner/base.rb +129 -0
- data/lib/database_cleaner/configuration.rb +45 -82
- data/lib/database_cleaner/couch_potato/base.rb +7 -0
- data/lib/database_cleaner/couch_potato/truncation.rb +4 -2
- data/lib/database_cleaner/cucumber.rb +0 -1
- data/lib/database_cleaner/data_mapper/base.rb +21 -0
- data/lib/database_cleaner/data_mapper/transaction.rb +10 -5
- data/lib/database_cleaner/data_mapper/truncation.rb +52 -19
- data/lib/database_cleaner/generic/base.rb +23 -0
- data/lib/database_cleaner/generic/truncation.rb +43 -0
- data/lib/database_cleaner/mongo_mapper/base.rb +20 -0
- data/lib/database_cleaner/mongo_mapper/truncation.rb +9 -3
- data/lib/database_cleaner/mongoid/base.rb +20 -0
- data/lib/database_cleaner/mongoid/truncation.rb +27 -0
- data/spec/database_cleaner/active_record/base_spec.rb +130 -0
- data/spec/database_cleaner/active_record/transaction_spec.rb +65 -0
- data/spec/database_cleaner/active_record/truncation_spec.rb +19 -18
- data/spec/database_cleaner/base_spec.rb +441 -0
- data/spec/database_cleaner/configuration_spec.rb +255 -65
- data/spec/database_cleaner/couch_potato/truncation_spec.rb +4 -3
- data/spec/database_cleaner/data_mapper/base_spec.rb +30 -0
- data/spec/database_cleaner/data_mapper/transaction_spec.rb +23 -0
- data/spec/database_cleaner/data_mapper/truncation_spec.rb +11 -0
- data/spec/database_cleaner/generic/base_spec.rb +22 -0
- data/spec/database_cleaner/generic/truncation_spec.rb +68 -0
- data/spec/database_cleaner/mongo_mapper/base_spec.rb +33 -0
- data/spec/database_cleaner/mongo_mapper/mongo_examples.rb +8 -0
- data/spec/database_cleaner/mongo_mapper/truncation_spec.rb +12 -19
- data/spec/database_cleaner/mongoid/truncation_spec.rb +84 -0
- data/spec/database_cleaner/shared_strategy_spec.rb +13 -0
- data/spec/rcov.opts +1 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +10 -3
- metadata +83 -8
- data/examples/features/step_definitions/example_steps.rb +0 -8
- data/lib/database_cleaner/truncation_base.rb +0 -41
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
require 'mongoid'
|
|
3
|
+
require 'database_cleaner/mongoid/truncation'
|
|
4
|
+
|
|
5
|
+
TEST_DATABASE = 'database_cleaner_specs'
|
|
6
|
+
Mongoid.configure do |config|
|
|
7
|
+
name = TEST_DATABASE
|
|
8
|
+
config.master = Mongo::Connection.new.db(name)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class TestClassA
|
|
12
|
+
include Mongoid::Document
|
|
13
|
+
field :name
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class TestClassB
|
|
17
|
+
include Mongoid::Document
|
|
18
|
+
field :name
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
module DatabaseCleaner
|
|
23
|
+
module Mongoid
|
|
24
|
+
|
|
25
|
+
describe Truncation do
|
|
26
|
+
before(:each) do
|
|
27
|
+
::Mongoid.database.connection.drop_database(TEST_DATABASE)
|
|
28
|
+
#::MongoMapper.connection.db(TEST_DATABASE).collections.each {|c| c.remove }
|
|
29
|
+
#::MongoMapper.database = TEST_DATABASE
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def ensure_counts(expected_counts)
|
|
33
|
+
# I had to add this sanity_check garbage because I was getting non-determinisc results from mongomapper at times..
|
|
34
|
+
# very odd and disconcerting...
|
|
35
|
+
sanity_check = expected_counts.delete(:sanity_check)
|
|
36
|
+
begin
|
|
37
|
+
expected_counts.each do |model_class, expected_count|
|
|
38
|
+
model_class.count.should equal(expected_count), "#{model_class} expected to have a count of #{expected_count} but was #{model_class.count}"
|
|
39
|
+
end
|
|
40
|
+
rescue Spec::Expectations::ExpectationNotMetError => e
|
|
41
|
+
raise !sanity_check ? e : Spec::ExpectationNotMetError::ExpectationNotMetError.new("SANITY CHECK FAILURE! This should never happen here: #{e.message}")
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def create_testclassa(attrs={})
|
|
46
|
+
TestClassA.new({:name => 'some testclassa'}.merge(attrs)).save!
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def create_testclassb(attrs={})
|
|
50
|
+
TestClassB.new({:name => 'some testclassb'}.merge(attrs)).save!
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "truncates all collections by default" do
|
|
54
|
+
create_testclassa
|
|
55
|
+
create_testclassb
|
|
56
|
+
ensure_counts(TestClassA => 1, TestClassB => 1, :sanity_check => true)
|
|
57
|
+
Truncation.new.clean
|
|
58
|
+
ensure_counts(TestClassA => 0, TestClassB => 0)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context "when collections are provided to the :only option" do
|
|
62
|
+
it "only truncates the specified collections" do
|
|
63
|
+
create_testclassa
|
|
64
|
+
create_testclassb
|
|
65
|
+
ensure_counts(TestClassA => 1, TestClassB => 1, :sanity_check => true)
|
|
66
|
+
Truncation.new(:only => ['test_class_as']).clean
|
|
67
|
+
ensure_counts(TestClassA => 0, TestClassB => 1)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
context "when collections are provided to the :except option" do
|
|
72
|
+
it "truncates all but the specified collections" do
|
|
73
|
+
create_testclassa
|
|
74
|
+
create_testclassb
|
|
75
|
+
ensure_counts(TestClassA => 1, TestClassB => 1, :sanity_check => true)
|
|
76
|
+
Truncation.new(:except => ['test_class_as']).clean
|
|
77
|
+
ensure_counts(TestClassA => 1, TestClassB => 0)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
shared_examples_for "a generic strategy" do
|
|
2
|
+
it { should respond_to(:db) }
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
shared_examples_for "a generic truncation strategy" do
|
|
6
|
+
it { should respond_to(:start) }
|
|
7
|
+
it { should respond_to(:clean) }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
shared_examples_for "a generic transaction strategy" do
|
|
11
|
+
it { should respond_to(:start) }
|
|
12
|
+
it { should respond_to(:clean) }
|
|
13
|
+
end
|
data/spec/rcov.opts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
--exclude "spec/*,vendor/*,examples/*,features/*,Users/*/.rvm/gems/*/gems/*"
|
data/spec/spec.opts
CHANGED
data/spec/spec_helper.rb
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
require
|
|
2
|
-
|
|
3
|
-
require
|
|
1
|
+
require "rubygems"
|
|
2
|
+
|
|
3
|
+
require "bundler"
|
|
4
|
+
Bundler.setup
|
|
5
|
+
|
|
4
6
|
|
|
7
|
+
require 'spec'
|
|
8
|
+
#require 'active_record'
|
|
9
|
+
#require 'mongo_mapper'
|
|
5
10
|
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
|
6
11
|
require 'database_cleaner'
|
|
7
12
|
|
|
13
|
+
|
|
14
|
+
|
|
8
15
|
Spec::Runner.configure do |config|
|
|
9
16
|
|
|
10
17
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: database_cleaner
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
4
|
+
hash: 15424119
|
|
5
|
+
prerelease: true
|
|
6
|
+
segments:
|
|
7
|
+
- 0
|
|
8
|
+
- 6
|
|
9
|
+
- 0
|
|
10
|
+
- rc
|
|
11
|
+
- 1
|
|
12
|
+
version: 0.6.0.rc.1
|
|
5
13
|
platform: ruby
|
|
6
14
|
authors:
|
|
7
15
|
- Ben Mabey
|
|
@@ -9,7 +17,7 @@ autorequire:
|
|
|
9
17
|
bindir: bin
|
|
10
18
|
cert_chain: []
|
|
11
19
|
|
|
12
|
-
date: 2010-
|
|
20
|
+
date: 2010-08-22 00:00:00 -06:00
|
|
13
21
|
default_executable:
|
|
14
22
|
dependencies: []
|
|
15
23
|
|
|
@@ -24,35 +32,78 @@ extra_rdoc_files:
|
|
|
24
32
|
- README.textile
|
|
25
33
|
- TODO
|
|
26
34
|
files:
|
|
35
|
+
- Gemfile.lock
|
|
27
36
|
- History.txt
|
|
28
37
|
- README.textile
|
|
29
38
|
- Rakefile
|
|
30
39
|
- VERSION.yml
|
|
31
40
|
- cucumber.yml
|
|
41
|
+
- examples/Gemfile
|
|
42
|
+
- examples/Gemfile.lock
|
|
43
|
+
- examples/config/database.yml
|
|
44
|
+
- examples/config/database.yml.example
|
|
45
|
+
- examples/db/activerecord_one.db
|
|
46
|
+
- examples/db/activerecord_two.db
|
|
47
|
+
- examples/db/datamapper_default.db
|
|
48
|
+
- examples/db/datamapper_one.db
|
|
49
|
+
- examples/db/datamapper_two.db
|
|
50
|
+
- examples/db/sqlite_databases_go_here
|
|
32
51
|
- examples/features/example.feature
|
|
33
|
-
- examples/features/
|
|
52
|
+
- examples/features/example_multiple_db.feature
|
|
53
|
+
- examples/features/example_multiple_orm.feature
|
|
54
|
+
- examples/features/step_definitions/activerecord_steps.rb
|
|
55
|
+
- examples/features/step_definitions/couchpotato_steps.rb
|
|
56
|
+
- examples/features/step_definitions/datamapper_steps.rb
|
|
57
|
+
- examples/features/step_definitions/mongoid_steps.rb
|
|
58
|
+
- examples/features/step_definitions/mongomapper_steps.rb
|
|
59
|
+
- examples/features/step_definitions/translation_steps.rb
|
|
34
60
|
- examples/features/support/env.rb
|
|
35
61
|
- examples/lib/activerecord_models.rb
|
|
36
62
|
- examples/lib/couchpotato_models.rb
|
|
37
63
|
- examples/lib/datamapper_models.rb
|
|
64
|
+
- examples/lib/mongoid_models.rb
|
|
38
65
|
- examples/lib/mongomapper_models.rb
|
|
39
66
|
- features/cleaning.feature
|
|
67
|
+
- features/cleaning_multiple_dbs.feature
|
|
68
|
+
- features/cleaning_multiple_orms.feature
|
|
40
69
|
- features/step_definitions/database_cleaner_steps.rb
|
|
41
70
|
- features/support/env.rb
|
|
71
|
+
- features/support/feature_runner.rb
|
|
42
72
|
- lib/database_cleaner.rb
|
|
73
|
+
- lib/database_cleaner/active_record/base.rb
|
|
43
74
|
- lib/database_cleaner/active_record/transaction.rb
|
|
44
75
|
- lib/database_cleaner/active_record/truncation.rb
|
|
76
|
+
- lib/database_cleaner/base.rb
|
|
45
77
|
- lib/database_cleaner/configuration.rb
|
|
78
|
+
- lib/database_cleaner/couch_potato/base.rb
|
|
46
79
|
- lib/database_cleaner/couch_potato/truncation.rb
|
|
47
80
|
- lib/database_cleaner/cucumber.rb
|
|
81
|
+
- lib/database_cleaner/data_mapper/base.rb
|
|
48
82
|
- lib/database_cleaner/data_mapper/transaction.rb
|
|
49
83
|
- lib/database_cleaner/data_mapper/truncation.rb
|
|
84
|
+
- lib/database_cleaner/generic/base.rb
|
|
85
|
+
- lib/database_cleaner/generic/truncation.rb
|
|
86
|
+
- lib/database_cleaner/mongo_mapper/base.rb
|
|
50
87
|
- lib/database_cleaner/mongo_mapper/truncation.rb
|
|
51
|
-
- lib/database_cleaner/
|
|
88
|
+
- lib/database_cleaner/mongoid/base.rb
|
|
89
|
+
- lib/database_cleaner/mongoid/truncation.rb
|
|
90
|
+
- spec/database_cleaner/active_record/base_spec.rb
|
|
91
|
+
- spec/database_cleaner/active_record/transaction_spec.rb
|
|
52
92
|
- spec/database_cleaner/active_record/truncation_spec.rb
|
|
93
|
+
- spec/database_cleaner/base_spec.rb
|
|
53
94
|
- spec/database_cleaner/configuration_spec.rb
|
|
54
95
|
- spec/database_cleaner/couch_potato/truncation_spec.rb
|
|
96
|
+
- spec/database_cleaner/data_mapper/base_spec.rb
|
|
97
|
+
- spec/database_cleaner/data_mapper/transaction_spec.rb
|
|
98
|
+
- spec/database_cleaner/data_mapper/truncation_spec.rb
|
|
99
|
+
- spec/database_cleaner/generic/base_spec.rb
|
|
100
|
+
- spec/database_cleaner/generic/truncation_spec.rb
|
|
101
|
+
- spec/database_cleaner/mongo_mapper/base_spec.rb
|
|
102
|
+
- spec/database_cleaner/mongo_mapper/mongo_examples.rb
|
|
55
103
|
- spec/database_cleaner/mongo_mapper/truncation_spec.rb
|
|
104
|
+
- spec/database_cleaner/mongoid/truncation_spec.rb
|
|
105
|
+
- spec/database_cleaner/shared_strategy_spec.rb
|
|
106
|
+
- spec/rcov.opts
|
|
56
107
|
- spec/spec.opts
|
|
57
108
|
- spec/spec_helper.rb
|
|
58
109
|
- LICENSE
|
|
@@ -67,33 +118,57 @@ rdoc_options:
|
|
|
67
118
|
require_paths:
|
|
68
119
|
- lib
|
|
69
120
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
121
|
+
none: false
|
|
70
122
|
requirements:
|
|
71
123
|
- - ">="
|
|
72
124
|
- !ruby/object:Gem::Version
|
|
125
|
+
hash: 3
|
|
126
|
+
segments:
|
|
127
|
+
- 0
|
|
73
128
|
version: "0"
|
|
74
|
-
version:
|
|
75
129
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
|
+
none: false
|
|
76
131
|
requirements:
|
|
77
132
|
- - ">="
|
|
78
133
|
- !ruby/object:Gem::Version
|
|
134
|
+
hash: 3
|
|
135
|
+
segments:
|
|
136
|
+
- 0
|
|
79
137
|
version: "0"
|
|
80
|
-
version:
|
|
81
138
|
requirements: []
|
|
82
139
|
|
|
83
140
|
rubyforge_project:
|
|
84
|
-
rubygems_version: 1.3.
|
|
141
|
+
rubygems_version: 1.3.7
|
|
85
142
|
signing_key:
|
|
86
143
|
specification_version: 3
|
|
87
144
|
summary: Strategies for cleaning databases. Can be used to ensure a clean state for testing.
|
|
88
145
|
test_files:
|
|
146
|
+
- spec/database_cleaner/active_record/base_spec.rb
|
|
147
|
+
- spec/database_cleaner/active_record/transaction_spec.rb
|
|
89
148
|
- spec/database_cleaner/active_record/truncation_spec.rb
|
|
149
|
+
- spec/database_cleaner/base_spec.rb
|
|
90
150
|
- spec/database_cleaner/configuration_spec.rb
|
|
91
151
|
- spec/database_cleaner/couch_potato/truncation_spec.rb
|
|
152
|
+
- spec/database_cleaner/data_mapper/base_spec.rb
|
|
153
|
+
- spec/database_cleaner/data_mapper/transaction_spec.rb
|
|
154
|
+
- spec/database_cleaner/data_mapper/truncation_spec.rb
|
|
155
|
+
- spec/database_cleaner/generic/base_spec.rb
|
|
156
|
+
- spec/database_cleaner/generic/truncation_spec.rb
|
|
157
|
+
- spec/database_cleaner/mongo_mapper/base_spec.rb
|
|
158
|
+
- spec/database_cleaner/mongo_mapper/mongo_examples.rb
|
|
92
159
|
- spec/database_cleaner/mongo_mapper/truncation_spec.rb
|
|
160
|
+
- spec/database_cleaner/mongoid/truncation_spec.rb
|
|
161
|
+
- spec/database_cleaner/shared_strategy_spec.rb
|
|
93
162
|
- spec/spec_helper.rb
|
|
94
|
-
- examples/features/step_definitions/
|
|
163
|
+
- examples/features/step_definitions/activerecord_steps.rb
|
|
164
|
+
- examples/features/step_definitions/couchpotato_steps.rb
|
|
165
|
+
- examples/features/step_definitions/datamapper_steps.rb
|
|
166
|
+
- examples/features/step_definitions/mongoid_steps.rb
|
|
167
|
+
- examples/features/step_definitions/mongomapper_steps.rb
|
|
168
|
+
- examples/features/step_definitions/translation_steps.rb
|
|
95
169
|
- examples/features/support/env.rb
|
|
96
170
|
- examples/lib/activerecord_models.rb
|
|
97
171
|
- examples/lib/couchpotato_models.rb
|
|
98
172
|
- examples/lib/datamapper_models.rb
|
|
173
|
+
- examples/lib/mongoid_models.rb
|
|
99
174
|
- examples/lib/mongomapper_models.rb
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
module DatabaseCleaner
|
|
2
|
-
class TruncationBase
|
|
3
|
-
|
|
4
|
-
def initialize(options = {})
|
|
5
|
-
if !options.empty? && !(options.keys - [:only, :except]).empty?
|
|
6
|
-
raise ArgumentError, "The only valid options are :only and :except. You specified #{options.keys.join(',')}."
|
|
7
|
-
end
|
|
8
|
-
if options.has_key?(:only) && options.has_key?(:except)
|
|
9
|
-
raise ArgumentError, "You may only specify either :only or :either. Doing both doesn't really make sense does it?"
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
@only = options[:only]
|
|
13
|
-
@tables_to_exclude = (options[:except] || [])
|
|
14
|
-
if migration_storage = migration_storage_name
|
|
15
|
-
@tables_to_exclude << migration_storage
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def start
|
|
20
|
-
# no-op
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def clean
|
|
24
|
-
raise NotImplementedError
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
private
|
|
29
|
-
|
|
30
|
-
def tables_to_truncate
|
|
31
|
-
raise NotImplementedError
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# overwrite in subclasses
|
|
35
|
-
# default implementation given because migration storage need not be present
|
|
36
|
-
def migration_storage_name
|
|
37
|
-
nil
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
end
|
|
41
|
-
end
|