database_cleaner 0.5.2 → 0.6.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/Gemfile.lock +145 -0
  2. data/History.txt +24 -1
  3. data/README.textile +48 -0
  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 +28 -2
  30. data/examples/lib/mongomapper_models.rb +35 -1
  31. data/features/cleaning_multiple_dbs.feature +20 -0
  32. data/features/cleaning_multiple_orms.feature +29 -0
  33. data/features/step_definitions/database_cleaner_steps.rb +20 -13
  34. data/features/support/feature_runner.rb +39 -0
  35. data/lib/database_cleaner/active_record/base.rb +46 -0
  36. data/lib/database_cleaner/active_record/transaction.rb +10 -10
  37. data/lib/database_cleaner/active_record/truncation.rb +17 -7
  38. data/lib/database_cleaner/base.rb +129 -0
  39. data/lib/database_cleaner/configuration.rb +45 -97
  40. data/lib/database_cleaner/couch_potato/base.rb +7 -0
  41. data/lib/database_cleaner/couch_potato/truncation.rb +4 -2
  42. data/lib/database_cleaner/cucumber.rb +0 -1
  43. data/lib/database_cleaner/data_mapper/base.rb +21 -0
  44. data/lib/database_cleaner/data_mapper/transaction.rb +10 -5
  45. data/lib/database_cleaner/data_mapper/truncation.rb +52 -19
  46. data/lib/database_cleaner/generic/base.rb +23 -0
  47. data/lib/database_cleaner/generic/truncation.rb +43 -0
  48. data/lib/database_cleaner/mongo_mapper/base.rb +20 -0
  49. data/lib/database_cleaner/mongo_mapper/truncation.rb +9 -3
  50. data/lib/database_cleaner/mongoid/base.rb +20 -0
  51. data/lib/database_cleaner/mongoid/truncation.rb +9 -5
  52. data/spec/database_cleaner/active_record/base_spec.rb +130 -0
  53. data/spec/database_cleaner/active_record/truncation_spec.rb +19 -18
  54. data/spec/database_cleaner/base_spec.rb +441 -0
  55. data/spec/database_cleaner/configuration_spec.rb +255 -68
  56. data/spec/database_cleaner/couch_potato/truncation_spec.rb +4 -3
  57. data/spec/database_cleaner/data_mapper/base_spec.rb +30 -0
  58. data/spec/database_cleaner/data_mapper/transaction_spec.rb +23 -0
  59. data/spec/database_cleaner/data_mapper/truncation_spec.rb +11 -0
  60. data/spec/database_cleaner/generic/base_spec.rb +22 -0
  61. data/spec/database_cleaner/generic/truncation_spec.rb +68 -0
  62. data/spec/database_cleaner/mongo_mapper/base_spec.rb +33 -0
  63. data/spec/database_cleaner/mongo_mapper/mongo_examples.rb +8 -0
  64. data/spec/database_cleaner/mongo_mapper/truncation_spec.rb +11 -18
  65. data/spec/database_cleaner/shared_strategy_spec.rb +13 -0
  66. data/spec/rcov.opts +1 -0
  67. data/spec/spec.opts +1 -0
  68. data/spec/spec_helper.rb +10 -3
  69. metadata +76 -8
  70. data/examples/features/step_definitions/example_steps.rb +0 -8
  71. data/lib/database_cleaner/truncation_base.rb +0 -41
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+ require 'database_cleaner/shared_strategy_spec'
3
+ require 'database_cleaner/generic/base'
4
+
5
+ module ::DatabaseCleaner
6
+ module Generic
7
+ class ExampleStrategy
8
+ include ::DatabaseCleaner::Generic::Base
9
+ end
10
+
11
+ describe ExampleStrategy do
12
+ context "class methods" do
13
+ subject { ExampleStrategy }
14
+ its(:available_strategies) { should be_empty }
15
+ end
16
+
17
+ it_should_behave_like "a generic strategy"
18
+
19
+ its(:db) { should == :default }
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+ require 'database_cleaner/generic/truncation'
3
+
4
+ module ::DatabaseCleaner
5
+ module Generic
6
+ class TruncationExample
7
+ include ::DatabaseCleaner::Generic::Truncation
8
+
9
+ def only
10
+ @only
11
+ end
12
+
13
+ def except
14
+ @tables_to_exclude
15
+ end
16
+ end
17
+
18
+ class MigrationExample < TruncationExample
19
+ def migration_storage_name
20
+ "migration_storage_name"
21
+ end
22
+ end
23
+
24
+ describe TruncationExample do
25
+ its(:start) { expect{ subject }.to_not raise_error }
26
+ its(:clean) { expect{ subject }.to raise_error(NotImplementedError) }
27
+
28
+ context "private methods" do
29
+ it { should_not respond_to(:tables_to_truncate) }
30
+ its(:tables_to_truncate) { expect{ subject }.to raise_error(NotImplementedError) }
31
+
32
+ it { should_not respond_to(:migration_storage_name) }
33
+ its(:migration_storage_name) { should be_nil }
34
+ end
35
+
36
+ describe "initialize" do
37
+ it { expect{ subject }.to_not raise_error }
38
+
39
+ it "should accept a hash of options" do
40
+ expect{ TruncationExample.new {} }.to_not raise_error
41
+ end
42
+
43
+ it { expect{ TruncationExample.new( { :a_random_param => "should raise ArgumentError" } ) }.to raise_error(ArgumentError) }
44
+ it { expect{ TruncationExample.new( { :except => "something",:only => "something else" } ) }.to raise_error(ArgumentError) }
45
+ it { expect{ TruncationExample.new( { :only => "something" } ) }.to_not raise_error(ArgumentError) }
46
+ it { expect{ TruncationExample.new( { :except => "something" } ) }.to_not raise_error(ArgumentError) }
47
+
48
+ context "" do
49
+ subject { TruncationExample.new( { :only => ["something"] } ) }
50
+ its(:only) { should == ["something"] }
51
+ its(:except) { should == [] }
52
+ end
53
+
54
+ context "" do
55
+ subject { TruncationExample.new( { :except => ["something"] } ) }
56
+ its(:only) { should == nil }
57
+ its(:except) { should include("something") }
58
+ end
59
+
60
+ context "" do
61
+ subject { MigrationExample.new }
62
+ its(:only) { should == nil }
63
+ its(:except) { should == ["migration_storage_name"] }
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+ require 'database_cleaner/mongo_mapper/base'
3
+ require 'database_cleaner/shared_strategy_spec'
4
+
5
+ module DatabaseCleaner
6
+ describe MongoMapper do
7
+ it { should respond_to(:available_strategies) }
8
+ end
9
+
10
+ module MongoMapper
11
+ class ExampleStrategy
12
+ include ::DatabaseCleaner::MongoMapper::Base
13
+ end
14
+
15
+ describe ExampleStrategy do
16
+
17
+ it_should_behave_like "a generic strategy"
18
+
19
+ describe "db" do
20
+ it { should respond_to(:db=) }
21
+
22
+ it "should store my desired db" do
23
+ subject.db = :my_db
24
+ subject.db.should == :my_db
25
+ end
26
+
27
+ it "should default to :default" do
28
+ subject.db.should == :default
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,8 @@
1
+ class Widget
2
+ include ::MongoMapper::Document
3
+ key :name, String
4
+ end
5
+ class Gadget
6
+ include ::MongoMapper::Document
7
+ key :name, String
8
+ end
@@ -1,33 +1,26 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper'
2
2
  require 'mongo_mapper'
3
3
  require 'database_cleaner/mongo_mapper/truncation'
4
-
5
- MongoMapper.connection = Mongo::Connection.new('127.0.0.1')
6
- TEST_DATABASE = 'database_cleaner_specs'
7
- MongoMapper.database = TEST_DATABASE
8
-
9
- class Widget
10
- include MongoMapper::Document
11
- key :name, String
12
- end
13
- class Gadget
14
- include MongoMapper::Document
15
- key :name, String
16
- end
17
-
4
+ require File.dirname(__FILE__) + '/mongo_examples'
18
5
 
19
6
  module DatabaseCleaner
20
7
  module MongoMapper
21
8
 
22
9
  describe Truncation do
10
+
11
+ #doing this in the file root breaks autospec, doing it before(:all) just fails the specs
12
+ before(:all) do
13
+ ::MongoMapper.connection = ::Mongo::Connection.new('127.0.0.1')
14
+ @test_db = 'database_cleaner_specs'
15
+ ::MongoMapper.database = @test_db
16
+ end
17
+
23
18
  before(:each) do
24
- ::MongoMapper.connection.drop_database(TEST_DATABASE)
25
- #::MongoMapper.connection.db(TEST_DATABASE).collections.each {|c| c.remove }
26
- #::MongoMapper.database = TEST_DATABASE
19
+ ::MongoMapper.connection.drop_database(@test_db)
27
20
  end
28
21
 
29
22
  def ensure_counts(expected_counts)
30
- # I had to add this sanity_check garbage because I was getting non-determinisc results from mongomapper at times..
23
+ # I had to add this sanity_check garbage because I was getting non-determinisc results from mongomapper at times..
31
24
  # very odd and disconcerting...
32
25
  sanity_check = expected_counts.delete(:sanity_check)
33
26
  begin
@@ -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 'active_record'
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.2
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-04-15 00:00:00 -06:00
20
+ date: 2010-08-22 00:00:00 -06:00
13
21
  default_executable:
14
22
  dependencies: []
15
23
 
@@ -24,13 +32,31 @@ 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
@@ -38,25 +64,46 @@ files:
38
64
  - examples/lib/mongoid_models.rb
39
65
  - examples/lib/mongomapper_models.rb
40
66
  - features/cleaning.feature
67
+ - features/cleaning_multiple_dbs.feature
68
+ - features/cleaning_multiple_orms.feature
41
69
  - features/step_definitions/database_cleaner_steps.rb
42
70
  - features/support/env.rb
71
+ - features/support/feature_runner.rb
43
72
  - lib/database_cleaner.rb
73
+ - lib/database_cleaner/active_record/base.rb
44
74
  - lib/database_cleaner/active_record/transaction.rb
45
75
  - lib/database_cleaner/active_record/truncation.rb
76
+ - lib/database_cleaner/base.rb
46
77
  - lib/database_cleaner/configuration.rb
78
+ - lib/database_cleaner/couch_potato/base.rb
47
79
  - lib/database_cleaner/couch_potato/truncation.rb
48
80
  - lib/database_cleaner/cucumber.rb
81
+ - lib/database_cleaner/data_mapper/base.rb
49
82
  - lib/database_cleaner/data_mapper/transaction.rb
50
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
51
87
  - lib/database_cleaner/mongo_mapper/truncation.rb
88
+ - lib/database_cleaner/mongoid/base.rb
52
89
  - lib/database_cleaner/mongoid/truncation.rb
53
- - lib/database_cleaner/truncation_base.rb
90
+ - spec/database_cleaner/active_record/base_spec.rb
54
91
  - spec/database_cleaner/active_record/transaction_spec.rb
55
92
  - spec/database_cleaner/active_record/truncation_spec.rb
93
+ - spec/database_cleaner/base_spec.rb
56
94
  - spec/database_cleaner/configuration_spec.rb
57
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
58
103
  - spec/database_cleaner/mongo_mapper/truncation_spec.rb
59
104
  - spec/database_cleaner/mongoid/truncation_spec.rb
105
+ - spec/database_cleaner/shared_strategy_spec.rb
106
+ - spec/rcov.opts
60
107
  - spec/spec.opts
61
108
  - spec/spec_helper.rb
62
109
  - LICENSE
@@ -71,33 +118,54 @@ rdoc_options:
71
118
  require_paths:
72
119
  - lib
73
120
  required_ruby_version: !ruby/object:Gem::Requirement
121
+ none: false
74
122
  requirements:
75
123
  - - ">="
76
124
  - !ruby/object:Gem::Version
125
+ hash: 3
126
+ segments:
127
+ - 0
77
128
  version: "0"
78
- version:
79
129
  required_rubygems_version: !ruby/object:Gem::Requirement
130
+ none: false
80
131
  requirements:
81
132
  - - ">="
82
133
  - !ruby/object:Gem::Version
134
+ hash: 3
135
+ segments:
136
+ - 0
83
137
  version: "0"
84
- version:
85
138
  requirements: []
86
139
 
87
140
  rubyforge_project:
88
- rubygems_version: 1.3.5
141
+ rubygems_version: 1.3.7
89
142
  signing_key:
90
143
  specification_version: 3
91
144
  summary: Strategies for cleaning databases. Can be used to ensure a clean state for testing.
92
145
  test_files:
146
+ - spec/database_cleaner/active_record/base_spec.rb
93
147
  - spec/database_cleaner/active_record/transaction_spec.rb
94
148
  - spec/database_cleaner/active_record/truncation_spec.rb
149
+ - spec/database_cleaner/base_spec.rb
95
150
  - spec/database_cleaner/configuration_spec.rb
96
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
97
159
  - spec/database_cleaner/mongo_mapper/truncation_spec.rb
98
160
  - spec/database_cleaner/mongoid/truncation_spec.rb
161
+ - spec/database_cleaner/shared_strategy_spec.rb
99
162
  - spec/spec_helper.rb
100
- - 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
101
169
  - examples/features/support/env.rb
102
170
  - examples/lib/activerecord_models.rb
103
171
  - examples/lib/couchpotato_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