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