draftsman 0.5.1 → 0.6.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.
- checksums.yaml +4 -4
- data/.travis.yml +12 -0
- data/CHANGELOG.md +34 -0
- data/README.md +244 -181
- data/lib/draftsman/config.rb +4 -1
- data/lib/draftsman/draft.rb +117 -80
- data/lib/draftsman/frameworks/rspec.rb +1 -1
- data/lib/draftsman/model.rb +253 -235
- data/lib/draftsman/version.rb +1 -1
- data/lib/draftsman.rb +26 -5
- data/lib/generators/draftsman/templates/config/initializers/draftsman.rb +16 -7
- data/spec/draftsman_spec.rb +7 -9
- data/spec/dummy/app/controllers/application_controller.rb +2 -2
- data/spec/dummy/app/models/overridden_draft.rb +7 -0
- data/spec/dummy/app/models/talkative.rb +21 -43
- data/spec/dummy/db/schema.rb +1 -0
- data/spec/models/child_spec.rb +17 -17
- data/spec/models/draft_spec.rb +893 -305
- data/spec/models/enumable_spec.rb +3 -2
- data/spec/models/overridden_draft_spec.rb +41 -0
- data/spec/models/parent_spec.rb +10 -10
- data/spec/models/skipper_spec.rb +221 -219
- data/spec/models/talkative_spec.rb +107 -108
- data/spec/models/trashable_spec.rb +6 -10
- data/spec/models/vanilla_spec.rb +570 -229
- data/spec/models/whitelister_spec.rb +489 -348
- metadata +7 -10
- data/spec/dummy/db/migrate/20110208155312_set_up_test_tables.rb +0 -95
- data/spec/dummy/db/migrate/20150404203627_add_talkatives_table_to_tests.rb +0 -18
- data/spec/dummy/db/migrate/20150408234937_add_only_children.rb +0 -16
- data/spec/dummy/db/migrate/20160328184419_create_enumables.rb +0 -9
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
RSpec.describe Enumable, :
|
3
|
+
RSpec.describe Enumable, type: :model do
|
4
4
|
let(:enumable) { Enumable.new(status: :active) }
|
5
|
+
|
5
6
|
describe '#draft' do
|
6
7
|
describe '#reify' do
|
7
|
-
before { enumable.
|
8
|
+
before { enumable.save_draft }
|
8
9
|
|
9
10
|
it 'does not raise an exception' do
|
10
11
|
expect { enumable.draft.reify }.to_not raise_error
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe OverriddenDraft, type: :model do
|
4
|
+
context 'overridden via `draft_class_name` setting' do
|
5
|
+
let(:vanilla) { Vanilla.new(name: 'Bob') }
|
6
|
+
let!(:class_name_was) { Draftsman.draft_class_name }
|
7
|
+
after { Draftsman.draft_class_name = class_name_was }
|
8
|
+
|
9
|
+
before do
|
10
|
+
Draftsman.draft_class_name = 'OverriddenDraft'
|
11
|
+
|
12
|
+
class Vanilla <ActiveRecord::Base
|
13
|
+
has_drafts
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#draft.class.name' do
|
18
|
+
it 'has an `OverriddenDraft` record as its draft' do
|
19
|
+
vanilla.save_draft
|
20
|
+
expect(vanilla.draft.class.name).to eql 'OverriddenDraft'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'with default `draft_class_name` setting' do
|
26
|
+
let(:vanilla) { Vanilla.new(name: 'Bob') }
|
27
|
+
|
28
|
+
before do
|
29
|
+
class Vanilla < ActiveRecord::Base
|
30
|
+
has_drafts
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#draft.class.name' do
|
35
|
+
it 'has the default `Draftsman::Draft` record as its draft' do
|
36
|
+
vanilla.save_draft
|
37
|
+
expect(vanilla.reload.draft.class.name).to eql 'Draftsman::Draft'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/spec/models/parent_spec.rb
CHANGED
@@ -7,8 +7,8 @@ describe Parent do
|
|
7
7
|
describe 'publish!' do
|
8
8
|
context 'parent `create` draft with child `create` draft' do
|
9
9
|
before do
|
10
|
-
parent.
|
11
|
-
child.
|
10
|
+
parent.save_draft
|
11
|
+
child.save_draft
|
12
12
|
end
|
13
13
|
|
14
14
|
subject { parent.draft.publish! }
|
@@ -68,8 +68,8 @@ describe Parent do
|
|
68
68
|
describe 'revert!' do
|
69
69
|
context 'parent `create` draft with child `create` draft' do
|
70
70
|
before do
|
71
|
-
parent.
|
72
|
-
child.
|
71
|
+
parent.save_draft
|
72
|
+
child.save_draft
|
73
73
|
end
|
74
74
|
|
75
75
|
subject { parent.draft.revert! }
|
@@ -140,8 +140,8 @@ describe Parent do
|
|
140
140
|
describe 'draft_publication_dependencies' do
|
141
141
|
context 'parent `create` draft with child `create` draft' do
|
142
142
|
before do
|
143
|
-
parent.
|
144
|
-
child.
|
143
|
+
parent.save_draft
|
144
|
+
child.save_draft
|
145
145
|
end
|
146
146
|
|
147
147
|
subject { parent.draft }
|
@@ -155,8 +155,8 @@ describe Parent do
|
|
155
155
|
before do
|
156
156
|
parent.save!
|
157
157
|
parent.name = 'Selma'
|
158
|
-
parent.
|
159
|
-
child.
|
158
|
+
parent.save_draft
|
159
|
+
child.save_draft
|
160
160
|
end
|
161
161
|
|
162
162
|
subject { parent.draft }
|
@@ -188,8 +188,8 @@ describe Parent do
|
|
188
188
|
describe 'draft_reversion_dependencies' do
|
189
189
|
context 'parent `create` draft with child `create` draft' do
|
190
190
|
before do
|
191
|
-
parent.
|
192
|
-
child.
|
191
|
+
parent.save_draft
|
192
|
+
child.save_draft
|
193
193
|
end
|
194
194
|
|
195
195
|
subject { parent.draft }
|
data/spec/models/skipper_spec.rb
CHANGED
@@ -1,58 +1,17 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Skipper do
|
3
|
+
RSpec.describe Skipper, type: :model do
|
4
4
|
let(:skipper) { Skipper.new :name => 'Bob', :skip_me => 'Skipped 1' }
|
5
5
|
|
6
6
|
it 'is draftable' do
|
7
7
|
expect(subject.class.draftable?).to eql true
|
8
8
|
end
|
9
9
|
|
10
|
-
describe '
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
it 'is persisted' do
|
17
|
-
expect(subject).to be_persisted
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'is a draft' do
|
21
|
-
expect(subject.draft?).to eql true
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'has a `draft_id`' do
|
25
|
-
expect(subject.draft_id).to be_present
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'has a draft' do
|
29
|
-
expect(subject.draft).to be_present
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'has a `create` draft' do
|
33
|
-
expect(subject.draft.create?).to eql true
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'has a `name`' do
|
37
|
-
expect(subject.name).to eql 'Bob'
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'has a value for `skip_me`' do
|
41
|
-
expect(subject.skip_me).to eql 'Skipped 1'
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
describe 'draft_update' do
|
46
|
-
subject do
|
47
|
-
skipper.draft_update
|
48
|
-
skipper.reload
|
49
|
-
end
|
50
|
-
|
51
|
-
context 'without existing draft' do
|
52
|
-
before do
|
53
|
-
skipper.save!
|
54
|
-
skipper.name = 'Sam'
|
55
|
-
skipper.skip_me = 'Skipped 2'
|
10
|
+
describe '#save_draft' do
|
11
|
+
context 'on create' do
|
12
|
+
subject do
|
13
|
+
skipper.save_draft
|
14
|
+
skipper.reload
|
56
15
|
end
|
57
16
|
|
58
17
|
it 'is persisted' do
|
@@ -67,68 +26,32 @@ describe Skipper do
|
|
67
26
|
expect(subject.draft_id).to be_present
|
68
27
|
end
|
69
28
|
|
70
|
-
it 'has a
|
29
|
+
it 'has a draft' do
|
71
30
|
expect(subject.draft).to be_present
|
72
31
|
end
|
73
32
|
|
74
|
-
it '
|
75
|
-
expect(subject.draft.
|
33
|
+
it 'has a `create` draft' do
|
34
|
+
expect(subject.draft.create?).to eql true
|
76
35
|
end
|
77
36
|
|
78
|
-
it 'has
|
37
|
+
it 'has a `name`' do
|
79
38
|
expect(subject.name).to eql 'Bob'
|
80
39
|
end
|
81
40
|
|
82
|
-
it 'has
|
83
|
-
expect(subject.skip_me).to eql 'Skipped
|
84
|
-
end
|
85
|
-
|
86
|
-
it 'creates a new draft' do
|
87
|
-
expect { subject }.to change(Draftsman::Draft, :count).by(1)
|
41
|
+
it 'has a value for `skip_me`' do
|
42
|
+
expect(subject.skip_me).to eql 'Skipped 1'
|
88
43
|
end
|
89
44
|
end
|
90
45
|
|
91
|
-
|
92
|
-
|
93
|
-
skipper.
|
94
|
-
skipper.save!
|
95
|
-
skipper.name = 'Sam'
|
96
|
-
skipper.draft_update
|
46
|
+
context 'on update' do
|
47
|
+
subject do
|
48
|
+
skipper.save_draft
|
97
49
|
skipper.reload
|
98
|
-
skipper.name = 'Bob'
|
99
|
-
skipper.skip_me = 'Skipped 2'
|
100
50
|
end
|
101
51
|
|
102
|
-
|
103
|
-
expect(subject.draft?).to eql false
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'no longer has a `draft_id`' do
|
107
|
-
expect(subject.draft_id).to be_nil
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'no longer has a `draft`' do
|
111
|
-
expect(subject.draft).to be_nil
|
112
|
-
end
|
113
|
-
|
114
|
-
it 'has its original `name`' do
|
115
|
-
expect(subject.name).to eql 'Bob'
|
116
|
-
end
|
117
|
-
|
118
|
-
it "retains the updated skipped attribute's value" do
|
119
|
-
expect(subject.skip_me).to eql 'Skipped 2'
|
120
|
-
end
|
121
|
-
|
122
|
-
it 'destroys the draft' do
|
123
|
-
expect { subject }.to change(Draftsman::Draft.where(:id => skipper.draft_id), :count).by(-1)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
context 'with existing `create` draft' do
|
128
|
-
before { skipper.draft_creation }
|
129
|
-
|
130
|
-
context 'with changes' do
|
52
|
+
context 'without existing draft' do
|
131
53
|
before do
|
54
|
+
skipper.save!
|
132
55
|
skipper.name = 'Sam'
|
133
56
|
skipper.skip_me = 'Skipped 2'
|
134
57
|
end
|
@@ -149,196 +72,275 @@ describe Skipper do
|
|
149
72
|
expect(subject.draft).to be_present
|
150
73
|
end
|
151
74
|
|
152
|
-
it '
|
153
|
-
expect(subject.draft.
|
75
|
+
it 'identifies as an `update` draft' do
|
76
|
+
expect(subject.draft.update?).to eql true
|
154
77
|
end
|
155
78
|
|
156
|
-
it 'has the
|
157
|
-
expect(subject.name).to eql '
|
79
|
+
it 'has the original name' do
|
80
|
+
expect(subject.name).to eql 'Bob'
|
158
81
|
end
|
159
82
|
|
160
|
-
it
|
83
|
+
it 'has the updated skipped attribute' do
|
161
84
|
expect(subject.skip_me).to eql 'Skipped 2'
|
162
85
|
end
|
163
86
|
|
164
|
-
it '
|
165
|
-
expect { subject }.
|
166
|
-
end
|
167
|
-
|
168
|
-
it "updates the draft's `name`" do
|
169
|
-
expect(subject.draft.reify.name).to eql 'Sam'
|
87
|
+
it 'creates a new draft' do
|
88
|
+
expect { subject }.to change(Draftsman::Draft, :count).by(1)
|
170
89
|
end
|
171
90
|
end
|
172
91
|
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
92
|
+
describe 'changing back to initial state' do
|
93
|
+
before do
|
94
|
+
skipper.published_at = Time.now
|
95
|
+
skipper.save!
|
96
|
+
skipper.name = 'Sam'
|
97
|
+
skipper.save_draft
|
98
|
+
skipper.reload
|
99
|
+
skipper.name = 'Bob'
|
100
|
+
skipper.skip_me = 'Skipped 2'
|
180
101
|
end
|
181
102
|
|
182
|
-
it '
|
183
|
-
expect(subject.
|
103
|
+
it 'is no longer a draft' do
|
104
|
+
expect(subject.draft?).to eql false
|
184
105
|
end
|
185
106
|
|
186
|
-
it 'has a `
|
187
|
-
expect(subject.
|
107
|
+
it 'no longer has a `draft_id`' do
|
108
|
+
expect(subject.draft_id).to be_nil
|
188
109
|
end
|
189
110
|
|
190
|
-
it 'has a `
|
191
|
-
expect(subject.draft
|
111
|
+
it 'no longer has a `draft`' do
|
112
|
+
expect(subject.draft).to be_nil
|
192
113
|
end
|
193
114
|
|
194
|
-
it 'has
|
115
|
+
it 'has its original `name`' do
|
195
116
|
expect(subject.name).to eql 'Bob'
|
196
117
|
end
|
197
118
|
|
198
|
-
it "
|
199
|
-
expect(subject.skip_me).to eql 'Skipped
|
119
|
+
it "retains the updated skipped attribute's value" do
|
120
|
+
expect(subject.skip_me).to eql 'Skipped 2'
|
200
121
|
end
|
201
122
|
|
202
|
-
it
|
203
|
-
expect { subject }.
|
123
|
+
it 'destroys the draft' do
|
124
|
+
expect { subject }.to change(Draftsman::Draft.where(:id => skipper.draft_id), :count).by(-1)
|
204
125
|
end
|
205
126
|
end
|
206
|
-
end
|
207
127
|
|
208
|
-
|
209
|
-
|
210
|
-
skipper.save!
|
211
|
-
skipper.name = 'Sam'
|
212
|
-
skipper.skip_me = 'Skipped 2'
|
213
|
-
skipper.draft_update
|
214
|
-
skipper.reload
|
215
|
-
skipper.attributes = skipper.draft.reify.attributes
|
216
|
-
end
|
128
|
+
context 'with existing `create` draft' do
|
129
|
+
before { skipper.save_draft }
|
217
130
|
|
218
|
-
|
219
|
-
|
131
|
+
context 'with changes' do
|
132
|
+
before do
|
133
|
+
skipper.name = 'Sam'
|
134
|
+
skipper.skip_me = 'Skipped 2'
|
135
|
+
end
|
220
136
|
|
221
|
-
|
222
|
-
|
223
|
-
|
137
|
+
it 'is persisted' do
|
138
|
+
expect(subject).to be_persisted
|
139
|
+
end
|
224
140
|
|
225
|
-
|
226
|
-
|
227
|
-
|
141
|
+
it 'is a draft' do
|
142
|
+
expect(subject.draft?).to eql true
|
143
|
+
end
|
228
144
|
|
229
|
-
|
230
|
-
|
231
|
-
|
145
|
+
it 'has a `draft_id`' do
|
146
|
+
expect(subject.draft_id).to be_present
|
147
|
+
end
|
232
148
|
|
233
|
-
|
234
|
-
|
235
|
-
|
149
|
+
it 'has a `draft`' do
|
150
|
+
expect(subject.draft).to be_present
|
151
|
+
end
|
236
152
|
|
237
|
-
|
238
|
-
|
239
|
-
|
153
|
+
it 'has a `create` draft' do
|
154
|
+
expect(subject.draft.create?).to eql true
|
155
|
+
end
|
240
156
|
|
241
|
-
|
242
|
-
|
243
|
-
|
157
|
+
it 'has the updated `name`' do
|
158
|
+
expect(subject.name).to eql 'Sam'
|
159
|
+
end
|
244
160
|
|
245
|
-
|
246
|
-
|
247
|
-
|
161
|
+
it "retains the updated skipped attribute's value" do
|
162
|
+
expect(subject.skip_me).to eql 'Skipped 2'
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'updates the existing draft' do
|
166
|
+
expect { subject }.to_not change(Draftsman::Draft.where(:id => skipper.draft_id), :count)
|
167
|
+
end
|
248
168
|
|
249
|
-
|
250
|
-
|
169
|
+
it "updates the draft's `name`" do
|
170
|
+
expect(subject.draft.reify.name).to eql 'Sam'
|
171
|
+
end
|
251
172
|
end
|
252
173
|
|
253
|
-
|
254
|
-
|
174
|
+
context 'with no changes' do
|
175
|
+
it 'is persisted' do
|
176
|
+
expect(subject).to be_persisted
|
177
|
+
end
|
178
|
+
|
179
|
+
it 'is a draft' do
|
180
|
+
expect(subject.draft?).to eql true
|
181
|
+
end
|
182
|
+
|
183
|
+
it 'has a `draft_id`' do
|
184
|
+
expect(subject.draft_id).to be_present
|
185
|
+
end
|
186
|
+
|
187
|
+
it 'has a `draft`' do
|
188
|
+
expect(subject.draft).to be_present
|
189
|
+
end
|
190
|
+
|
191
|
+
it 'has a `create` draft' do
|
192
|
+
expect(subject.draft.create?).to eql true
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'has the original `name`' do
|
196
|
+
expect(subject.name).to eql 'Bob'
|
197
|
+
end
|
198
|
+
|
199
|
+
it "has the original skipped attribute's value" do
|
200
|
+
expect(subject.skip_me).to eql 'Skipped 1'
|
201
|
+
end
|
202
|
+
|
203
|
+
it "doesn't change the number of drafts" do
|
204
|
+
expect { subject }.to_not change(Draftsman::Draft.where(:id => skipper.draft_id), :count)
|
205
|
+
end
|
255
206
|
end
|
256
207
|
end
|
257
208
|
|
258
|
-
context 'with
|
209
|
+
context 'with existing `update` draft' do
|
259
210
|
before do
|
260
|
-
skipper.
|
261
|
-
skipper.
|
211
|
+
skipper.save!
|
212
|
+
skipper.name = 'Sam'
|
213
|
+
skipper.skip_me = 'Skipped 2'
|
214
|
+
skipper.save_draft
|
262
215
|
skipper.reload
|
263
216
|
skipper.attributes = skipper.draft.reify.attributes
|
264
217
|
end
|
265
218
|
|
266
|
-
|
267
|
-
|
268
|
-
end
|
219
|
+
context 'with changes to drafted attribute' do
|
220
|
+
before { skipper.name = 'Steve' }
|
269
221
|
|
270
|
-
|
271
|
-
|
272
|
-
|
222
|
+
it 'is persisted' do
|
223
|
+
expect(subject).to be_persisted
|
224
|
+
end
|
273
225
|
|
274
|
-
|
275
|
-
|
276
|
-
|
226
|
+
it 'is a draft' do
|
227
|
+
expect(subject.draft?).to eql true
|
228
|
+
end
|
277
229
|
|
278
|
-
|
279
|
-
|
280
|
-
|
230
|
+
it 'has a `draft_id`' do
|
231
|
+
expect(subject.draft_id).to be_present
|
232
|
+
end
|
281
233
|
|
282
|
-
|
283
|
-
|
284
|
-
|
234
|
+
it 'has a `draft`' do
|
235
|
+
expect(subject.draft).to be_present
|
236
|
+
end
|
285
237
|
|
286
|
-
|
287
|
-
|
288
|
-
|
238
|
+
it 'has an `update` draft' do
|
239
|
+
expect(subject.draft.update?).to eql true
|
240
|
+
end
|
289
241
|
|
290
|
-
|
291
|
-
|
292
|
-
|
242
|
+
it 'has the original `name`' do
|
243
|
+
expect(subject.name).to eql 'Bob'
|
244
|
+
end
|
293
245
|
|
294
|
-
|
295
|
-
|
296
|
-
|
246
|
+
it "has the updated skipped attribute's value" do
|
247
|
+
expect(subject.skip_me).to eql 'Skipped 2'
|
248
|
+
end
|
297
249
|
|
298
|
-
|
299
|
-
|
300
|
-
|
250
|
+
it 'updates the existing draft' do
|
251
|
+
expect { subject }.to_not change(Draftsman::Draft.where(:id => skipper.draft_id), :count)
|
252
|
+
end
|
301
253
|
|
302
|
-
|
303
|
-
|
254
|
+
it "updates the draft's `name`" do
|
255
|
+
expect(subject.draft.reify.name).to eql 'Steve'
|
256
|
+
end
|
304
257
|
end
|
305
|
-
end
|
306
258
|
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
259
|
+
context 'with changes to skipped attributes' do
|
260
|
+
before do
|
261
|
+
skipper.skip_me = 'Skip and save'
|
262
|
+
skipper.save_draft
|
263
|
+
skipper.reload
|
264
|
+
skipper.attributes = skipper.draft.reify.attributes
|
265
|
+
end
|
311
266
|
|
312
|
-
|
313
|
-
|
314
|
-
|
267
|
+
it 'is persisted' do
|
268
|
+
expect(subject).to be_persisted
|
269
|
+
end
|
315
270
|
|
316
|
-
|
317
|
-
|
318
|
-
|
271
|
+
it 'is a draft' do
|
272
|
+
expect(subject.draft?).to eql true
|
273
|
+
end
|
319
274
|
|
320
|
-
|
321
|
-
|
322
|
-
|
275
|
+
it 'has a `draft_id`' do
|
276
|
+
expect(subject.draft_id).to be_present
|
277
|
+
end
|
323
278
|
|
324
|
-
|
325
|
-
|
326
|
-
|
279
|
+
it 'has a `draft`' do
|
280
|
+
expect(subject.draft).to be_present
|
281
|
+
end
|
327
282
|
|
328
|
-
|
329
|
-
|
330
|
-
|
283
|
+
it 'has an `update` draft' do
|
284
|
+
expect(subject.draft.update?).to eql true
|
285
|
+
end
|
331
286
|
|
332
|
-
|
333
|
-
|
334
|
-
|
287
|
+
it 'has the original `name`' do
|
288
|
+
expect(subject.name).to eql 'Bob'
|
289
|
+
end
|
290
|
+
|
291
|
+
it "updates skipped attribute's value" do
|
292
|
+
expect(subject.skip_me).to eql 'Skip and save'
|
293
|
+
end
|
294
|
+
|
295
|
+
it 'updates the existing draft' do
|
296
|
+
expect { subject }.to_not change(Draftsman::Draft.where(:id => skipper.draft_id), :count)
|
297
|
+
end
|
298
|
+
|
299
|
+
it "keeps the draft's `name`" do
|
300
|
+
expect(subject.draft.reify.name).to eql 'Sam'
|
301
|
+
end
|
335
302
|
|
336
|
-
|
337
|
-
|
303
|
+
it 'updates skipped attribute on draft' do
|
304
|
+
expect(subject.draft.reify.skip_me).to eql 'Skip and save'
|
305
|
+
end
|
338
306
|
end
|
339
307
|
|
340
|
-
|
341
|
-
|
308
|
+
context 'with no changes' do
|
309
|
+
it 'is persisted' do
|
310
|
+
expect(subject).to be_persisted
|
311
|
+
end
|
312
|
+
|
313
|
+
it 'is a draft' do
|
314
|
+
expect(subject.draft?).to eql true
|
315
|
+
end
|
316
|
+
|
317
|
+
it 'has a `draft_id`' do
|
318
|
+
expect(subject.draft_id).to be_present
|
319
|
+
end
|
320
|
+
|
321
|
+
it 'has a `draft`' do
|
322
|
+
expect(subject.draft).to be_present
|
323
|
+
end
|
324
|
+
|
325
|
+
it 'has an `update` draft' do
|
326
|
+
expect(subject.draft.update?).to eql true
|
327
|
+
end
|
328
|
+
|
329
|
+
it 'has the original `name`' do
|
330
|
+
expect(subject.name).to eql 'Bob'
|
331
|
+
end
|
332
|
+
|
333
|
+
it "has the updated skipped attributes' value" do
|
334
|
+
expect(subject.skip_me).to eql 'Skipped 2'
|
335
|
+
end
|
336
|
+
|
337
|
+
it "doesn't change the number of drafts" do
|
338
|
+
expect { subject }.to_not change(Draftsman::Draft.where(:id => skipper.draft_id), :count)
|
339
|
+
end
|
340
|
+
|
341
|
+
it "does not update the draft's `name`" do
|
342
|
+
expect(subject.draft.reify.name).to eql 'Sam'
|
343
|
+
end
|
342
344
|
end
|
343
345
|
end
|
344
346
|
end
|