rspec_candy 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +5 -4
- data/README.md +5 -13
- data/Rakefile +18 -25
- data/gemfiles/Gemfile.rspec1-rails2 +17 -0
- data/gemfiles/Gemfile.rspec1-rails2.lock +31 -0
- data/gemfiles/Gemfile.rspec2-rails3 +9 -0
- data/gemfiles/Gemfile.rspec2-rails3.lock +51 -0
- data/gemfiles/Gemfile.rspec3-rails4 +9 -0
- data/gemfiles/Gemfile.rspec3-rails4.lock +61 -0
- data/lib/rspec_candy/base.rb +1 -0
- data/lib/rspec_candy/helpers.rb +1 -1
- data/lib/rspec_candy/helpers/it_should_act_like.rb +2 -2
- data/lib/rspec_candy/helpers/rails/it_should_run_callbacks.rb +6 -26
- data/lib/rspec_candy/helpers/rails/store_with_values.rb +7 -2
- data/lib/rspec_candy/helpers/stub_any_instance.rb +2 -2
- data/lib/rspec_candy/switcher.rb +27 -15
- data/lib/rspec_candy/version.rb +1 -1
- data/spec/{shared/rspec_candy → rspec_candy}/helpers/disposable_copy_spec.rb +1 -1
- data/spec/{shared/rspec_candy → rspec_candy}/helpers/it_should_act_like_spec.rb +0 -0
- data/spec/{shared/rspec_candy → rspec_candy}/helpers/new_with_stubs_spec.rb +0 -0
- data/spec/rspec_candy/helpers/rails/it_should_run_callbacks_spec.rb +84 -0
- data/spec/{shared/rspec_candy → rspec_candy}/helpers/rails/prevent_storage_spec.rb +1 -1
- data/spec/{shared/rspec_candy → rspec_candy}/helpers/rails/store_with_values_spec.rb +6 -2
- data/spec/{shared/rspec_candy → rspec_candy}/helpers/should_receive_and_execute_spec.rb +0 -0
- data/spec/{shared/rspec_candy → rspec_candy}/helpers/should_receive_and_return_spec.rb +0 -0
- data/spec/{shared/rspec_candy → rspec_candy}/helpers/should_receive_chain_spec.rb +0 -0
- data/spec/{shared/rspec_candy → rspec_candy}/helpers/stub_any_instance_spec.rb +0 -0
- data/spec/{shared/rspec_candy → rspec_candy}/helpers/stub_existing_spec.rb +0 -0
- data/spec/{shared/rspec_candy → rspec_candy}/matchers/be_same_number_as_spec.rb +0 -0
- data/spec/{shared/rspec_candy → rspec_candy}/matchers/be_same_second_as_spec.rb +0 -0
- data/spec/{shared/rspec_candy → rspec_candy}/matchers/include_hash_spec.rb +0 -0
- data/spec/{rspec1/app_root/config/environments/test.rb → shared_examples/.keep} +0 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/support/database.rb +15 -0
- data/spec/support/database_cleaner.rb +20 -0
- data/spec/{shared/support → support}/matchers/pass_as_describe_block.rb +14 -3
- data/spec/{shared/support → support}/matchers/pass_as_example.rb +2 -0
- data/spec/{shared/app_root/app/models/model.rb → support/models.rb} +19 -0
- metadata +74 -123
- data/spec/rspec1/Gemfile +0 -16
- data/spec/rspec1/Gemfile.lock +0 -74
- data/spec/rspec1/Rakefile +0 -11
- data/spec/rspec1/app_root/config/boot.rb +0 -114
- data/spec/rspec1/app_root/config/database.yml +0 -4
- data/spec/rspec1/app_root/config/environment.rb +0 -14
- data/spec/rspec1/app_root/config/initializers/state_machine.rb +0 -1
- data/spec/rspec1/app_root/config/routes.rb +0 -4
- data/spec/rspec1/rcov.opts +0 -2
- data/spec/rspec1/spec.opts +0 -4
- data/spec/rspec1/spec/spec_helper.rb +0 -25
- data/spec/rspec1/spec/switcher_spec.rb +0 -26
- data/spec/rspec2/.rspec +0 -2
- data/spec/rspec2/Gemfile +0 -14
- data/spec/rspec2/Gemfile.lock +0 -137
- data/spec/rspec2/Rakefile +0 -11
- data/spec/rspec2/app_root/.gitignore +0 -4
- data/spec/rspec2/app_root/config/application.rb +0 -32
- data/spec/rspec2/app_root/config/boot.rb +0 -13
- data/spec/rspec2/app_root/config/database.yml +0 -4
- data/spec/rspec2/app_root/config/environment.rb +0 -5
- data/spec/rspec2/app_root/config/environments/test.rb +0 -0
- data/spec/rspec2/app_root/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/rspec2/app_root/config/initializers/inflections.rb +0 -10
- data/spec/rspec2/app_root/config/initializers/mime_types.rb +0 -5
- data/spec/rspec2/app_root/config/initializers/secret_token.rb +0 -7
- data/spec/rspec2/app_root/config/initializers/session_store.rb +0 -8
- data/spec/rspec2/app_root/config/initializers/state_machine.rb +0 -1
- data/spec/rspec2/app_root/config/locales/en.yml +0 -5
- data/spec/rspec2/app_root/config/routes.rb +0 -58
- data/spec/rspec2/rcov.opts +0 -2
- data/spec/rspec2/spec/spec_helper.rb +0 -24
- data/spec/rspec2/spec/switcher_spec.rb +0 -21
- data/spec/shared/app_root/app/controllers/application_controller.rb +0 -2
- data/spec/shared/app_root/app/models/state_machine_model.rb +0 -53
- data/spec/shared/app_root/app/models/sti_child.rb +0 -3
- data/spec/shared/app_root/app/models/sti_parent.rb +0 -12
- data/spec/shared/app_root/config/initializers/state_machine.rb +0 -1
- data/spec/shared/app_root/db/migrate/001_create_model.rb +0 -14
- data/spec/shared/app_root/db/migrate/002_create_state_machine_model.rb +0 -13
- data/spec/shared/app_root/db/migrate/003_create_sti_model.rb +0 -14
- data/spec/shared/rspec_candy/helpers/rails/it_should_run_callbacks_spec.rb +0 -158
data/.gitignore
CHANGED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.9.3
|
data/.travis.yml
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- "1.8.7"
|
4
3
|
- "1.9.3"
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
gemfile:
|
5
|
+
- gemfiles/Gemfile.rspec1-rails2
|
6
|
+
- gemfiles/Gemfile.rspec2-rails3
|
7
|
+
- gemfiles/Gemfile.rspec3-rails4
|
8
|
+
script: rake spec
|
8
9
|
notifications:
|
9
10
|
email:
|
10
11
|
- fail@makandra.de
|
data/README.md
CHANGED
@@ -3,7 +3,11 @@ rspec_candy [![Build Status](https://secure.travis-ci.org/makandra/rspec_candy.p
|
|
3
3
|
|
4
4
|
A collection of nifty helpers and matchers for your RSpec suite.
|
5
5
|
|
6
|
-
|
6
|
+
Tested on:
|
7
|
+
|
8
|
+
- RSpec 1 / Rails 2.3
|
9
|
+
- RSpec 2 / Rails 3.2
|
10
|
+
- RSpec 3 / Rails 4.2
|
7
11
|
|
8
12
|
|
9
13
|
##Installation
|
@@ -138,20 +142,8 @@ If you only care about the matchers or helpers you can also more specifically re
|
|
138
142
|
it_should_run_callbacks :notify_this, :notify_that
|
139
143
|
end
|
140
144
|
|
141
|
-
If you use the state_machine gem, you can also spec callbacks for state_machine transitions:
|
142
|
-
|
143
|
-
|
144
|
-
describe Model, '#my_event from :my_state1 to :my_state" do
|
145
|
-
it_should_run_callbacks :notify_this, :notify_that
|
146
|
-
end
|
147
145
|
|
148
146
|
|
149
|
-
If you have used a custom state machine name, you can use specify it like this:
|
150
|
-
|
151
|
-
describe Model, '#my_event on :my_machine from :my_state1 to :my_state" do
|
152
|
-
it_should_run_callbacks :notify_this, :notify_that
|
153
|
-
end
|
154
|
-
|
155
147
|
**it_should_run_callbacks_in_order**
|
156
148
|
|
157
149
|
Like `it_should_run_callbacks`, but also checks the correct order.
|
data/Rakefile
CHANGED
@@ -1,48 +1,41 @@
|
|
1
1
|
require 'rake'
|
2
|
-
|
3
|
-
require "bundler/gem_tasks"
|
2
|
+
require 'bundler/gem_tasks'
|
4
3
|
|
5
4
|
desc 'Default: Run all specs.'
|
6
5
|
task :default => 'all:spec'
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
desc 'Install slimgems'
|
14
|
-
task :slimgems do
|
15
|
-
system('gem install slimgems')
|
16
|
-
end
|
17
|
-
|
7
|
+
task :spec do
|
8
|
+
rspec_binary = ENV['BUNDLE_GEMFILE'].include?('rspec1') ? 'spec' : 'rspec'
|
9
|
+
examples = ENV['SPEC'] || 'spec'
|
10
|
+
success &= system("bundle exec #{rspec_binary} #{examples}")
|
18
11
|
end
|
19
12
|
|
20
13
|
namespace :all do
|
21
14
|
|
22
|
-
desc "Run specs on all
|
15
|
+
desc "Run specs on all versions"
|
23
16
|
task :spec do
|
24
17
|
success = true
|
25
|
-
|
26
|
-
|
27
|
-
success &= system("cd #{directory} && #{env} bundle exec rake spec")
|
18
|
+
for_each_gemfile do
|
19
|
+
Rake::Task['spec'].execute
|
28
20
|
end
|
29
21
|
fail "Tests failed" unless success
|
30
22
|
end
|
31
23
|
|
32
|
-
desc "Bundle all
|
24
|
+
desc "Bundle all versions"
|
33
25
|
task :bundle do
|
34
|
-
|
35
|
-
system(
|
26
|
+
for_each_gemfile do
|
27
|
+
system('bundle install')
|
36
28
|
end
|
37
29
|
end
|
38
30
|
|
39
31
|
end
|
40
32
|
|
41
|
-
def
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
33
|
+
def for_each_gemfile
|
34
|
+
version = ENV['VERSION'] || '*'
|
35
|
+
Dir["gemfiles/Gemfile.#{version}"].sort.each do |gemfile|
|
36
|
+
next if gemfile =~ /.lock/
|
37
|
+
puts '', "\033[44m#{gemfile}\033[0m", ''
|
38
|
+
ENV['BUNDLE_GEMFILE'] = gemfile
|
39
|
+
yield
|
46
40
|
end
|
47
41
|
end
|
48
|
-
|
@@ -0,0 +1,17 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
Deprecate.skip = true if defined?(Deprecate.skip)
|
4
|
+
Gem::Deprecate.skip = true if defined?(Gem::Deprecate.skip)
|
5
|
+
|
6
|
+
source 'https://rubygems.org'
|
7
|
+
|
8
|
+
gem 'activerecord', '~>2.3.18'
|
9
|
+
gem 'rspec', '~>1.3.2'
|
10
|
+
gem 'sqlite3'
|
11
|
+
gem 'database_cleaner'
|
12
|
+
gem 'rake'
|
13
|
+
|
14
|
+
gem 'rspec_candy', :path => '..'
|
15
|
+
|
16
|
+
# gem 'test-unit', '~>1.2', :platforms => :ruby_19
|
17
|
+
# gem 'hoe', '=2.8.0', :platforms => :ruby_19
|
@@ -0,0 +1,31 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
rspec_candy (0.4.0)
|
5
|
+
rspec
|
6
|
+
sneaky-save
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
activerecord (2.3.18)
|
13
|
+
activesupport (= 2.3.18)
|
14
|
+
activesupport (2.3.18)
|
15
|
+
database_cleaner (1.2.0)
|
16
|
+
rake (10.4.2)
|
17
|
+
rspec (1.3.2)
|
18
|
+
sneaky-save (0.0.2)
|
19
|
+
activerecord (>= 2.3.2)
|
20
|
+
sqlite3 (1.3.10)
|
21
|
+
|
22
|
+
PLATFORMS
|
23
|
+
ruby
|
24
|
+
|
25
|
+
DEPENDENCIES
|
26
|
+
activerecord (~> 2.3.18)
|
27
|
+
database_cleaner
|
28
|
+
rake
|
29
|
+
rspec (~> 1.3.2)
|
30
|
+
rspec_candy!
|
31
|
+
sqlite3
|
@@ -0,0 +1,51 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
rspec_candy (0.4.0)
|
5
|
+
rspec
|
6
|
+
sneaky-save
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
activemodel (3.2.21)
|
12
|
+
activesupport (= 3.2.21)
|
13
|
+
builder (~> 3.0.0)
|
14
|
+
activerecord (3.2.21)
|
15
|
+
activemodel (= 3.2.21)
|
16
|
+
activesupport (= 3.2.21)
|
17
|
+
arel (~> 3.0.2)
|
18
|
+
tzinfo (~> 0.3.29)
|
19
|
+
activesupport (3.2.21)
|
20
|
+
i18n (~> 0.6, >= 0.6.4)
|
21
|
+
multi_json (~> 1.0)
|
22
|
+
arel (3.0.3)
|
23
|
+
builder (3.0.4)
|
24
|
+
database_cleaner (1.2.0)
|
25
|
+
diff-lcs (1.2.5)
|
26
|
+
i18n (0.7.0)
|
27
|
+
multi_json (1.11.0)
|
28
|
+
rake (10.4.2)
|
29
|
+
rspec (2.14.1)
|
30
|
+
rspec-core (~> 2.14.0)
|
31
|
+
rspec-expectations (~> 2.14.0)
|
32
|
+
rspec-mocks (~> 2.14.0)
|
33
|
+
rspec-core (2.14.8)
|
34
|
+
rspec-expectations (2.14.5)
|
35
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
36
|
+
rspec-mocks (2.14.6)
|
37
|
+
sneaky-save (0.1.0)
|
38
|
+
activerecord (>= 3.2.0)
|
39
|
+
sqlite3 (1.3.10)
|
40
|
+
tzinfo (0.3.43)
|
41
|
+
|
42
|
+
PLATFORMS
|
43
|
+
ruby
|
44
|
+
|
45
|
+
DEPENDENCIES
|
46
|
+
activerecord (~> 3.2.0)
|
47
|
+
database_cleaner
|
48
|
+
rake
|
49
|
+
rspec (~> 2.14.1)
|
50
|
+
rspec_candy!
|
51
|
+
sqlite3
|
@@ -0,0 +1,61 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
rspec_candy (0.4.0)
|
5
|
+
rspec
|
6
|
+
sneaky-save
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
activemodel (4.2.1)
|
12
|
+
activesupport (= 4.2.1)
|
13
|
+
builder (~> 3.1)
|
14
|
+
activerecord (4.2.1)
|
15
|
+
activemodel (= 4.2.1)
|
16
|
+
activesupport (= 4.2.1)
|
17
|
+
arel (~> 6.0)
|
18
|
+
activesupport (4.2.1)
|
19
|
+
i18n (~> 0.7)
|
20
|
+
json (~> 1.7, >= 1.7.7)
|
21
|
+
minitest (~> 5.1)
|
22
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
23
|
+
tzinfo (~> 1.1)
|
24
|
+
arel (6.0.0)
|
25
|
+
builder (3.2.2)
|
26
|
+
database_cleaner (1.2.0)
|
27
|
+
diff-lcs (1.2.5)
|
28
|
+
i18n (0.7.0)
|
29
|
+
json (1.8.2)
|
30
|
+
minitest (5.5.1)
|
31
|
+
rake (10.4.2)
|
32
|
+
rspec (3.2.0)
|
33
|
+
rspec-core (~> 3.2.0)
|
34
|
+
rspec-expectations (~> 3.2.0)
|
35
|
+
rspec-mocks (~> 3.2.0)
|
36
|
+
rspec-core (3.2.3)
|
37
|
+
rspec-support (~> 3.2.0)
|
38
|
+
rspec-expectations (3.2.1)
|
39
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
40
|
+
rspec-support (~> 3.2.0)
|
41
|
+
rspec-mocks (3.2.1)
|
42
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
43
|
+
rspec-support (~> 3.2.0)
|
44
|
+
rspec-support (3.2.2)
|
45
|
+
sneaky-save (0.1.0)
|
46
|
+
activerecord (>= 3.2.0)
|
47
|
+
sqlite3 (1.3.10)
|
48
|
+
thread_safe (0.3.5)
|
49
|
+
tzinfo (1.2.2)
|
50
|
+
thread_safe (~> 0.1)
|
51
|
+
|
52
|
+
PLATFORMS
|
53
|
+
ruby
|
54
|
+
|
55
|
+
DEPENDENCIES
|
56
|
+
activerecord (~> 4.2.0)
|
57
|
+
database_cleaner
|
58
|
+
rake
|
59
|
+
rspec (~> 3.2.0)
|
60
|
+
rspec_candy!
|
61
|
+
sqlite3
|
data/lib/rspec_candy/base.rb
CHANGED
data/lib/rspec_candy/helpers.rb
CHANGED
@@ -8,7 +8,7 @@ require 'rspec_candy/helpers/should_receive_chain'
|
|
8
8
|
require 'rspec_candy/helpers/stub_any_instance'
|
9
9
|
require 'rspec_candy/helpers/stub_existing'
|
10
10
|
|
11
|
-
if RSpecCandy::Switcher.
|
11
|
+
if RSpecCandy::Switcher.active_record_loaded?
|
12
12
|
require 'rspec_candy/helpers/rails/store_with_values'
|
13
13
|
require 'rspec_candy/helpers/rails/it_should_run_callbacks'
|
14
14
|
require 'rspec_candy/helpers/rails/prevent_storage'
|
@@ -18,17 +18,14 @@ module RSpecCandy
|
|
18
18
|
should = ['should run callbacks', callbacks.inspect, ('in order' if options[:ordered]), reason].compact.join ' '
|
19
19
|
|
20
20
|
prose = case Switcher.rspec_version
|
21
|
-
when
|
21
|
+
when 1
|
22
22
|
description_parts.last
|
23
|
-
|
23
|
+
else
|
24
24
|
description.split(/(?=#)/).last
|
25
25
|
end
|
26
26
|
|
27
27
|
send(:it, should) do
|
28
28
|
extend ExampleMethods
|
29
|
-
if subject.class.respond_to?(:state_machine) and defined?(StateMachine)
|
30
|
-
extend StateMachineExampleMethods
|
31
|
-
end
|
32
29
|
callbacks.each do |callback|
|
33
30
|
expectation = subject.should_receive(callback).once
|
34
31
|
expectation.ordered if options[:ordered]
|
@@ -48,13 +45,13 @@ module RSpecCandy
|
|
48
45
|
end
|
49
46
|
|
50
47
|
case Switcher.rspec_version
|
51
|
-
when
|
48
|
+
when 1
|
52
49
|
|
53
50
|
def run_active_record_callbacks_from_prose(prose)
|
54
51
|
subject.run_callbacks(prose.sub(/^#/, ''))
|
55
52
|
end
|
56
53
|
|
57
|
-
|
54
|
+
else
|
58
55
|
|
59
56
|
def run_active_record_callbacks_from_prose(prose)
|
60
57
|
hook = prose.split.last.sub(/^#/, '')
|
@@ -82,27 +79,10 @@ module RSpecCandy
|
|
82
79
|
end
|
83
80
|
end
|
84
81
|
|
85
|
-
module StateMachineExampleMethods
|
86
|
-
def run_all_callbacks(prose)
|
87
|
-
run_state_machine_callbacks_from_prose(prose) or super
|
88
|
-
end
|
89
|
-
|
90
|
-
def run_state_machine_callbacks_from_prose(prose)
|
91
|
-
if parts = prose.match(/^(#\w+) (?:on ([\:\w]+) )?from ([\:\w]+) to ([\:\w]+)$/)
|
92
|
-
name = parts[1].sub(/^#/, '').to_sym
|
93
|
-
machine_name = parts[2] ? parts[2].sub(/^:/, '').to_sym : :state
|
94
|
-
from = parts[3].sub(/^:/, '').to_sym
|
95
|
-
to = parts[4].sub(/^:/, '').to_sym
|
96
|
-
transition = StateMachine::Transition.new(subject, subject.class.state_machine(machine_name), name, from, to)
|
97
|
-
transition.run_callbacks
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
82
|
case Switcher.rspec_version
|
103
|
-
when
|
83
|
+
when 1
|
104
84
|
Spec::Example::ExampleGroupMethods.send(:include, self::ExampleGroupMethods)
|
105
|
-
|
85
|
+
else
|
106
86
|
RSpec::Core::ExampleGroup.singleton_class.send(:include, self::ExampleGroupMethods)
|
107
87
|
end
|
108
88
|
|
@@ -5,13 +5,18 @@ module RSpecCandy
|
|
5
5
|
|
6
6
|
def store_with_values(values = {})
|
7
7
|
record = new
|
8
|
-
|
8
|
+
case Switcher.active_record_version
|
9
|
+
when 2
|
9
10
|
record.send(:attributes=, values, false)
|
10
11
|
record.send(:create_without_callbacks)
|
11
|
-
|
12
|
+
when 3
|
12
13
|
require 'sneaky-save'
|
13
14
|
record.assign_attributes(values, :without_protection => true)
|
14
15
|
record.sneaky_save
|
16
|
+
else
|
17
|
+
require 'sneaky-save'
|
18
|
+
record.assign_attributes(values)
|
19
|
+
record.sneaky_save
|
15
20
|
end
|
16
21
|
record
|
17
22
|
end
|
@@ -4,7 +4,7 @@ module RSpecCandy
|
|
4
4
|
|
5
5
|
def stub_any_instance(stubs)
|
6
6
|
case Switcher.rspec_version
|
7
|
-
when
|
7
|
+
when 1
|
8
8
|
unstubbed_new = method(:new)
|
9
9
|
stub(:new).and_return do |*args|
|
10
10
|
unstubbed_new.call(*args).tap do |obj|
|
@@ -12,7 +12,7 @@ module RSpecCandy
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
stubs
|
15
|
-
|
15
|
+
else
|
16
16
|
any_instance.stub(stubs)
|
17
17
|
end
|
18
18
|
end
|