state_machine_rspec 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/.gitignore +17 -0
- data/.rspec +2 -0
- data/.rvmrc +52 -0
- data/Gemfile +8 -0
- data/Guardfile +6 -0
- data/LICENSE.txt +22 -0
- data/README.md +56 -0
- data/Rakefile +6 -0
- data/lib/matchers/events/handle_event.rb +29 -0
- data/lib/matchers/events/matcher.rb +55 -0
- data/lib/matchers/events/reject_event.rb +29 -0
- data/lib/matchers/states/have_state.rb +40 -0
- data/lib/matchers/states/matcher.rb +42 -0
- data/lib/matchers/states/reject_state.rb +28 -0
- data/lib/state_machine_rspec/state_machine_introspector.rb +70 -0
- data/lib/state_machine_rspec/version.rb +3 -0
- data/lib/state_machine_rspec.rb +11 -0
- data/spec/integration/integration_spec.rb +327 -0
- data/spec/integration/models/vehicle.rb +119 -0
- data/spec/matchers/events/handle_event_spec.rb +109 -0
- data/spec/matchers/events/reject_event_spec.rb +109 -0
- data/spec/matchers/states/have_state_spec.rb +110 -0
- data/spec/matchers/states/reject_state_spec.rb +81 -0
- data/spec/spec_helper.rb +12 -0
- data/state_machine_rspec.gemspec +31 -0
- metadata +228 -0
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe StateMachineRspec::Matchers::HaveStateMatcher do
|
4
|
+
describe '#matches?' do
|
5
|
+
before { @matcher = described_class.new([:rad, :not_so_rad, { on: :radical_state }]) }
|
6
|
+
|
7
|
+
context 'when values are asserted on multiple states' do
|
8
|
+
before do
|
9
|
+
@matcher = described_class.new([:rad, :not_so_rad, { value: 'rad' }])
|
10
|
+
end
|
11
|
+
it 'raises an ArgumentError' do
|
12
|
+
expect { @matcher.matches? nil }.to raise_error ArgumentError,
|
13
|
+
'cannot make value assertions on multiple states at once'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'when class does not have a matching state attribute' do
|
18
|
+
before do
|
19
|
+
@class = Class.new do
|
20
|
+
state_machine :bodacious_state, initial: :super_bodacious
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'raises' do
|
25
|
+
expect { @matcher.matches? @class.new }.
|
26
|
+
to raise_error StateMachineIntrospectorError,
|
27
|
+
/.+? does not have a state machine defined on radical_state/
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when class has a matching state attribute' do
|
32
|
+
context 'but is missing some of the specified states' do
|
33
|
+
before do
|
34
|
+
@class = Class.new do
|
35
|
+
state_machine :radical_state do
|
36
|
+
state :not_so_rad
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'sets a failure message indicating a state is missing' do
|
42
|
+
@matcher.matches? @class.new
|
43
|
+
@matcher.failure_message.should eq 'Expected radical_state to allow states: rad'
|
44
|
+
end
|
45
|
+
it 'returns false' do
|
46
|
+
@matcher.matches?(@class.new).should be_false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'and has all states specified' do
|
51
|
+
before do
|
52
|
+
@class = Class.new do
|
53
|
+
state_machine :radical_state do
|
54
|
+
state :rad, value: 'totes rad'
|
55
|
+
state :not_so_rad, value: 'meh'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'state values not specified' do
|
61
|
+
it 'does not set a failure message' do
|
62
|
+
@matcher.matches? @class.new
|
63
|
+
@matcher.failure_message.should be_nil
|
64
|
+
end
|
65
|
+
it 'returns true' do
|
66
|
+
@matcher.matches?(@class.new).should be_true
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'state value matches specified value' do
|
71
|
+
before do
|
72
|
+
@matcher = described_class.new([:rad, { on: :radical_state, value: 'uber-rad' }])
|
73
|
+
@class = Class.new do
|
74
|
+
state_machine :radical_state do
|
75
|
+
state :rad, value: 'uber-rad'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'does not set a failure message' do
|
81
|
+
@matcher.matches? @class.new
|
82
|
+
@matcher.failure_message.should be_nil
|
83
|
+
end
|
84
|
+
it 'returns true' do
|
85
|
+
@matcher.matches?(@class.new).should be_true
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'state value does not match specified value' do
|
90
|
+
before do
|
91
|
+
@matcher = described_class.new([:rad, { on: :radical_state, value: 'uber-rad' }])
|
92
|
+
@class = Class.new do
|
93
|
+
state_machine :radical_state do
|
94
|
+
state :rad, value: 'kinda rad'
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'does not set a failure message' do
|
100
|
+
@matcher.matches? @class.new
|
101
|
+
@matcher.failure_message.should eq 'Expected rad to have value uber-rad'
|
102
|
+
end
|
103
|
+
it 'returns true' do
|
104
|
+
@matcher.matches?(@class.new).should be_false
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe StateMachineRspec::Matchers::RejectStateMatcher do
|
4
|
+
describe '#matches?' do
|
5
|
+
context 'when :on state machine attribute is specified' do
|
6
|
+
before { @matcher = described_class.new([:supportive, on: :environment]) }
|
7
|
+
context 'but that state machine doesn\'t exist' do
|
8
|
+
before { @class = Class.new }
|
9
|
+
it 'raises' do
|
10
|
+
expect { @matcher.matches? @class.new }.to raise_error
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'and that state machine exists' do
|
15
|
+
context 'but it defines states which match one of the specified states' do
|
16
|
+
before do
|
17
|
+
@class = Class.new do
|
18
|
+
state_machine :environment, initial: :supportive
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'sets a failure message' do
|
23
|
+
@matcher.matches? @class.new
|
24
|
+
@matcher.failure_message.
|
25
|
+
should eq 'Did not expect environment to allow states: supportive'
|
26
|
+
end
|
27
|
+
it 'returns false' do
|
28
|
+
@matcher.matches?(@class.new).should be_false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'and it does not define any of the states specified' do
|
33
|
+
before do
|
34
|
+
@class = Class.new do
|
35
|
+
state_machine :environment, initial: :conducive
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'does not set a failure message' do
|
40
|
+
@matcher.matches? @class.new
|
41
|
+
@matcher.failure_message.should be_nil
|
42
|
+
end
|
43
|
+
it 'returns true' do
|
44
|
+
@matcher.matches?(@class.new).should be_true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'when :on state machine is not specified' do
|
51
|
+
before { @matcher = described_class.new([:ever_changing]) }
|
52
|
+
context 'but the default state machine defines states which match one of the specified states' do
|
53
|
+
before do
|
54
|
+
@class = Class.new do
|
55
|
+
state_machine initial: :ever_changing
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'sets a failure message' do
|
60
|
+
@matcher.matches? @class.new
|
61
|
+
@matcher.failure_message.
|
62
|
+
should eq 'Did not expect state to allow states: ever_changing'
|
63
|
+
end
|
64
|
+
it 'returns false' do
|
65
|
+
@matcher.matches?(@class.new).should be_false
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'and the default state machine does not define any of the states specified' do
|
70
|
+
before { @class = Class.new }
|
71
|
+
it 'does not set a failure message' do
|
72
|
+
@matcher.matches? @class.new
|
73
|
+
@matcher.failure_message.should be_nil
|
74
|
+
end
|
75
|
+
it 'returns true' do
|
76
|
+
@matcher.matches?(@class.new).should be_true
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'state_machine'
|
2
|
+
require 'state_machine_rspec'
|
3
|
+
require 'timecop'
|
4
|
+
|
5
|
+
RSpec.configure do |config|
|
6
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
7
|
+
config.run_all_when_everything_filtered = true
|
8
|
+
config.filter_run :focus
|
9
|
+
config.order = 'random'
|
10
|
+
|
11
|
+
config.include StateMachineRspec::Matchers
|
12
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'state_machine_rspec/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'state_machine_rspec'
|
8
|
+
spec.version = StateMachineRspec::VERSION
|
9
|
+
spec.authors = ['modocache']
|
10
|
+
spec.email = ['modocache@gmail.com']
|
11
|
+
spec.description = %q{ RSpec matchers for state_machine. }
|
12
|
+
spec.summary = %q{ RSpec matchers for state_machine. }
|
13
|
+
spec.homepage = 'http://github.com/modocache/state_machine_rspec'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_development_dependency 'bundler'
|
22
|
+
spec.add_development_dependency 'rake'
|
23
|
+
spec.add_development_dependency 'timecop'
|
24
|
+
spec.add_development_dependency 'guard-rspec'
|
25
|
+
spec.add_development_dependency 'rb-fsevent'
|
26
|
+
spec.add_development_dependency 'terminal-notifier-guard'
|
27
|
+
|
28
|
+
spec.add_dependency 'rspec', '~> 2.9'
|
29
|
+
spec.add_dependency 'state_machine', '~> 1.1.0'
|
30
|
+
spec.add_dependency 'activesupport'
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,228 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: state_machine_rspec
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- modocache
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-03-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: timecop
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: guard-rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rb-fsevent
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: terminal-notifier-guard
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rspec
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2.9'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '2.9'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: state_machine
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ~>
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: 1.1.0
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 1.1.0
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: activesupport
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :runtime
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
description: ! ' RSpec matchers for state_machine. '
|
159
|
+
email:
|
160
|
+
- modocache@gmail.com
|
161
|
+
executables: []
|
162
|
+
extensions: []
|
163
|
+
extra_rdoc_files: []
|
164
|
+
files:
|
165
|
+
- .gitignore
|
166
|
+
- .rspec
|
167
|
+
- .rvmrc
|
168
|
+
- Gemfile
|
169
|
+
- Guardfile
|
170
|
+
- LICENSE.txt
|
171
|
+
- README.md
|
172
|
+
- Rakefile
|
173
|
+
- lib/matchers/events/handle_event.rb
|
174
|
+
- lib/matchers/events/matcher.rb
|
175
|
+
- lib/matchers/events/reject_event.rb
|
176
|
+
- lib/matchers/states/have_state.rb
|
177
|
+
- lib/matchers/states/matcher.rb
|
178
|
+
- lib/matchers/states/reject_state.rb
|
179
|
+
- lib/state_machine_rspec.rb
|
180
|
+
- lib/state_machine_rspec/state_machine_introspector.rb
|
181
|
+
- lib/state_machine_rspec/version.rb
|
182
|
+
- spec/integration/integration_spec.rb
|
183
|
+
- spec/integration/models/vehicle.rb
|
184
|
+
- spec/matchers/events/handle_event_spec.rb
|
185
|
+
- spec/matchers/events/reject_event_spec.rb
|
186
|
+
- spec/matchers/states/have_state_spec.rb
|
187
|
+
- spec/matchers/states/reject_state_spec.rb
|
188
|
+
- spec/spec_helper.rb
|
189
|
+
- state_machine_rspec.gemspec
|
190
|
+
homepage: http://github.com/modocache/state_machine_rspec
|
191
|
+
licenses:
|
192
|
+
- MIT
|
193
|
+
post_install_message:
|
194
|
+
rdoc_options: []
|
195
|
+
require_paths:
|
196
|
+
- lib
|
197
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
198
|
+
none: false
|
199
|
+
requirements:
|
200
|
+
- - ! '>='
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: '0'
|
203
|
+
segments:
|
204
|
+
- 0
|
205
|
+
hash: 980135428736391408
|
206
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
207
|
+
none: false
|
208
|
+
requirements:
|
209
|
+
- - ! '>='
|
210
|
+
- !ruby/object:Gem::Version
|
211
|
+
version: '0'
|
212
|
+
segments:
|
213
|
+
- 0
|
214
|
+
hash: 980135428736391408
|
215
|
+
requirements: []
|
216
|
+
rubyforge_project:
|
217
|
+
rubygems_version: 1.8.25
|
218
|
+
signing_key:
|
219
|
+
specification_version: 3
|
220
|
+
summary: RSpec matchers for state_machine.
|
221
|
+
test_files:
|
222
|
+
- spec/integration/integration_spec.rb
|
223
|
+
- spec/integration/models/vehicle.rb
|
224
|
+
- spec/matchers/events/handle_event_spec.rb
|
225
|
+
- spec/matchers/events/reject_event_spec.rb
|
226
|
+
- spec/matchers/states/have_state_spec.rb
|
227
|
+
- spec/matchers/states/reject_state_spec.rb
|
228
|
+
- spec/spec_helper.rb
|