draftsman 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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