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,430 +1,571 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Whitelister do
|
4
|
-
let(:whitelister) { Whitelister.new
|
4
|
+
let(:whitelister) { Whitelister.new(name: 'Bob') }
|
5
5
|
it { should be_draftable }
|
6
6
|
|
7
|
-
#
|
8
|
-
|
9
|
-
|
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 '
|
18
|
-
context '
|
19
|
-
|
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.
|
67
|
-
whitelister.attributes = { :
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
116
|
-
|
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
|
-
|
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
|
-
|
51
|
+
whitelister.save_draft
|
52
|
+
whitelister.reload
|
53
|
+
expect(whitelister.name).to eql 'Bob'
|
201
54
|
end
|
202
55
|
|
203
|
-
it 'has the
|
204
|
-
|
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 '
|
208
|
-
expect {
|
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
|
212
|
-
|
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
|
-
|
216
|
-
|
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
|
-
|
344
|
+
whitelister.save_draft
|
345
|
+
expect(whitelister).to be_persisted
|
223
346
|
end
|
224
347
|
|
225
|
-
it 'is a draft' do
|
226
|
-
|
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 '
|
230
|
-
|
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 '
|
234
|
-
|
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
|
238
|
-
|
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
|
242
|
-
|
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
|
246
|
-
expect
|
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
|
-
|
250
|
-
|
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
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
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
|
-
|
394
|
+
whitelister.save_draft
|
395
|
+
expect(whitelister).to be_persisted
|
350
396
|
end
|
351
397
|
|
352
398
|
it 'is a draft' do
|
353
|
-
|
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
|
-
|
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
|
-
|
362
|
-
|
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
|
369
|
-
|
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
|
-
|
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 {
|
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 `
|
381
|
-
|
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
|
385
|
-
|
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
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
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
|