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.
Files changed (74) hide show
  1. data/Gemfile.lock +145 -0
  2. data/History.txt +43 -1
  3. data/README.textile +49 -1
  4. data/Rakefile +4 -0
  5. data/TODO +3 -0
  6. data/VERSION.yml +3 -2
  7. data/examples/Gemfile +46 -0
  8. data/examples/Gemfile.lock +145 -0
  9. data/examples/config/database.yml +7 -0
  10. data/examples/config/database.yml.example +8 -0
  11. data/examples/db/activerecord_one.db +0 -0
  12. data/examples/db/activerecord_two.db +0 -0
  13. data/examples/db/datamapper_default.db +0 -0
  14. data/examples/db/datamapper_one.db +0 -0
  15. data/examples/db/datamapper_two.db +0 -0
  16. data/examples/db/sqlite_databases_go_here +0 -0
  17. data/examples/features/example_multiple_db.feature +23 -0
  18. data/examples/features/example_multiple_orm.feature +22 -0
  19. data/examples/features/step_definitions/activerecord_steps.rb +31 -0
  20. data/examples/features/step_definitions/couchpotato_steps.rb +31 -0
  21. data/examples/features/step_definitions/datamapper_steps.rb +37 -0
  22. data/examples/features/step_definitions/mongoid_steps.rb +23 -0
  23. data/examples/features/step_definitions/mongomapper_steps.rb +31 -0
  24. data/examples/features/step_definitions/translation_steps.rb +55 -0
  25. data/examples/features/support/env.rb +49 -10
  26. data/examples/lib/activerecord_models.rb +34 -5
  27. data/examples/lib/couchpotato_models.rb +46 -6
  28. data/examples/lib/datamapper_models.rb +37 -3
  29. data/examples/lib/mongoid_models.rb +49 -0
  30. data/examples/lib/mongomapper_models.rb +36 -2
  31. data/features/cleaning.feature +1 -0
  32. data/features/cleaning_multiple_dbs.feature +20 -0
  33. data/features/cleaning_multiple_orms.feature +29 -0
  34. data/features/step_definitions/database_cleaner_steps.rb +21 -14
  35. data/features/support/feature_runner.rb +39 -0
  36. data/lib/database_cleaner/active_record/base.rb +46 -0
  37. data/lib/database_cleaner/active_record/transaction.rb +10 -10
  38. data/lib/database_cleaner/active_record/truncation.rb +42 -11
  39. data/lib/database_cleaner/base.rb +129 -0
  40. data/lib/database_cleaner/configuration.rb +45 -82
  41. data/lib/database_cleaner/couch_potato/base.rb +7 -0
  42. data/lib/database_cleaner/couch_potato/truncation.rb +4 -2
  43. data/lib/database_cleaner/cucumber.rb +0 -1
  44. data/lib/database_cleaner/data_mapper/base.rb +21 -0
  45. data/lib/database_cleaner/data_mapper/transaction.rb +10 -5
  46. data/lib/database_cleaner/data_mapper/truncation.rb +52 -19
  47. data/lib/database_cleaner/generic/base.rb +23 -0
  48. data/lib/database_cleaner/generic/truncation.rb +43 -0
  49. data/lib/database_cleaner/mongo_mapper/base.rb +20 -0
  50. data/lib/database_cleaner/mongo_mapper/truncation.rb +9 -3
  51. data/lib/database_cleaner/mongoid/base.rb +20 -0
  52. data/lib/database_cleaner/mongoid/truncation.rb +27 -0
  53. data/spec/database_cleaner/active_record/base_spec.rb +130 -0
  54. data/spec/database_cleaner/active_record/transaction_spec.rb +65 -0
  55. data/spec/database_cleaner/active_record/truncation_spec.rb +19 -18
  56. data/spec/database_cleaner/base_spec.rb +441 -0
  57. data/spec/database_cleaner/configuration_spec.rb +255 -65
  58. data/spec/database_cleaner/couch_potato/truncation_spec.rb +4 -3
  59. data/spec/database_cleaner/data_mapper/base_spec.rb +30 -0
  60. data/spec/database_cleaner/data_mapper/transaction_spec.rb +23 -0
  61. data/spec/database_cleaner/data_mapper/truncation_spec.rb +11 -0
  62. data/spec/database_cleaner/generic/base_spec.rb +22 -0
  63. data/spec/database_cleaner/generic/truncation_spec.rb +68 -0
  64. data/spec/database_cleaner/mongo_mapper/base_spec.rb +33 -0
  65. data/spec/database_cleaner/mongo_mapper/mongo_examples.rb +8 -0
  66. data/spec/database_cleaner/mongo_mapper/truncation_spec.rb +12 -19
  67. data/spec/database_cleaner/mongoid/truncation_spec.rb +84 -0
  68. data/spec/database_cleaner/shared_strategy_spec.rb +13 -0
  69. data/spec/rcov.opts +1 -0
  70. data/spec/spec.opts +1 -0
  71. data/spec/spec_helper.rb +10 -3
  72. metadata +83 -8
  73. data/examples/features/step_definitions/example_steps.rb +0 -8
  74. 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
@@ -4,3 +4,4 @@
4
4
  mtime
5
5
  --reverse
6
6
  --backtrace
7
+ --debugger
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,17 @@
1
- require 'rubygems'
2
- require 'spec'
3
- require 'activerecord'
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
- version: 0.5.0
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-02-22 00:00:00 -07:00
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/step_definitions/example_steps.rb
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/truncation_base.rb
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.5
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/example_steps.rb
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,8 +0,0 @@
1
- When /^I create a widget$/ do
2
- Widget.create!
3
- end
4
-
5
- Then /^I should see 1 widget$/ do
6
- Widget.count.should == 1
7
- end
8
-
@@ -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