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
data/spec/models/vanilla_spec.rb
CHANGED
@@ -2,270 +2,611 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
# A Vanilla has a simple call to `has_drafts` without any options specified.
|
4
4
|
describe Vanilla do
|
5
|
-
let(:vanilla) { Vanilla.new
|
5
|
+
let(:vanilla) { Vanilla.new(name: 'Bob') }
|
6
6
|
it { should be_draftable }
|
7
7
|
|
8
|
-
describe '
|
9
|
-
|
10
|
-
vanilla.draft_creation
|
11
|
-
vanilla.reload
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'is persisted' do
|
15
|
-
expect(subject).to be_persisted
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'is a draft' do
|
19
|
-
expect(subject.draft?).to eql true
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'has a `draft_id`' do
|
23
|
-
expect(subject.draft_id).to be_present
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'has a `draft`' do
|
27
|
-
expect(subject.draft).to be_present
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'has a `create` draft' do
|
31
|
-
expect(subject.draft.create?).to eql true
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'saves the `name`' do
|
35
|
-
expect(subject.name).to eql 'Bob'
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe 'draft_update' do
|
40
|
-
subject do
|
41
|
-
vanilla.draft_update
|
42
|
-
vanilla.reload
|
43
|
-
end
|
44
|
-
|
45
|
-
context 'without existing draft' do
|
46
|
-
before do
|
47
|
-
vanilla.save!
|
48
|
-
vanilla.name = 'Sam'
|
49
|
-
end
|
50
|
-
|
8
|
+
describe '#save_draft' do
|
9
|
+
context 'on create' do
|
51
10
|
it 'is persisted' do
|
52
|
-
|
11
|
+
vanilla.save_draft
|
12
|
+
expect(vanilla).to be_persisted
|
53
13
|
end
|
54
14
|
|
55
15
|
it 'is a draft' do
|
56
|
-
|
16
|
+
vanilla.save_draft
|
17
|
+
expect(vanilla.draft?).to eql true
|
57
18
|
end
|
58
19
|
|
59
20
|
it 'has a `draft_id`' do
|
60
|
-
|
21
|
+
vanilla.save_draft
|
22
|
+
expect(vanilla.draft_id).to be_present
|
61
23
|
end
|
62
24
|
|
63
25
|
it 'has a `draft`' do
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
it 'has an `update` draft' do
|
68
|
-
expect(subject.draft.update?).to eql true
|
26
|
+
vanilla.save_draft
|
27
|
+
expect(vanilla.draft).to be_present
|
69
28
|
end
|
70
29
|
|
71
|
-
it 'has
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
it 'creates a new draft' do
|
76
|
-
expect { subject }.to change(Draftsman::Draft, :count).by(1)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
describe 'changing back to initial state' do
|
81
|
-
before do
|
82
|
-
vanilla.published_at = Time.now
|
83
|
-
vanilla.save!
|
84
|
-
vanilla.name = 'Sam'
|
85
|
-
vanilla.draft_update
|
86
|
-
vanilla.reload
|
87
|
-
vanilla.name = 'Bob'
|
88
|
-
end
|
89
|
-
|
90
|
-
it 'is no longer a draft' do
|
91
|
-
expect(subject.draft?).to eql false
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'has the original `name`' do
|
95
|
-
expect(subject.name).to eql 'Bob'
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'does not have a `draft_id`' do
|
99
|
-
expect(subject.draft_id).to be_nil
|
100
|
-
end
|
101
|
-
|
102
|
-
it 'has no `draft`' do
|
103
|
-
expect(subject.draft).to be_nil
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'destroys the draft' do
|
107
|
-
expect { subject }.to change(Draftsman::Draft.where(:id => vanilla.draft_id), :count).by(-1)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
context 'with existing `create` draft' do
|
112
|
-
before { vanilla.draft_creation }
|
113
|
-
|
114
|
-
context 'with changes' do
|
115
|
-
before { vanilla.name = 'Sam' }
|
116
|
-
|
117
|
-
it 'is persisted' do
|
118
|
-
expect(subject).to be_persisted
|
119
|
-
end
|
120
|
-
|
121
|
-
it 'is a draft' do
|
122
|
-
expect(subject.draft?).to eql true
|
123
|
-
end
|
124
|
-
|
125
|
-
it 'has a `draft_id`' do
|
126
|
-
expect(subject.draft_id).to be_present
|
127
|
-
end
|
128
|
-
|
129
|
-
it 'has a `draft`' do
|
130
|
-
expect(subject.draft).to be_present
|
131
|
-
end
|
132
|
-
|
133
|
-
it 'records the new `name`' do
|
134
|
-
expect(subject.name).to eql 'Sam'
|
135
|
-
end
|
136
|
-
|
137
|
-
it 'updates the existing draft' do
|
138
|
-
expect { subject }.to_not change(Draftsman::Draft.where(:id => vanilla.draft_id), :count)
|
139
|
-
end
|
140
|
-
|
141
|
-
it "updates the draft's `name`" do
|
142
|
-
expect(subject.draft.reify.name).to eql 'Sam'
|
143
|
-
end
|
144
|
-
|
145
|
-
it 'has a `create` draft' do
|
146
|
-
expect(subject.draft.create?).to eql true
|
147
|
-
end
|
30
|
+
it 'has a `create` draft' do
|
31
|
+
vanilla.save_draft
|
32
|
+
expect(vanilla.draft.create?).to eql true
|
148
33
|
end
|
149
34
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
end
|
154
|
-
|
155
|
-
it 'is a draft' do
|
156
|
-
expect(subject.draft?).to eql true
|
157
|
-
end
|
158
|
-
|
159
|
-
it 'has a `draft_id`' do
|
160
|
-
expect(subject.draft_id).to be_present
|
161
|
-
end
|
162
|
-
|
163
|
-
it 'has a `draft`' do
|
164
|
-
expect(subject.draft).to be_present
|
165
|
-
end
|
166
|
-
|
167
|
-
it 'has a `create` draft' do
|
168
|
-
expect(subject.draft.create?).to eql true
|
169
|
-
end
|
170
|
-
|
171
|
-
it 'has the same `name`' do
|
172
|
-
expect(subject.name).to eql 'Bob'
|
173
|
-
end
|
174
|
-
|
175
|
-
it "doesn't change the number of drafts" do
|
176
|
-
expect { subject }.to_not change(Draftsman::Draft.where(:id => vanilla.draft_id), :count)
|
177
|
-
end
|
35
|
+
it 'saves the `name`' do
|
36
|
+
vanilla.save_draft
|
37
|
+
expect(vanilla.name).to eql 'Bob'
|
178
38
|
end
|
179
39
|
end
|
180
40
|
|
181
|
-
context '
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
41
|
+
context 'on update' do
|
42
|
+
context 'with stashed drafted changes' do
|
43
|
+
context 'without existing draft' do
|
44
|
+
before do
|
45
|
+
vanilla.save!
|
46
|
+
vanilla.name = 'Sam'
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'is persisted' do
|
50
|
+
vanilla.save_draft
|
51
|
+
expect(vanilla).to be_persisted
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'is a draft' do
|
55
|
+
vanilla.save_draft
|
56
|
+
vanilla.reload
|
57
|
+
expect(vanilla.draft?).to eql true
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'has a `draft_id`' do
|
61
|
+
vanilla.save_draft
|
62
|
+
vanilla.reload
|
63
|
+
expect(vanilla.draft_id).to be_present
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'has a `draft`' do
|
67
|
+
vanilla.save_draft
|
68
|
+
vanilla.reload
|
69
|
+
expect(vanilla.draft).to be_present
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'has an `update` draft' do
|
73
|
+
vanilla.save_draft
|
74
|
+
vanilla.reload
|
75
|
+
expect(vanilla.draft.update?).to eql true
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'has the original `name`' do
|
79
|
+
vanilla.save_draft
|
80
|
+
vanilla.reload
|
81
|
+
expect(vanilla.reload.name).to eql 'Bob'
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'creates a new draft' do
|
85
|
+
expect { vanilla.save_draft }.to change(Draftsman::Draft, :count).by(1)
|
86
|
+
end
|
195
87
|
end
|
196
88
|
|
197
|
-
|
198
|
-
|
89
|
+
describe 'changing back to initial state' do
|
90
|
+
before do
|
91
|
+
vanilla.published_at = Time.now
|
92
|
+
vanilla.save!
|
93
|
+
vanilla.name = 'Sam'
|
94
|
+
vanilla.save_draft
|
95
|
+
vanilla.reload
|
96
|
+
vanilla.name = 'Bob'
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'is no longer a draft' do
|
100
|
+
vanilla.save_draft
|
101
|
+
vanilla.reload
|
102
|
+
expect(vanilla.draft?).to eql false
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'has the original `name`' do
|
106
|
+
vanilla.save_draft
|
107
|
+
vanilla.reload
|
108
|
+
expect(vanilla.reload.name).to eql 'Bob'
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'does not have a `draft_id`' do
|
112
|
+
vanilla.save_draft
|
113
|
+
vanilla.reload
|
114
|
+
expect(vanilla.draft_id).to be_nil
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'has no `draft`' do
|
118
|
+
vanilla.save_draft
|
119
|
+
vanilla.reload
|
120
|
+
expect(vanilla.draft).to be_nil
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'destroys the draft' do
|
124
|
+
expect { vanilla.save_draft }.to change(Draftsman::Draft.where(id: vanilla.draft_id), :count).by(-1)
|
125
|
+
end
|
199
126
|
end
|
200
127
|
|
201
|
-
|
202
|
-
|
128
|
+
context 'with existing `create` draft' do
|
129
|
+
before { vanilla.save_draft }
|
130
|
+
|
131
|
+
context 'with changes' do
|
132
|
+
before { vanilla.name = 'Sam' }
|
133
|
+
|
134
|
+
it 'is persisted' do
|
135
|
+
vanilla.save_draft
|
136
|
+
vanilla.reload
|
137
|
+
expect(vanilla).to be_persisted
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'is a draft' do
|
141
|
+
vanilla.save_draft
|
142
|
+
vanilla.reload
|
143
|
+
expect(vanilla.draft?).to eql true
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'has a `draft_id`' do
|
147
|
+
vanilla.save_draft
|
148
|
+
vanilla.reload
|
149
|
+
expect(vanilla.draft_id).to be_present
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'has a `draft`' do
|
153
|
+
vanilla.save_draft
|
154
|
+
vanilla.reload
|
155
|
+
expect(vanilla.draft).to be_present
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'records the new `name`' do
|
159
|
+
vanilla.save_draft
|
160
|
+
vanilla.reload
|
161
|
+
expect(vanilla.reload.name).to eql 'Sam'
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'updates the existing draft' do
|
165
|
+
expect { vanilla.save_draft }.to_not change(Draftsman::Draft.where(id: vanilla.draft_id), :count)
|
166
|
+
end
|
167
|
+
|
168
|
+
it "updates the draft's `name`" do
|
169
|
+
vanilla.save_draft
|
170
|
+
vanilla.reload
|
171
|
+
expect(vanilla.draft.reify.name).to eql 'Sam'
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'has a `create` draft' do
|
175
|
+
vanilla.save_draft
|
176
|
+
vanilla.reload
|
177
|
+
expect(vanilla.draft.create?).to eql true
|
178
|
+
end
|
179
|
+
end # with changes
|
180
|
+
|
181
|
+
context 'with no changes' do
|
182
|
+
it 'is persisted' do
|
183
|
+
vanilla.save_draft
|
184
|
+
expect(vanilla).to be_persisted
|
185
|
+
end
|
186
|
+
|
187
|
+
it 'is a draft' do
|
188
|
+
vanilla.save_draft
|
189
|
+
vanilla.reload
|
190
|
+
expect(vanilla.draft?).to eql true
|
191
|
+
end
|
192
|
+
|
193
|
+
it 'has a `draft_id`' do
|
194
|
+
vanilla.save_draft
|
195
|
+
vanilla.reload
|
196
|
+
expect(vanilla.draft_id).to be_present
|
197
|
+
end
|
198
|
+
|
199
|
+
it 'has a `draft`' do
|
200
|
+
vanilla.save_draft
|
201
|
+
vanilla.reload
|
202
|
+
expect(vanilla.draft).to be_present
|
203
|
+
end
|
204
|
+
|
205
|
+
it 'has a `create` draft' do
|
206
|
+
vanilla.save_draft
|
207
|
+
vanilla.reload
|
208
|
+
expect(vanilla.draft.create?).to eql true
|
209
|
+
end
|
210
|
+
|
211
|
+
it 'has the same `name`' do
|
212
|
+
vanilla.save_draft
|
213
|
+
vanilla.reload
|
214
|
+
expect(vanilla.reload.name).to eql 'Bob'
|
215
|
+
end
|
216
|
+
|
217
|
+
it "doesn't change the number of drafts" do
|
218
|
+
expect { vanilla.save_draft }.to_not change(Draftsman::Draft.where(id: vanilla.draft_id), :count)
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end # with no changes
|
222
|
+
|
223
|
+
context 'with existing `update` draft' do
|
224
|
+
before do
|
225
|
+
vanilla.save!
|
226
|
+
vanilla.name = 'Sam'
|
227
|
+
vanilla.save_draft
|
228
|
+
vanilla.reload
|
229
|
+
vanilla.attributes = vanilla.draft.reify.attributes
|
230
|
+
end
|
231
|
+
|
232
|
+
context 'with changes' do
|
233
|
+
before { vanilla.name = 'Steve' }
|
234
|
+
|
235
|
+
it 'is persisted' do
|
236
|
+
vanilla.save_draft
|
237
|
+
expect(vanilla).to be_persisted
|
238
|
+
end
|
239
|
+
|
240
|
+
it 'is a draft' do
|
241
|
+
vanilla.save_draft
|
242
|
+
vanilla.reload
|
243
|
+
expect(vanilla.draft?).to eql true
|
244
|
+
end
|
245
|
+
|
246
|
+
it 'has a `draft_id`' do
|
247
|
+
vanilla.save_draft
|
248
|
+
vanilla.reload
|
249
|
+
expect(vanilla.draft_id).to be_present
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'has a `draft`' do
|
253
|
+
vanilla.save_draft
|
254
|
+
vanilla.reload
|
255
|
+
expect(vanilla.draft).to be_present
|
256
|
+
end
|
257
|
+
|
258
|
+
it 'has the original `name`' do
|
259
|
+
vanilla.save_draft
|
260
|
+
vanilla.reload
|
261
|
+
expect(vanilla.reload.name).to eql 'Bob'
|
262
|
+
end
|
263
|
+
|
264
|
+
it 'updates the existing draft' do
|
265
|
+
expect { vanilla.save_draft }.to_not change(Draftsman::Draft.where(id: vanilla.draft_id), :count)
|
266
|
+
end
|
267
|
+
|
268
|
+
it "updates the draft's `name`" do
|
269
|
+
vanilla.save_draft
|
270
|
+
vanilla.reload
|
271
|
+
expect(vanilla.draft.reify.name).to eql 'Steve'
|
272
|
+
end
|
273
|
+
|
274
|
+
it 'has an `update` draft' do
|
275
|
+
vanilla.save_draft
|
276
|
+
expect(vanilla.draft.update?).to eql true
|
277
|
+
end
|
278
|
+
end # with changes
|
279
|
+
|
280
|
+
context 'with no changes' do
|
281
|
+
it 'is persisted' do
|
282
|
+
vanilla.save_draft
|
283
|
+
expect(vanilla).to be_persisted
|
284
|
+
end
|
285
|
+
|
286
|
+
it 'is a draft' do
|
287
|
+
vanilla.save_draft
|
288
|
+
vanilla.reload
|
289
|
+
expect(vanilla.draft?).to eql true
|
290
|
+
end
|
291
|
+
|
292
|
+
it 'has a `draft_id`' do
|
293
|
+
vanilla.save_draft
|
294
|
+
vanilla.reload
|
295
|
+
expect(vanilla.draft_id).to be_present
|
296
|
+
end
|
297
|
+
|
298
|
+
it 'has a `draft`' do
|
299
|
+
vanilla.save_draft
|
300
|
+
vanilla.reload
|
301
|
+
expect(vanilla.draft).to be_present
|
302
|
+
end
|
303
|
+
|
304
|
+
it 'has an `update` draft' do
|
305
|
+
vanilla.save_draft
|
306
|
+
vanilla.reload
|
307
|
+
expect(vanilla.draft.update?).to eql true
|
308
|
+
end
|
309
|
+
|
310
|
+
it 'has the original `name`' do
|
311
|
+
vanilla.save_draft
|
312
|
+
vanilla.reload
|
313
|
+
expect(vanilla.reload.name).to eql 'Bob'
|
314
|
+
end
|
315
|
+
|
316
|
+
it "doesn't change the number of drafts" do
|
317
|
+
expect { vanilla.save_draft }.to_not change(Draftsman::Draft.where(id: vanilla.draft_id), :count)
|
318
|
+
end
|
319
|
+
|
320
|
+
it "does not update the draft's `name`" do
|
321
|
+
vanilla.save_draft
|
322
|
+
vanilla.reload
|
323
|
+
expect(vanilla.draft.reify.name).to eql 'Sam'
|
324
|
+
end
|
325
|
+
end # with no changes
|
326
|
+
end # with existing `update` draft
|
327
|
+
end # with stashed drafted changes
|
328
|
+
|
329
|
+
context 'without stashed drafted changes' do
|
330
|
+
before { Draftsman.stash_drafted_changes = false }
|
331
|
+
after { Draftsman.stash_drafted_changes = true }
|
332
|
+
|
333
|
+
context 'without existing draft' do
|
334
|
+
before do
|
335
|
+
vanilla.save!
|
336
|
+
vanilla.name = 'Sam'
|
337
|
+
end
|
338
|
+
|
339
|
+
it 'is persisted' do
|
340
|
+
vanilla.save_draft
|
341
|
+
expect(vanilla).to be_persisted
|
342
|
+
end
|
343
|
+
|
344
|
+
it 'is a draft' do
|
345
|
+
vanilla.save_draft
|
346
|
+
vanilla.reload
|
347
|
+
expect(vanilla.draft?).to eql true
|
348
|
+
end
|
349
|
+
|
350
|
+
it 'has a `draft_id`' do
|
351
|
+
vanilla.save_draft
|
352
|
+
vanilla.reload
|
353
|
+
expect(vanilla.draft_id).to be_present
|
354
|
+
end
|
355
|
+
|
356
|
+
it 'has a `draft`' do
|
357
|
+
vanilla.save_draft
|
358
|
+
vanilla.reload
|
359
|
+
expect(vanilla.draft).to be_present
|
360
|
+
end
|
361
|
+
|
362
|
+
it 'has an `update` draft' do
|
363
|
+
vanilla.save_draft
|
364
|
+
vanilla.reload
|
365
|
+
expect(vanilla.draft.update?).to eql true
|
366
|
+
end
|
367
|
+
|
368
|
+
it 'has the new `name`' do
|
369
|
+
vanilla.save_draft
|
370
|
+
vanilla.reload
|
371
|
+
expect(vanilla.reload.name).to eql 'Sam'
|
372
|
+
end
|
373
|
+
|
374
|
+
it 'creates a new draft' do
|
375
|
+
expect { vanilla.save_draft }.to change(Draftsman::Draft, :count).by(1)
|
376
|
+
end
|
203
377
|
end
|
204
378
|
|
205
|
-
|
206
|
-
|
379
|
+
describe 'changing back to initial state' do
|
380
|
+
before do
|
381
|
+
vanilla.published_at = Time.now
|
382
|
+
vanilla.save!
|
383
|
+
vanilla.name = 'Sam'
|
384
|
+
vanilla.save_draft
|
385
|
+
vanilla.reload
|
386
|
+
vanilla.name = 'Bob'
|
387
|
+
end
|
388
|
+
|
389
|
+
it 'is no longer a draft' do
|
390
|
+
vanilla.save_draft
|
391
|
+
vanilla.reload
|
392
|
+
expect(vanilla.draft?).to eql false
|
393
|
+
end
|
394
|
+
|
395
|
+
it 'has the original `name`' do
|
396
|
+
vanilla.save_draft
|
397
|
+
vanilla.reload
|
398
|
+
expect(vanilla.reload.name).to eql 'Bob'
|
399
|
+
end
|
400
|
+
|
401
|
+
it 'does not have a `draft_id`' do
|
402
|
+
vanilla.save_draft
|
403
|
+
vanilla.reload
|
404
|
+
expect(vanilla.draft_id).to be_nil
|
405
|
+
end
|
406
|
+
|
407
|
+
it 'has no `draft`' do
|
408
|
+
vanilla.save_draft
|
409
|
+
vanilla.reload
|
410
|
+
expect(vanilla.draft).to be_nil
|
411
|
+
end
|
412
|
+
|
413
|
+
it 'destroys the draft' do
|
414
|
+
expect { vanilla.save_draft }.to change(Draftsman::Draft.where(id: vanilla.draft_id), :count).by(-1)
|
415
|
+
end
|
207
416
|
end
|
208
417
|
|
209
|
-
|
210
|
-
|
418
|
+
context 'with existing `create` draft' do
|
419
|
+
before { vanilla.save_draft }
|
420
|
+
|
421
|
+
context 'with changes' do
|
422
|
+
before { vanilla.name = 'Sam' }
|
423
|
+
|
424
|
+
it 'is persisted' do
|
425
|
+
vanilla.save_draft
|
426
|
+
expect(vanilla).to be_persisted
|
427
|
+
end
|
428
|
+
|
429
|
+
it 'is a draft' do
|
430
|
+
vanilla.save_draft
|
431
|
+
expect(vanilla.draft?).to eql true
|
432
|
+
end
|
433
|
+
|
434
|
+
it 'has a `draft_id`' do
|
435
|
+
vanilla.save_draft
|
436
|
+
expect(vanilla.draft_id).to be_present
|
437
|
+
end
|
438
|
+
|
439
|
+
it 'has a `draft`' do
|
440
|
+
vanilla.save_draft
|
441
|
+
expect(vanilla.draft).to be_present
|
442
|
+
end
|
443
|
+
|
444
|
+
it 'records the new `name`' do
|
445
|
+
vanilla.save_draft
|
446
|
+
expect(vanilla.reload.name).to eql 'Sam'
|
447
|
+
end
|
448
|
+
|
449
|
+
it 'updates the existing draft' do
|
450
|
+
expect { vanilla.save_draft }.to_not change(Draftsman::Draft.where(id: vanilla.draft_id), :count)
|
451
|
+
end
|
452
|
+
|
453
|
+
it "updates the draft's `name`" do
|
454
|
+
vanilla.save_draft
|
455
|
+
expect(vanilla.draft.reify.name).to eql 'Sam'
|
456
|
+
end
|
457
|
+
|
458
|
+
it 'has a `create` draft' do
|
459
|
+
vanilla.save_draft
|
460
|
+
expect(vanilla.draft.create?).to eql true
|
461
|
+
end
|
462
|
+
end
|
463
|
+
|
464
|
+
context 'with no changes' do
|
465
|
+
it 'is persisted' do
|
466
|
+
vanilla.save_draft
|
467
|
+
expect(vanilla).to be_persisted
|
468
|
+
end
|
469
|
+
|
470
|
+
it 'is a draft' do
|
471
|
+
vanilla.save_draft
|
472
|
+
expect(vanilla.draft?).to eql true
|
473
|
+
end
|
474
|
+
|
475
|
+
it 'has a `draft_id`' do
|
476
|
+
expect(vanilla.draft_id).to be_present
|
477
|
+
end
|
478
|
+
|
479
|
+
it 'has a `draft`' do
|
480
|
+
vanilla.save_draft
|
481
|
+
expect(vanilla.draft).to be_present
|
482
|
+
end
|
483
|
+
|
484
|
+
it 'has a `create` draft' do
|
485
|
+
vanilla.save_draft
|
486
|
+
expect(vanilla.draft.create?).to eql true
|
487
|
+
end
|
488
|
+
|
489
|
+
it 'has the same `name`' do
|
490
|
+
vanilla.save_draft
|
491
|
+
expect(vanilla.reload.name).to eql 'Bob'
|
492
|
+
end
|
493
|
+
|
494
|
+
it "doesn't change the number of drafts" do
|
495
|
+
expect { vanilla.save_draft }.to_not change(Draftsman::Draft.where(id: vanilla.draft_id), :count)
|
496
|
+
end
|
497
|
+
end
|
211
498
|
end
|
212
499
|
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
500
|
+
context 'with existing `update` draft' do
|
501
|
+
before do
|
502
|
+
vanilla.save!
|
503
|
+
vanilla.name = 'Sam'
|
504
|
+
vanilla.save_draft
|
505
|
+
vanilla.reload
|
506
|
+
end
|
507
|
+
|
508
|
+
context 'with changes' do
|
509
|
+
before { vanilla.name = 'Steve' }
|
510
|
+
|
511
|
+
it 'is persisted' do
|
512
|
+
vanilla.save_draft
|
513
|
+
vanilla.reload
|
514
|
+
expect(vanilla).to be_persisted
|
515
|
+
end
|
516
|
+
|
517
|
+
it 'is a draft' do
|
518
|
+
vanilla.save_draft
|
519
|
+
vanilla.reload
|
520
|
+
expect(vanilla.draft?).to eql true
|
521
|
+
end
|
522
|
+
|
523
|
+
it 'has a `draft_id`' do
|
524
|
+
vanilla.save_draft
|
525
|
+
vanilla.reload
|
526
|
+
expect(vanilla.draft_id).to be_present
|
527
|
+
end
|
528
|
+
|
529
|
+
it 'has a `draft`' do
|
530
|
+
vanilla.save_draft
|
531
|
+
vanilla.reload
|
532
|
+
expect(vanilla.draft).to be_present
|
533
|
+
end
|
534
|
+
|
535
|
+
it 'has the new `name`' do
|
536
|
+
vanilla.save_draft
|
537
|
+
vanilla.reload
|
538
|
+
expect(vanilla.reload.name).to eql 'Steve'
|
539
|
+
end
|
540
|
+
|
541
|
+
it 'updates the existing draft' do
|
542
|
+
expect { vanilla.save_draft }.to_not change(Draftsman::Draft.where(id: vanilla.draft_id), :count)
|
543
|
+
end
|
544
|
+
|
545
|
+
it "updates the draft's `name`" do
|
546
|
+
vanilla.save_draft
|
547
|
+
vanilla.reload
|
548
|
+
expect(vanilla.draft.reify.name).to eql 'Steve'
|
549
|
+
end
|
550
|
+
|
551
|
+
it 'has an `update` draft' do
|
552
|
+
vanilla.save_draft
|
553
|
+
vanilla.reload
|
554
|
+
expect(vanilla.draft.update?).to eql true
|
555
|
+
end
|
556
|
+
end # with changes
|
557
|
+
|
558
|
+
context 'with no changes' do
|
559
|
+
it 'is persisted' do
|
560
|
+
vanilla.save_draft
|
561
|
+
expect(vanilla).to be_persisted
|
562
|
+
end
|
563
|
+
|
564
|
+
it 'is a draft' do
|
565
|
+
vanilla.save_draft
|
566
|
+
expect(vanilla.draft?).to eql true
|
567
|
+
end
|
568
|
+
|
569
|
+
it 'has a `draft_id`' do
|
570
|
+
vanilla.save_draft
|
571
|
+
expect(vanilla.draft_id).to be_present
|
572
|
+
end
|
573
|
+
|
574
|
+
it 'has a `draft`' do
|
575
|
+
vanilla.save_draft
|
576
|
+
expect(vanilla.draft).to be_present
|
577
|
+
end
|
578
|
+
|
579
|
+
it 'has an `update` draft' do
|
580
|
+
vanilla.save_draft
|
581
|
+
expect(vanilla.draft.update?).to eql true
|
582
|
+
end
|
583
|
+
|
584
|
+
it 'has the original `name`' do
|
585
|
+
vanilla.save_draft
|
586
|
+
expect(vanilla.reload.name).to eql 'Sam'
|
587
|
+
end
|
588
|
+
|
589
|
+
it "doesn't change the number of drafts" do
|
590
|
+
expect { vanilla.save_draft }.to_not change(Draftsman::Draft.where(id: vanilla.draft_id), :count)
|
591
|
+
end
|
592
|
+
|
593
|
+
it "does not update the draft's `name`" do
|
594
|
+
vanilla.save_draft
|
595
|
+
expect(vanilla.draft.reify.name).to eql 'Sam'
|
596
|
+
end
|
597
|
+
end # with no changes
|
598
|
+
end # with existing `update` draft
|
599
|
+
end # without stashed drafted changes
|
600
|
+
end # on update
|
260
601
|
end
|
261
602
|
|
262
603
|
# Not applicable to this customization
|
263
|
-
describe 'draft_destruction' do
|
604
|
+
describe '#draft_destruction' do
|
264
605
|
end
|
265
606
|
|
266
607
|
describe 'scopes' do
|
267
|
-
let!(:drafted_vanilla) { vanilla.
|
268
|
-
let!(:published_vanilla) { Vanilla.create
|
608
|
+
let!(:drafted_vanilla) { vanilla.save_draft; return vanilla }
|
609
|
+
let!(:published_vanilla) { Vanilla.create(name: 'Jane', published_at: Time.now) }
|
269
610
|
|
270
611
|
describe 'drafted' do
|
271
612
|
subject { Vanilla.drafted }
|