skip_database 0.1.0
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/CHANGELOG +1 -0
- data/Manifest +8 -0
- data/README +90 -0
- data/Rakefile +13 -0
- data/lib/active_support/test_case.rb +35 -0
- data/lib/skip_database.rb +11 -0
- data/lib/skip_database/runner.rb +23 -0
- data/lib/test/unit/unit.rb +15 -0
- data/skip_database.gemspec +42 -0
- metadata +112 -0
data/CHANGELOG
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
v0.1.0. initial version
|
data/Manifest
ADDED
data/README
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
SkipDatabase
|
2
|
+
============
|
3
|
+
|
4
|
+
Adds functionality to Test::Unit tests descending from ActiveSupport::TestCase to toggle database execution within a single test suite.
|
5
|
+
|
6
|
+
Installation
|
7
|
+
------------
|
8
|
+
|
9
|
+
gem install skip_database
|
10
|
+
|
11
|
+
Usage
|
12
|
+
-----
|
13
|
+
|
14
|
+
In order to toggle database skipping, run tests with the --skip-database command-line option.
|
15
|
+
|
16
|
+
Within test classes descending from ActiveSupport::TestCase, commands executed within the skip_database block are only executed
|
17
|
+
when the skip-database option is set. Commands within the with_database block are only executed for tests run with database execution.
|
18
|
+
|
19
|
+
SkipDatabase uses "UnitRecord":http://github.com/dan-manges/unit-record to raise exceptions when database statements are executed. By default, ActiveRecord::Base is disconnected with the options :stub_associations set to true and :strategy set to :raise.
|
20
|
+
|
21
|
+
Immediately after ActiveRecord::Base is disconnected, SkipDatabase requires any files found in test/skip_database/ under the Rails root directory.
|
22
|
+
|
23
|
+
Example
|
24
|
+
-------
|
25
|
+
|
26
|
+
class UserTest < ActiveSupport::TestCase
|
27
|
+
|
28
|
+
def test_user_name_must_be_unique
|
29
|
+
|
30
|
+
user = User.new(:first => "Elwin", :last => "Ransom")
|
31
|
+
|
32
|
+
# this block won't be executed unless we're skipping the database
|
33
|
+
skip_database do
|
34
|
+
User.expects(:create!).with(:first => user.first, :last => user.last)
|
35
|
+
user.expects(:save).returns false
|
36
|
+
user.errors.add(:name, "must be unique")
|
37
|
+
end
|
38
|
+
|
39
|
+
User.create!(:first => "Elwin", :last => "Ransom")
|
40
|
+
assert !user.save
|
41
|
+
|
42
|
+
assert_equal user.errors.on(:name), "must be unique"
|
43
|
+
end
|
44
|
+
|
45
|
+
# Do not run the following tests when skipping database execution
|
46
|
+
with_database do
|
47
|
+
|
48
|
+
def test_complex_methods
|
49
|
+
Company.build_by_factory(:users => 3, :admin => 1)
|
50
|
+
|
51
|
+
users = User.find_by_sql <<-SQL
|
52
|
+
select * from users
|
53
|
+
join permissions on permissions.user_id = users.id
|
54
|
+
join companies on companies.id = users.company_id
|
55
|
+
where permissions.role = 'user' and companies.active is true
|
56
|
+
SQL
|
57
|
+
|
58
|
+
admins = User.find_by_sql <<-SQL
|
59
|
+
select * from users
|
60
|
+
join permissions on permissions.user_id = users.id
|
61
|
+
join companies on companies.id = users.company_id
|
62
|
+
where permissions.role = 'admin' and companies.active is true
|
63
|
+
SQL
|
64
|
+
|
65
|
+
assert_equal 2, users.size
|
66
|
+
assert_equal 1, admins.size
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
$ ruby test/unit/user_test.rb --skip-database
|
74
|
+
Loaded suite test/unit/user_test
|
75
|
+
Started
|
76
|
+
.
|
77
|
+
Finished in 0.01123 seconds.
|
78
|
+
|
79
|
+
1 tests, 4 assertions, 0 failures, 0 errors
|
80
|
+
|
81
|
+
$ ruby test/unit/user_test.rb
|
82
|
+
Loaded suite test/unit/user_test
|
83
|
+
Started
|
84
|
+
..
|
85
|
+
Finished in 0.31526 seconds.
|
86
|
+
|
87
|
+
2 tests, 4 assertions, 0 failures, 0 errors
|
88
|
+
|
89
|
+
|
90
|
+
Copyright (c) 2010 Mike Bradford <mbradford@mumboe.com>, released under the MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "rake"
|
3
|
+
require "echoe"
|
4
|
+
|
5
|
+
Echoe.new("skip_database", "0.1.0") do |p|
|
6
|
+
p.description = "Database skipping unility for Test::Unit and ActiveSupport::TestCase"
|
7
|
+
p.author = "Mike Bradford"
|
8
|
+
p.email = "mbradford@mumboe.com"
|
9
|
+
p.url = "http://development.mumboe.com/"
|
10
|
+
p.development_dependencies = ["rails","active_record","active_support","unit_record"]
|
11
|
+
end
|
12
|
+
|
13
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module ActiveSupport
|
2
|
+
class TestCase
|
3
|
+
|
4
|
+
class << self
|
5
|
+
# the block will be called only if database execution is skipped
|
6
|
+
def skip_database(&block)
|
7
|
+
block.bind(self).call if SkipDatabase::Runner.skipping_database
|
8
|
+
end
|
9
|
+
|
10
|
+
# the block will not be called if database execution is skipped
|
11
|
+
def with_database(&block)
|
12
|
+
block.bind(self).call unless SkipDatabase::Runner.skipping_database
|
13
|
+
end
|
14
|
+
|
15
|
+
def skipping_database?
|
16
|
+
SkipDatabase::Runner.skipping_database
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def skipping_database?
|
21
|
+
SkipDatabase::Runner.skipping_database
|
22
|
+
end
|
23
|
+
|
24
|
+
# the block will be called only if database execution is skipped
|
25
|
+
def skip_database(&block)
|
26
|
+
block.bind(self).call if SkipDatabase::Runner.skipping_database
|
27
|
+
end
|
28
|
+
|
29
|
+
# the block will not be called if database execution is skipped
|
30
|
+
def with_database(&block)
|
31
|
+
block.bind(self).call unless SkipDatabase::Runner.skipping_database
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.join File.dirname(__FILE__), "test/unit/unit"
|
2
|
+
require File.join File.dirname(__FILE__), "skip_database/runner"
|
3
|
+
require File.join File.dirname(__FILE__), "active_support/test_case"
|
4
|
+
|
5
|
+
OptionParser.new do |opts|
|
6
|
+
opts.on("-s", "--skip-database") do |e|
|
7
|
+
SkipDatabase::Runner.skipping_database = true
|
8
|
+
end
|
9
|
+
end.parse! [ARGV.delete("-s") || ARGV.delete("--skip-database")]
|
10
|
+
|
11
|
+
at_exit { exit SkipDatabase::Runner.run unless $! || Test::Unit.run? }
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module SkipDatabase
|
2
|
+
class Runner < Test::Unit::AutoRunner
|
3
|
+
class << self
|
4
|
+
attr_accessor :skipping_database
|
5
|
+
|
6
|
+
# run the test suite, disconnecting the database and requiring any files in test/skip_database if skip-database option set
|
7
|
+
def run(force_standalone=false, default_dir=nil, argv=ARGV, &block)
|
8
|
+
if self.skipping_database == true
|
9
|
+
require "unit_record"
|
10
|
+
ActiveRecord::Base.disconnect! :stub_associations => true, :strategy => :raise
|
11
|
+
dir = Rails.root.join("test/skip_database")
|
12
|
+
Dir["#{dir}/*"].each { |file| require "#{dir}/#{File.basename(file, File.extname(file))}" }
|
13
|
+
end
|
14
|
+
r = new(force_standalone || standalone?, &block)
|
15
|
+
r.base = default_dir
|
16
|
+
# adding this option here so that it will show up on the help menu
|
17
|
+
r.options.on("-s", "--skip-database", "Raise an exception when database calls are executed") {}
|
18
|
+
r.process_args(argv)
|
19
|
+
r.run
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# redifining this file to remove the original at_exit block
|
2
|
+
require 'test/unit/testcase'
|
3
|
+
require 'test/unit/autorunner'
|
4
|
+
|
5
|
+
module Test # :nodoc:
|
6
|
+
module Unit
|
7
|
+
def self.run=(flag)
|
8
|
+
@run = flag
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.run?
|
12
|
+
@run ||= false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{skip_database}
|
5
|
+
s.version = "0.1.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Mike Bradford"]
|
9
|
+
s.date = %q{2010-02-16}
|
10
|
+
s.description = %q{Database skipping unility for Test::Unit and ActiveSupport::TestCase}
|
11
|
+
s.email = %q{mbradford@mumboe.com}
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG", "README", "lib/active_support/test_case.rb", "lib/skip_database.rb", "lib/skip_database/runner.rb", "lib/test/unit/unit.rb"]
|
13
|
+
s.files = ["CHANGELOG", "Manifest", "README", "Rakefile", "lib/active_support/test_case.rb", "lib/skip_database.rb", "lib/skip_database/runner.rb", "lib/test/unit/unit.rb", "skip_database.gemspec"]
|
14
|
+
s.homepage = %q{http://development.mumboe.com/}
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Skip_database", "--main", "README"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubyforge_project = %q{skip_database}
|
18
|
+
s.rubygems_version = %q{1.3.5}
|
19
|
+
s.summary = %q{Database skipping unility for Test::Unit and ActiveSupport::TestCase}
|
20
|
+
|
21
|
+
if s.respond_to? :specification_version then
|
22
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
23
|
+
s.specification_version = 3
|
24
|
+
|
25
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
26
|
+
s.add_development_dependency(%q<rails>, [">= 0"])
|
27
|
+
s.add_development_dependency(%q<active_record>, [">= 0"])
|
28
|
+
s.add_development_dependency(%q<active_support>, [">= 0"])
|
29
|
+
s.add_development_dependency(%q<unit_record>, [">= 0"])
|
30
|
+
else
|
31
|
+
s.add_dependency(%q<rails>, [">= 0"])
|
32
|
+
s.add_dependency(%q<active_record>, [">= 0"])
|
33
|
+
s.add_dependency(%q<active_support>, [">= 0"])
|
34
|
+
s.add_dependency(%q<unit_record>, [">= 0"])
|
35
|
+
end
|
36
|
+
else
|
37
|
+
s.add_dependency(%q<rails>, [">= 0"])
|
38
|
+
s.add_dependency(%q<active_record>, [">= 0"])
|
39
|
+
s.add_dependency(%q<active_support>, [">= 0"])
|
40
|
+
s.add_dependency(%q<unit_record>, [">= 0"])
|
41
|
+
end
|
42
|
+
end
|
metadata
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: skip_database
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mike Bradford
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-02-16 00:00:00 -06:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rails
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: active_record
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: active_support
|
37
|
+
type: :development
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: "0"
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: unit_record
|
47
|
+
type: :development
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0"
|
54
|
+
version:
|
55
|
+
description: Database skipping unility for Test::Unit and ActiveSupport::TestCase
|
56
|
+
email: mbradford@mumboe.com
|
57
|
+
executables: []
|
58
|
+
|
59
|
+
extensions: []
|
60
|
+
|
61
|
+
extra_rdoc_files:
|
62
|
+
- CHANGELOG
|
63
|
+
- README
|
64
|
+
- lib/active_support/test_case.rb
|
65
|
+
- lib/skip_database.rb
|
66
|
+
- lib/skip_database/runner.rb
|
67
|
+
- lib/test/unit/unit.rb
|
68
|
+
files:
|
69
|
+
- CHANGELOG
|
70
|
+
- Manifest
|
71
|
+
- README
|
72
|
+
- Rakefile
|
73
|
+
- lib/active_support/test_case.rb
|
74
|
+
- lib/skip_database.rb
|
75
|
+
- lib/skip_database/runner.rb
|
76
|
+
- lib/test/unit/unit.rb
|
77
|
+
- skip_database.gemspec
|
78
|
+
has_rdoc: true
|
79
|
+
homepage: http://development.mumboe.com/
|
80
|
+
licenses: []
|
81
|
+
|
82
|
+
post_install_message:
|
83
|
+
rdoc_options:
|
84
|
+
- --line-numbers
|
85
|
+
- --inline-source
|
86
|
+
- --title
|
87
|
+
- Skip_database
|
88
|
+
- --main
|
89
|
+
- README
|
90
|
+
require_paths:
|
91
|
+
- lib
|
92
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: "0"
|
97
|
+
version:
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: "1.2"
|
103
|
+
version:
|
104
|
+
requirements: []
|
105
|
+
|
106
|
+
rubyforge_project: skip_database
|
107
|
+
rubygems_version: 1.3.5
|
108
|
+
signing_key:
|
109
|
+
specification_version: 3
|
110
|
+
summary: Database skipping unility for Test::Unit and ActiveSupport::TestCase
|
111
|
+
test_files: []
|
112
|
+
|