acts-as-approvable 0.6.7 → 0.6.8.1

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.
Files changed (64) hide show
  1. data/.gitignore +2 -5
  2. data/.rspec +2 -0
  3. data/.travis.yml +5 -0
  4. data/Appraisals +14 -10
  5. data/CHANGELOG +16 -0
  6. data/Gemfile.lock +60 -20
  7. data/README.md +1 -2
  8. data/Rakefile +44 -16
  9. data/VERSION +1 -1
  10. data/acts-as-approvable.gemspec +21 -11
  11. data/features/create_approval.feature +26 -0
  12. data/features/step_definitions/cucumber_steps.rb +86 -0
  13. data/features/support/env.rb +14 -0
  14. data/features/support/large.txt +29943 -0
  15. data/features/support/second_large.txt +31798 -0
  16. data/features/update_approval.feature +34 -0
  17. data/gemfiles/Gemfile.ci +14 -0
  18. data/gemfiles/Gemfile.ci.lock +98 -0
  19. data/gemfiles/mysql2.gemfile +7 -0
  20. data/gemfiles/mysql2.gemfile.lock +92 -0
  21. data/gemfiles/rails2.gemfile +1 -0
  22. data/gemfiles/rails2.gemfile.lock +59 -17
  23. data/gemfiles/rails30.gemfile +1 -0
  24. data/gemfiles/rails30.gemfile.lock +54 -14
  25. data/gemfiles/rails31.gemfile +1 -0
  26. data/gemfiles/rails31.gemfile.lock +54 -14
  27. data/gemfiles/sqlite.gemfile +7 -0
  28. data/generators/acts_as_approvable/templates/create_approvals.rb +8 -7
  29. data/lib/acts-as-approvable.rb +2 -3
  30. data/lib/acts_as_approvable/approval.rb +3 -2
  31. data/lib/acts_as_approvable/model.rb +55 -0
  32. data/lib/acts_as_approvable/model/class_methods.rb +63 -0
  33. data/lib/acts_as_approvable/model/create_instance_methods.rb +83 -0
  34. data/lib/acts_as_approvable/model/instance_methods.rb +89 -0
  35. data/lib/acts_as_approvable/model/update_instance_methods.rb +61 -0
  36. data/lib/acts_as_approvable/railtie.rb +1 -1
  37. data/lib/generators/acts_as_approvable/templates/create_approvals.rb +8 -7
  38. data/spec/acts_as_approvable/approval_spec.rb +475 -0
  39. data/spec/acts_as_approvable/model/class_methods_spec.rb +219 -0
  40. data/spec/acts_as_approvable/model/create_instance_methods_spec.rb +149 -0
  41. data/spec/acts_as_approvable/model/instance_methods_spec.rb +328 -0
  42. data/spec/acts_as_approvable/model/update_instance_methods_spec.rb +111 -0
  43. data/spec/acts_as_approvable/model_spec.rb +90 -0
  44. data/spec/acts_as_approvable/ownership/class_methods_spec.rb +101 -0
  45. data/spec/acts_as_approvable/ownership/instance_methods_spec.rb +32 -0
  46. data/spec/acts_as_approvable/ownership_spec.rb +51 -0
  47. data/spec/acts_as_approvable_spec.rb +29 -0
  48. data/spec/spec_helper.rb +51 -0
  49. data/spec/support/database.rb +46 -0
  50. data/spec/support/database.yml +12 -0
  51. data/spec/support/matchers.rb +87 -0
  52. data/spec/support/models.rb +60 -0
  53. data/{test → spec/support}/schema.rb +15 -9
  54. metadata +156 -53
  55. data/gemfiles/rails32.gemfile +0 -8
  56. data/gemfiles/rails32.gemfile.lock +0 -99
  57. data/lib/acts_as_approvable/acts_as_approvable.rb +0 -291
  58. data/test/acts_as_approvable_model_test.rb +0 -459
  59. data/test/acts_as_approvable_ownership_test.rb +0 -132
  60. data/test/acts_as_approvable_schema_test.rb +0 -13
  61. data/test/acts_as_approvable_test.rb +0 -8
  62. data/test/database.yml +0 -7
  63. data/test/support.rb +0 -19
  64. data/test/test_helper.rb +0 -62
@@ -0,0 +1,219 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActsAsApprovable::Model::ClassMethods do
4
+ subject { DefaultApprovable }
5
+
6
+ describe '.acts_as_approvable' do
7
+ subject { CleanApprovable }
8
+
9
+ it 'includes InstanceMethods into the class' do
10
+ subject.should_not extend(ActsAsApprovable::Model::InstanceMethods)
11
+ subject.acts_as_approvable
12
+ subject.should extend(ActsAsApprovable::Model::InstanceMethods)
13
+ end
14
+
15
+ it 'includes ClassMethods into the class' do
16
+ subject.should_not extend(ActsAsApprovable::Model::ClassMethods)
17
+ subject.acts_as_approvable
18
+ subject.should extend(ActsAsApprovable::Model::ClassMethods)
19
+ end
20
+ end
21
+
22
+ describe '.approvals_enabled?' do
23
+ before(:each) do
24
+ subject.stub(:global_approvals_on? => true)
25
+ subject.stub(:approvals_on? => true)
26
+ end
27
+
28
+ context 'when approvals are globally disabled' do
29
+ before(:each) do
30
+ subject.stub(:global_approvals_on? => false)
31
+ end
32
+
33
+ it 'returns false' do
34
+ subject.approvals_enabled?.should be_false
35
+ end
36
+
37
+ it 'checks the global status' do
38
+ subject.should_receive(:global_approvals_on?).and_return(false)
39
+ subject.approvals_enabled?
40
+ end
41
+
42
+ it 'does not check the model status' do
43
+ subject.should_not_receive(:approvals_on?)
44
+ subject.approvals_enabled?
45
+ end
46
+ end
47
+
48
+ context 'when approvals are disabled for the Model' do
49
+ before(:each) do
50
+ subject.stub(:approvals_on? => false)
51
+ end
52
+
53
+ it 'returns false' do
54
+ subject.approvals_enabled?.should be_false
55
+ end
56
+
57
+ it 'checks the global status' do
58
+ subject.should_receive(:global_approvals_on?).and_return(true)
59
+ subject.approvals_enabled?
60
+ end
61
+
62
+ it 'checks the model status' do
63
+ subject.should_receive(:approvals_on?).and_return(false)
64
+ subject.approvals_enabled?
65
+ end
66
+ end
67
+ end
68
+
69
+ describe '.approvals_disabled?' do
70
+ before(:each) do
71
+ subject.stub(:approvals_enabled? => true)
72
+ end
73
+
74
+ it 'returns the inverse of the approval queue status' do
75
+ subject.approvals_disabled?.should == !subject.approvals_enabled?
76
+ end
77
+
78
+ it 'calls .approvals_enabled? for the status' do
79
+ subject.should_receive(:approvals_enabled?).and_return(true)
80
+ subject.approvals_disabled?
81
+ end
82
+ end
83
+
84
+ describe '.approvals_off' do
85
+ before(:each) do
86
+ subject.approvals_off
87
+ end
88
+
89
+ it 'disables the model level approval queue' do
90
+ subject.approvals_on?.should be_false
91
+ end
92
+ end
93
+
94
+ describe '.approvals_on' do
95
+ before(:each) do
96
+ subject.approvals_on
97
+ end
98
+
99
+ it 'enables the model level approval queue' do
100
+ subject.approvals_on?.should be_true
101
+ end
102
+ end
103
+
104
+ describe '.approvals_on?' do
105
+ context 'when approval queues are enabled locally' do
106
+ before(:each) do
107
+ subject.approvals_disabled = false
108
+ end
109
+
110
+ it 'returns true' do
111
+ subject.approvals_on?.should be_true
112
+ end
113
+
114
+ it 'ignores the global level status' do
115
+ subject.stub(:global_approvals_on? => false)
116
+ subject.approvals_on?.should be_true
117
+ end
118
+ end
119
+
120
+ context 'when approval queues are disabled locally' do
121
+ before(:each) do
122
+ subject.approvals_disabled = true
123
+ end
124
+
125
+ it 'returns false' do
126
+ subject.approvals_on?.should be_false
127
+ end
128
+
129
+ it 'ignores the global level status' do
130
+ subject.stub(:global_approvals_on? => true)
131
+ subject.approvals_on?.should be_false
132
+ end
133
+ end
134
+ end
135
+
136
+ describe '.global_approvals_on?' do
137
+ it 'checks the global approval status' do
138
+ ActsAsApprovable.should_receive(:enabled?)
139
+ subject.global_approvals_on?
140
+ end
141
+ end
142
+
143
+ describe '.approvable_on?' do
144
+ it { should be_approvable_on(:create) }
145
+ it { should be_approvable_on(:update) }
146
+
147
+ context 'when the model is approvable on :create events' do
148
+ subject { CreatesApprovable }
149
+
150
+ it { should be_approvable_on(:create) }
151
+ it { should_not be_approvable_on(:update) }
152
+ end
153
+
154
+ context 'when the model is approvable on :update events' do
155
+ subject { UpdatesApprovable }
156
+
157
+ it { should be_approvable_on(:update) }
158
+ it { should_not be_approvable_on(:create) }
159
+ end
160
+ end
161
+
162
+ describe '.approvable_fields' do
163
+ subject { CleanApprovable }
164
+
165
+ context 'with :only fields configured' do
166
+ before(:each) do
167
+ subject.acts_as_approvable :only => [:body, :extra]
168
+ end
169
+
170
+ it 'returns the configured fields' do
171
+ subject.approvable_fields.should == ['body', 'extra']
172
+ end
173
+ end
174
+
175
+ context 'with :ignore fields configured' do
176
+ before(:each) do
177
+ subject.acts_as_approvable :ignore => [:title, :extra]
178
+ end
179
+
180
+ it 'returns the available fields minus whats ignored' do
181
+ subject.approvable_fields.should include('body')
182
+ end
183
+
184
+ it 'ignores timestamps' do
185
+ subject.approvable_fields.should_not include('created_at')
186
+ subject.approvable_fields.should_not include('updated_at')
187
+ end
188
+
189
+ it 'ignores primary keys' do
190
+ subject.approvable_fields.should_not include(subject.primary_key)
191
+ end
192
+ end
193
+ end
194
+
195
+ describe '.without_approval' do
196
+ around(:each) do |example|
197
+ subject.approvals_on
198
+ example.run
199
+ subject.approvals_on
200
+ end
201
+
202
+ it 'disables approval queues' do
203
+ @record = subject.without_approval { |m| m.create(:title => 'title', :body => 'the body') }
204
+ @record.approval.should_not be
205
+ end
206
+
207
+ it 'enables the approval queue after running' do
208
+ subject.should be_approvals_on
209
+ subject.without_approval { |m| m.create(:title => 'title', :body => 'the body') }
210
+ subject.should be_approvals_on
211
+ end
212
+
213
+ it 'returns the approval queue to the previous state' do
214
+ subject.approvals_off
215
+ subject.without_approval { |m| m.create(:title => 'title', :body => 'the body') }
216
+ subject.should_not be_approvals_on
217
+ end
218
+ end
219
+ end
@@ -0,0 +1,149 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActsAsApprovable::Model::CreateInstanceMethods do
4
+ subject { CreatesApprovable.create }
5
+
6
+ describe '#approval' do
7
+ subject { CreatesApprovable.create } # Reverse the mocking for #approval
8
+
9
+ it 'returns a :create approval' do
10
+ subject.approval.event == :create
11
+ end
12
+
13
+ it 'returns the first :create approval' do
14
+ duplicate = Approval.create(:item_id => subject.id, :item_type => 'CreatesApprovable', :event => 'create')
15
+ subject.approval != duplicate
16
+ end
17
+ end
18
+
19
+ context do
20
+ before(:each) do
21
+ @approval = subject.approvals.first
22
+ subject.stub(:approval => @approval)
23
+ end
24
+
25
+ describe '#approval_state' do
26
+ it 'gets the state from the approval record' do
27
+ @approval.should_receive(:state)
28
+ subject.approval_state
29
+ end
30
+
31
+ context 'when a :state_field is configured' do
32
+ subject { CreatesWithStateApprovable.create }
33
+
34
+ it 'gets the state from the configured field' do
35
+ subject.should_receive(:state)
36
+ subject.approval_state
37
+ end
38
+
39
+ it 'does not get the state from the approval record' do
40
+ subject.should_not_receive(:approval)
41
+ subject.approval_state
42
+ end
43
+ end
44
+ end
45
+
46
+ describe '#set_approval_state' do
47
+ it 'does nothing if no :state_field is configured' do
48
+ subject.should_not_receive(:state=)
49
+ subject.set_approval_state('pending')
50
+ end
51
+
52
+ context 'when a :state_field is configured' do
53
+ subject { CreatesWithStateApprovable.create }
54
+
55
+ it 'sets the configured field' do
56
+ subject.should_receive(:state=)
57
+ subject.set_approval_state('pending')
58
+ end
59
+ end
60
+ end
61
+
62
+ describe '#pending?' do
63
+ it 'gets the status from the approval record' do
64
+ subject.should_receive(:approval)
65
+ subject.pending?
66
+ end
67
+
68
+ context 'when a :state_field is configured' do
69
+ subject { CreatesWithStateApprovable.create }
70
+
71
+ it 'gets the state from the configured field' do
72
+ subject.should_receive(:state)
73
+ subject.pending?
74
+ end
75
+
76
+ it 'does not get the state from the approval record' do
77
+ subject.should_not_receive(:approval)
78
+ subject.pending?
79
+ end
80
+ end
81
+ end
82
+
83
+ describe '#approved?' do
84
+ it 'gets the status from the approval record' do
85
+ subject.should_receive(:approval)
86
+ subject.approved?
87
+ end
88
+
89
+ context 'when a :state_field is configured' do
90
+ subject { CreatesWithStateApprovable.create }
91
+
92
+ it 'gets the state from the configured field' do
93
+ subject.should_receive(:state)
94
+ subject.approved?
95
+ end
96
+
97
+ it 'does not get the state from the approval record' do
98
+ subject.should_not_receive(:approval)
99
+ subject.approved?
100
+ end
101
+ end
102
+ end
103
+
104
+ describe '#rejected?' do
105
+ it 'gets the status from the approval record' do
106
+ subject.should_receive(:approval)
107
+ subject.rejected?
108
+ end
109
+
110
+ context 'when a :state_field is configured' do
111
+ subject { CreatesWithStateApprovable.create }
112
+
113
+ it 'gets the state from the configured field' do
114
+ subject.should_receive(:state)
115
+ subject.rejected?
116
+ end
117
+
118
+ it 'does not get the state from the approval record' do
119
+ subject.should_not_receive(:approval)
120
+ subject.rejected?
121
+ end
122
+ end
123
+ end
124
+
125
+ describe '#approve!' do
126
+ it 'approves the record' do
127
+ subject.approve!
128
+ subject.should be_approved
129
+ end
130
+
131
+ it 'proxies to the approval record for approval' do
132
+ subject.should_receive(:approval)
133
+ subject.approve!
134
+ end
135
+ end
136
+
137
+ describe '#reject!' do
138
+ it 'rejects the record' do
139
+ subject.reject!
140
+ subject.should be_rejected
141
+ end
142
+
143
+ it 'proxies to the approval record for approval' do
144
+ subject.should_receive(:approval)
145
+ subject.reject!
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,328 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActsAsApprovable::Model::InstanceMethods do
4
+ subject { DefaultApprovable.new }
5
+
6
+ describe '#approvals_enabled?' do
7
+ before(:each) do
8
+ subject.stub(:global_approvals_on? => true)
9
+ subject.stub(:model_approvals_on? => true)
10
+ subject.stub(:approvals_on? => true)
11
+ end
12
+
13
+ context 'when approvals are globally disabled' do
14
+ before(:each) do
15
+ subject.stub(:global_approvals_on? => false)
16
+ end
17
+
18
+ it 'returns false' do
19
+ subject.approvals_enabled?.should be_false
20
+ end
21
+
22
+ it 'checks the global status' do
23
+ subject.should_receive(:global_approvals_on?).and_return(false)
24
+ subject.approvals_enabled?
25
+ end
26
+
27
+ it 'does not check the model status' do
28
+ subject.should_not_receive(:model_approvals_on?)
29
+ subject.approvals_enabled?
30
+ end
31
+
32
+ it 'does not check the record status' do
33
+ subject.should_not_receive(:approvals_on?)
34
+ subject.approvals_enabled?
35
+ end
36
+ end
37
+
38
+ context 'when approvals are disabled for the Model' do
39
+ before(:each) do
40
+ subject.stub(:model_approvals_on? => false)
41
+ end
42
+
43
+ it 'returns false' do
44
+ subject.approvals_enabled?.should be_false
45
+ end
46
+
47
+ it 'checks the global status' do
48
+ subject.should_receive(:global_approvals_on?).and_return(true)
49
+ subject.approvals_enabled?
50
+ end
51
+
52
+ it 'checks the model status' do
53
+ subject.should_receive(:model_approvals_on?).and_return(false)
54
+ subject.approvals_enabled?
55
+ end
56
+
57
+ it 'does not check the record status' do
58
+ subject.should_not_receive(:approvals_on?)
59
+ subject.approvals_enabled?
60
+ end
61
+ end
62
+
63
+ context 'when approvals are disabled for the Record' do
64
+ before(:each) do
65
+ subject.stub(:approvals_on? => false)
66
+ end
67
+
68
+ it 'returns false' do
69
+ subject.approvals_enabled?.should be_false
70
+ end
71
+
72
+ it 'checks the global status' do
73
+ subject.should_receive(:global_approvals_on?).and_return(true)
74
+ subject.approvals_enabled?
75
+ end
76
+
77
+ it 'checks the model status' do
78
+ subject.should_receive(:model_approvals_on?).and_return(true)
79
+ subject.approvals_enabled?
80
+ end
81
+
82
+ it 'checks the record status' do
83
+ subject.should_receive(:approvals_on?).and_return(false)
84
+ subject.approvals_enabled?
85
+ end
86
+ end
87
+ end
88
+
89
+ describe '#approvals_disabled?' do
90
+ before(:each) do
91
+ subject.stub(:approvals_enabled? => true)
92
+ end
93
+
94
+ it 'returns the inverse of the approval queue status' do
95
+ subject.approvals_disabled?.should == !subject.approvals_enabled?
96
+ end
97
+
98
+ it 'calls #approvals_enabled? for the status' do
99
+ subject.should_receive(:approvals_enabled?).and_return(true)
100
+ subject.approvals_disabled?
101
+ end
102
+ end
103
+
104
+ describe '#approvals_off' do
105
+ before(:each) do
106
+ subject.approvals_off
107
+ end
108
+
109
+ it 'disables the record level approval queue' do
110
+ subject.approvals_on?.should be_false
111
+ end
112
+ end
113
+
114
+ describe '#approvals_on' do
115
+ before(:each) do
116
+ subject.approvals_on
117
+ end
118
+
119
+ it 'enables the record level approval queue' do
120
+ subject.approvals_on?.should be_true
121
+ end
122
+ end
123
+
124
+ describe '#approvals_on?' do
125
+ context 'when approval queues are enabled locally' do
126
+ before(:each) do
127
+ subject.instance_variable_set('@approvals_disabled', false)
128
+ end
129
+
130
+ it 'returns true' do
131
+ subject.approvals_on?.should be_true
132
+ end
133
+
134
+ it 'ignores the model level status' do
135
+ subject.stub(:model_approvals_on? => false)
136
+ subject.approvals_on?.should be_true
137
+ end
138
+
139
+ it 'ignores the global level status' do
140
+ subject.stub(:global_approvals_on? => false)
141
+ subject.approvals_on?.should be_true
142
+ end
143
+ end
144
+
145
+ context 'when approval queues are disabled locally' do
146
+ before(:each) do
147
+ subject.instance_variable_set('@approvals_disabled', true)
148
+ end
149
+
150
+ it 'returns false' do
151
+ subject.approvals_on?.should be_false
152
+ end
153
+
154
+ it 'ignores the model level status' do
155
+ subject.stub(:model_approvals_on? => true)
156
+ subject.approvals_on?.should be_false
157
+ end
158
+
159
+ it 'ignores the global level status' do
160
+ subject.stub(:global_approvals_on? => true)
161
+ subject.approvals_on?.should be_false
162
+ end
163
+ end
164
+ end
165
+
166
+ describe '#approvable_on?' do
167
+ it { should be_approvable_on(:create) }
168
+ it { should be_approvable_on(:update) }
169
+
170
+ context 'when the model is approvable on :create events' do
171
+ subject { CreatesApprovable.new }
172
+
173
+ it { should be_approvable_on(:create) }
174
+ it { should_not be_approvable_on(:update) }
175
+ end
176
+
177
+ context 'when the model is approvable on :update events' do
178
+ subject { UpdatesApprovable.new }
179
+
180
+ it { should be_approvable_on(:update) }
181
+ it { should_not be_approvable_on(:create) }
182
+ end
183
+ end
184
+
185
+ context 'with approval and rejection hooks' do
186
+ before(:each) do
187
+ @record = CreatesApprovable.create
188
+
189
+ @approval = @record.approval
190
+ @approval.stub(:item => @record)
191
+ end
192
+
193
+ describe '#before_approve' do
194
+ before(:each) do
195
+ @record.stub(:before_approve => true)
196
+ end
197
+
198
+ it 'is called when approving a record' do
199
+ @record.should_receive(:before_approve).and_return(true)
200
+ @approval.approve!
201
+ end
202
+
203
+ it 'is not called when rejecting a record' do
204
+ @record.should_not_receive(:before_approve)
205
+ @approval.reject!
206
+ end
207
+
208
+ it 'receives the approval as an argument' do
209
+ @record.should_receive(:before_approve).with(@approval).and_return(true)
210
+ @approval.approve!
211
+ end
212
+
213
+ context 'when it returns false' do
214
+ before(:each) do
215
+ @record.stub(:before_approve => false)
216
+ end
217
+
218
+ it 'prevents the approval from proceeding' do
219
+ @approval.approve!
220
+ @approval.state.should == 'pending'
221
+ end
222
+ end
223
+ end
224
+
225
+ describe '#before_reject' do
226
+ before(:each) do
227
+ @record.stub(:before_reject => true)
228
+ end
229
+
230
+ it 'is called when rejecting a record' do
231
+ @record.should_receive(:before_reject).and_return(true)
232
+ @approval.reject!
233
+ end
234
+
235
+ it 'is not called when approving a record' do
236
+ @record.should_not_receive(:before_reject)
237
+ @approval.approve!
238
+ end
239
+
240
+ it 'receives the approval as an argument' do
241
+ @record.should_receive(:before_reject).with(@approval).and_return(true)
242
+ @approval.reject!
243
+ end
244
+
245
+ context 'when it returns false' do
246
+ before(:each) do
247
+ @record.stub(:before_reject => false)
248
+ end
249
+
250
+ it 'prevents the rejection from proceeding' do
251
+ @approval.reject!
252
+ @approval.state.should == 'pending'
253
+ end
254
+ end
255
+ end
256
+
257
+ describe '#after_approve' do
258
+ it 'is called when approving a record' do
259
+ @record.should_receive(:before_approve)
260
+ @approval.approve!
261
+ end
262
+
263
+ it 'is not called when rejecting a record' do
264
+ @record.should_not_receive(:after_approve)
265
+ @approval.reject!
266
+ end
267
+
268
+ it 'receives the approval as an argument' do
269
+ @record.should_receive(:after_approve).with(@approval).and_return(true)
270
+ @approval.approve!
271
+ end
272
+ end
273
+
274
+ describe '#after_reject' do
275
+ it 'is called when rejecting a record' do
276
+ @record.should_receive(:after_reject).and_return(true)
277
+ @approval.reject!
278
+ end
279
+
280
+ it 'is not called when approving a record' do
281
+ @record.should_not_receive(:after_reject)
282
+ @approval.approve!
283
+ end
284
+
285
+ it 'receives the approval as an argument' do
286
+ @record.should_receive(:after_reject).with(@approval).and_return(true)
287
+ @approval.reject!
288
+ end
289
+ end
290
+ end
291
+
292
+ describe '#without_approval' do
293
+ around(:each) do
294
+ subject.approvals_on
295
+ end
296
+
297
+ it 'disables approval queues' do
298
+ subject.without_approval { |r| r.update_attributes(:title => 'no review') }
299
+ subject.update_approvals.should be_empty
300
+ end
301
+
302
+ it 'enables the approval queue after running' do
303
+ subject.should be_approvals_on
304
+ subject.without_approval { |r| r.update_attributes(:title => 'no review') }
305
+ subject.should be_approvals_on
306
+ end
307
+
308
+ it 'returns the approval queue to the previous state' do
309
+ subject.approvals_off
310
+ subject.without_approval { |r| r.update_attributes(:title => 'no review') }
311
+ subject.should_not be_approvals_on
312
+ end
313
+ end
314
+
315
+ describe '#save_without_approval' do
316
+ it 'calls #without_approval' do
317
+ subject.should_receive(:without_approval)
318
+ subject.save_without_approval
319
+ end
320
+ end
321
+
322
+ describe '#save_without_approval!' do
323
+ it 'calls #without_approval' do
324
+ subject.should_receive(:without_approval)
325
+ subject.save_without_approval!
326
+ end
327
+ end
328
+ end