state_machines-rspec 0.4.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.
@@ -0,0 +1,97 @@
1
+ require 'spec_helper'
2
+
3
+ describe StateMachinesRspec::Matchers::RejectStateMatcher do
4
+ describe '#matches?' do
5
+ context 'when :on state machines attribute is specified' do
6
+ before { @matcher = described_class.new([:supportive, on: :environment]) }
7
+ context 'but that state machines 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 machines 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
+ expect(@matcher.failure_message).to eq('Did not expect environment to allow states: supportive')
25
+ end
26
+ it 'returns false' do
27
+ expect(@matcher.matches?(@class.new)).to be_falsey
28
+ end
29
+ end
30
+
31
+ context 'and it does not define any of the states specified' do
32
+ before do
33
+ @class = Class.new do
34
+ state_machine :environment, initial: :conducive
35
+ end
36
+ end
37
+
38
+ it 'does not set a failure message' do
39
+ @matcher.matches? @class.new
40
+ expect(@matcher.failure_message).to be_nil
41
+ end
42
+ it 'returns true' do
43
+ expect(@matcher.matches?(@class.new)).to be_truthy
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ context 'when :on state machines is not specified' do
50
+ before { @matcher = described_class.new([:ever_changing]) }
51
+ context 'but the default state machines defines states which match one of the specified states' do
52
+ before do
53
+ @class = Class.new do
54
+ state_machine initial: :ever_changing
55
+ end
56
+ end
57
+
58
+ it 'sets a failure message' do
59
+ @matcher.matches? @class.new
60
+ expect(@matcher.failure_message).to eq('Did not expect state to allow states: ever_changing')
61
+ end
62
+ it 'returns false' do
63
+ expect(@matcher.matches?(@class.new)).to be_falsey
64
+ end
65
+ end
66
+
67
+ context 'and the default state machines does not define any of the states specified' do
68
+ before { @class = Class.new }
69
+ it 'does not set a failure message' do
70
+ @matcher.matches? @class.new
71
+ expect(@matcher.failure_message).to be_nil
72
+ end
73
+ it 'returns true' do
74
+ expect(@matcher.matches?(@class.new)).to be_truthy
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ describe '#description' do
81
+ context 'with no options' do
82
+ let(:matcher) { described_class.new([:mustard, :tomatoes]) }
83
+
84
+ it 'returns a string description' do
85
+ expect(matcher.description).to eq('not have :mustard, :tomatoes')
86
+ end
87
+ end
88
+
89
+ context 'when :on state machines is specified' do
90
+ let(:matcher) { described_class.new([:peanut_butter, on: :toast]) }
91
+
92
+ it 'mentions the state machines variable' do
93
+ expect(matcher.description).to eq('not have :peanut_butter on :toast')
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,177 @@
1
+ require 'spec_helper'
2
+
3
+ describe StateMachinesRspec::Matchers::HandleTransitionFromMatcher do
4
+ describe '#matches?' do
5
+ context 'when :from states and :on_event is specified but the :to_state doesn\'t exist' do
6
+ before do
7
+ matcher_class = Class.new do
8
+ state_machine :state, initial: :mathy do
9
+ event(:mathematize) { transition any => same }
10
+ end
11
+ end
12
+ @matcher_subject = matcher_class.new
13
+ @matcher = described_class.new(:mathy, on_event: :mathematize)
14
+ end
15
+
16
+ it 'raises' do
17
+ expect { @matcher.matches? @matcher_subject }
18
+ .to raise_error StateMachinesIntrospectorError, 'Option :to_state cannot be nil'
19
+ end
20
+ end
21
+
22
+ context 'when :from states and :to_state is specified but the :on_event doesn\'t exist' do
23
+ before do
24
+ matcher_class = Class.new do
25
+ state_machine :state, initial: :mathy do
26
+ state :polynomial
27
+
28
+ event(:mathematize) { transition any => same }
29
+ end
30
+ end
31
+ @matcher_subject = matcher_class.new
32
+ @matcher = described_class.new(:mathy, to_state: :polynomial)
33
+ end
34
+
35
+ it 'raises' do
36
+ expect { @matcher.matches? @matcher_subject }
37
+ .to raise_error StateMachinesIntrospectorError, 'Option :on_event cannot be nil'
38
+ end
39
+ end
40
+
41
+ context 'when :from states, :to_state and :on_event is specified' do
42
+ context 'and :to_state doesn\'t defined' do
43
+ before do
44
+ matcher_class = Class.new do
45
+ state_machine :state, initial: :mathy do
46
+ state :artsy
47
+
48
+ event(:mathematize) { transition any => same }
49
+ end
50
+ end
51
+ @matcher_subject = matcher_class.new
52
+ @matcher = described_class.new(:mathy, to_state: :polynomial, on_event: :mathematize)
53
+ end
54
+
55
+ it 'raise' do
56
+ expect { @matcher.matches? @matcher_subject }
57
+ .to raise_error StateMachinesIntrospectorError, "#{@matcher_subject.class} does not define state: polynomial"
58
+ end
59
+ end
60
+
61
+ context 'and :on_event doesn\'t defined' do
62
+ before do
63
+ matcher_class = Class.new do
64
+ state_machine :state, initial: :mathy do
65
+ state :artsy
66
+
67
+ event(:mathematize) { transition any => same }
68
+ end
69
+ end
70
+ @matcher_subject = matcher_class.new
71
+ @matcher = described_class.new(:mathy, to_state: :arsty, on_event: :algebraify)
72
+ end
73
+
74
+ it 'raise' do
75
+ expect { @matcher.matches? @matcher_subject }
76
+ .to raise_error StateMachinesIntrospectorError, "#{@matcher_subject.class} does not define event :algebraify"
77
+ end
78
+ end
79
+
80
+ context 'and from state doesn\'t defined' do
81
+ before do
82
+ matcher_class = Class.new do
83
+ state_machine :state, initial: :mathy do
84
+ state :artsy
85
+
86
+ event(:mathematize) { transition any => same }
87
+ end
88
+ end
89
+ @matcher_subject = matcher_class.new
90
+ @matcher = described_class.new(:polynomial, to_state: :arsty, on_event: :mathematize)
91
+ end
92
+
93
+ it 'raise' do
94
+ expect { @matcher.matches? @matcher_subject }
95
+ .to raise_error StateMachinesIntrospectorError, "#{@matcher_subject.class} does not define state: polynomial"
96
+ end
97
+ end
98
+ end
99
+
100
+ context 'when subject can perform transition' do
101
+ before do
102
+ matcher_class = Class.new do
103
+ state_machine :mathiness, initial: :mathy do
104
+ state :polynomial
105
+
106
+ event(:algebraify) { transition polynomial: :mathy }
107
+ end
108
+ end
109
+ @matcher_subject = matcher_class.new
110
+ @matcher = described_class.new(:polynomial, to_state: :mathy, on_event: :algebraify, on: :mathiness)
111
+ end
112
+
113
+ it 'does not set a failure message' do
114
+ @matcher.matches? @matcher_subject
115
+ expect(@matcher.failure_message).to be_nil
116
+ end
117
+ it 'returns true' do
118
+ expect(@matcher.matches?(@matcher_subject)).to be_truthy
119
+ end
120
+ end
121
+
122
+ context 'when subject cannot perform events' do
123
+ before do
124
+ matcher_class = Class.new do
125
+ state_machine :state, initial: :mathy do
126
+ state :polynomial
127
+
128
+ event(:algebraify) { transition polynomial: same }
129
+ event(:trigonomalize) { transition trigonomalize: same }
130
+ end
131
+ end
132
+ @matcher_subject = matcher_class.new
133
+ end
134
+
135
+ context 'because it cannot perform the event' do
136
+ before do
137
+ @matcher = described_class.new(:mathy, to_state: :polynomial, on_event: :algebraify)
138
+ end
139
+
140
+ it 'sets a failure message' do
141
+ @matcher.matches? @matcher_subject
142
+ expect(@matcher.failure_message).to eq('Expected to be able to transition state from: ' \
143
+ 'mathy to: polynomial, on_event: algebraify')
144
+ end
145
+ it 'returns false' do
146
+ expect(@matcher.matches?(@matcher_subject)).to be_falsey
147
+ end
148
+ end
149
+ end
150
+
151
+ describe '#description' do
152
+ context 'with one from state' do
153
+ let(:matcher) { described_class.new(:mathy, to_state: :polynomial, on_event: :trigonomalize) }
154
+
155
+ it 'returns a string description' do
156
+ expect(matcher.description).to eq('transition state to :polynomial from :mathy on event :trigonomalize')
157
+ end
158
+ end
159
+
160
+ context 'when multiple from states' do
161
+ let(:matcher) { described_class.new(:mathy, :arsty, to_state: :polynomial, on_event: :trigonomalize) }
162
+
163
+ it 'mentions the requisite state' do
164
+ expect(matcher.description).to eq('transition state to :polynomial from :mathy, :arsty on event :trigonomalize')
165
+ end
166
+ end
167
+
168
+ context 'when :on is specified' do
169
+ let(:matcher) { described_class.new(:mathy, to_state: :polynomial, on_event: :trigonomalize, on: :mathiness) }
170
+
171
+ it 'mentions the state machines variable' do
172
+ expect(matcher.description).to eq('transition state to :polynomial from :mathy on event :trigonomalize on :mathiness')
173
+ end
174
+ end
175
+ end
176
+ end
177
+ end
@@ -0,0 +1,12 @@
1
+ require 'state_machines'
2
+ require 'state_machines_rspec'
3
+ require 'timecop'
4
+ require 'rspec/its'
5
+
6
+ RSpec.configure do |config|
7
+ config.run_all_when_everything_filtered = true
8
+ config.filter_run :focus
9
+ config.order = 'random'
10
+
11
+ config.include StateMachinesRspec::Matchers
12
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'state_machines_rspec/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'state_machines-rspec'
8
+ spec.version = StateMachinesRspec::VERSION
9
+ spec.authors = ['JohnSmall', 'modocache']
10
+ spec.email = ['jds340@gmail.com', 'modocache@gmail.com']
11
+ spec.description = %q{ RSpec matchers for state_machines. Forked from modocache/state_machine_rspec to work with state-machines/state_machines (https://github.com/state-machines/state_machines)}
12
+ spec.summary = %q{ RSpec matchers for state-machines/state_machines. }
13
+ spec.homepage = 'http://github.com/state-machines/state_machines-rspec'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.test_files = spec.files.grep(%r{^(spec)/})
18
+ spec.require_paths = ['lib']
19
+
20
+ spec.add_dependency 'rspec', '~>3.3'
21
+ spec.add_dependency 'state_machines'
22
+ spec.add_dependency 'activesupport'
23
+
24
+ spec.add_development_dependency 'bundler'
25
+ spec.add_development_dependency 'rake'
26
+ spec.add_development_dependency 'timecop'
27
+ spec.add_development_dependency 'guard-rspec'
28
+ spec.add_development_dependency 'rb-fsevent'
29
+ spec.add_development_dependency 'terminal-notifier-guard'
30
+ spec.add_development_dependency 'rspec-its'
31
+ spec.add_development_dependency 'awesome_print'
32
+ end
metadata ADDED
@@ -0,0 +1,237 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: state_machines-rspec
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0
5
+ platform: ruby
6
+ authors:
7
+ - JohnSmall
8
+ - modocache
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2017-06-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '3.3'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '3.3'
28
+ - !ruby/object:Gem::Dependency
29
+ name: state_machines
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: activesupport
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: bundler
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rake
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: timecop
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: guard-rspec
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rb-fsevent
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: terminal-notifier-guard
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: rspec-its
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: awesome_print
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ description: " RSpec matchers for state_machines. Forked from modocache/state_machine_rspec
169
+ to work with state-machines/state_machines (https://github.com/state-machines/state_machines)"
170
+ email:
171
+ - jds340@gmail.com
172
+ - modocache@gmail.com
173
+ executables: []
174
+ extensions: []
175
+ extra_rdoc_files: []
176
+ files:
177
+ - ".gitignore"
178
+ - ".rspec"
179
+ - ".ruby-version"
180
+ - CHANGELOG.md
181
+ - Gemfile
182
+ - Guardfile
183
+ - LICENSE.txt
184
+ - README.md
185
+ - Rakefile
186
+ - lib/matchers/events/handle_event.rb
187
+ - lib/matchers/events/matcher.rb
188
+ - lib/matchers/events/reject_event.rb
189
+ - lib/matchers/states/have_state.rb
190
+ - lib/matchers/states/matcher.rb
191
+ - lib/matchers/states/reject_state.rb
192
+ - lib/matchers/transitions/transition_from.rb
193
+ - lib/state_machines_rspec.rb
194
+ - lib/state_machines_rspec/state_machines_introspector.rb
195
+ - lib/state_machines_rspec/version.rb
196
+ - spec/integration/integration_spec.rb
197
+ - spec/integration/models/vehicle.rb
198
+ - spec/matchers/events/handle_event_spec.rb
199
+ - spec/matchers/events/reject_event_spec.rb
200
+ - spec/matchers/states/have_state_spec.rb
201
+ - spec/matchers/states/reject_state_spec.rb
202
+ - spec/matchers/transitions/transition_from_spec.rb
203
+ - spec/spec_helper.rb
204
+ - state_machines-rspec.gemspec
205
+ homepage: http://github.com/state-machines/state_machines-rspec
206
+ licenses:
207
+ - MIT
208
+ metadata: {}
209
+ post_install_message:
210
+ rdoc_options: []
211
+ require_paths:
212
+ - lib
213
+ required_ruby_version: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - ">="
216
+ - !ruby/object:Gem::Version
217
+ version: '0'
218
+ required_rubygems_version: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ requirements: []
224
+ rubyforge_project:
225
+ rubygems_version: 2.6.11
226
+ signing_key:
227
+ specification_version: 4
228
+ summary: RSpec matchers for state-machines/state_machines.
229
+ test_files:
230
+ - spec/integration/integration_spec.rb
231
+ - spec/integration/models/vehicle.rb
232
+ - spec/matchers/events/handle_event_spec.rb
233
+ - spec/matchers/events/reject_event_spec.rb
234
+ - spec/matchers/states/have_state_spec.rb
235
+ - spec/matchers/states/reject_state_spec.rb
236
+ - spec/matchers/transitions/transition_from_spec.rb
237
+ - spec/spec_helper.rb