freeform 1.0.11 → 2.0.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 +8 -8
- data/Gemfile.lock +3 -3
- data/README.md +16 -17
- data/lib/freeform/form/date_params_filter.rb +34 -0
- data/lib/freeform/form/model.rb +56 -0
- data/lib/freeform/form/nested.rb +64 -39
- data/lib/freeform/form/property.rb +31 -75
- data/lib/freeform/form/validation.rb +48 -34
- data/lib/freeform/form.rb +31 -42
- data/lib/freeform/version.rb +1 -1
- data/spec/acceptance_spec.rb +140 -260
- data/spec/builder/builder_spec.rb +23 -41
- data/spec/builder/view_helper_spec.rb +7 -16
- data/spec/dummy/app/forms/project_form.rb +16 -2
- data/spec/dummy/app/models/company.rb +2 -2
- data/spec/dummy/app/models/milestone.rb +3 -3
- data/spec/dummy/app/models/project.rb +3 -3
- data/spec/dummy/app/models/task.rb +2 -2
- data/spec/dummy/db/migrate/20110710143903_initial_tables.rb +5 -5
- data/spec/dummy/db/schema.rb +6 -4
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/form/date_params_filter_spec.rb +51 -0
- data/spec/form/form_input_key_spec.rb +9 -11
- data/spec/form/model_spec.rb +244 -0
- data/spec/form/nested_spec.rb +108 -138
- data/spec/form/persistence_spec.rb +304 -0
- data/spec/form/property_spec.rb +104 -256
- data/spec/form/validation_spec.rb +114 -127
- data/spec/spec_helper.rb +6 -0
- metadata +10 -10
- data/spec/dummy/app/forms/milestone_form.rb +0 -4
- data/spec/dummy/app/forms/task_form.rb +0 -11
- data/spec/dummy/log/test.log +0 -111133
- data/spec/persistence_spec.rb +0 -645
data/spec/persistence_spec.rb
DELETED
@@ -1,645 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe FreeForm::Form do
|
4
|
-
let!(:task_class) do
|
5
|
-
klass = Class.new(FreeForm::Form) do
|
6
|
-
form_input_key :task
|
7
|
-
form_model :task
|
8
|
-
validate_models
|
9
|
-
allow_destroy_on_save
|
10
|
-
|
11
|
-
property :name, :on => :task
|
12
|
-
property :start_date, :on => :task
|
13
|
-
property :end_date, :on => :task
|
14
|
-
end
|
15
|
-
# This wrapper just avoids CONST warnings
|
16
|
-
v, $VERBOSE = $VERBOSE, nil
|
17
|
-
Module.const_set("TaskForm", klass)
|
18
|
-
$VERBOSE = v
|
19
|
-
klass
|
20
|
-
end
|
21
|
-
|
22
|
-
let(:form_class) do
|
23
|
-
klass = Class.new(FreeForm::Form) do
|
24
|
-
form_input_key :company
|
25
|
-
form_models :company
|
26
|
-
child_model :project do
|
27
|
-
company.project.present? ? company.project : company.build_project
|
28
|
-
end
|
29
|
-
validate_models
|
30
|
-
allow_destroy_on_save
|
31
|
-
|
32
|
-
property :name, :on => :company, :as => :company_name
|
33
|
-
property :name, :on => :project, :as => :project_name
|
34
|
-
property :due_date, :on => :project
|
35
|
-
|
36
|
-
has_many :tasks, :class => Module::TaskForm, :default_initializer => :default_task_initializer
|
37
|
-
|
38
|
-
def default_task_initializer
|
39
|
-
{ :task => project.tasks.build }
|
40
|
-
end
|
41
|
-
end
|
42
|
-
# This wrapper just avoids CONST warnings
|
43
|
-
v, $VERBOSE = $VERBOSE, nil
|
44
|
-
Module.const_set("AcceptanceForm", klass)
|
45
|
-
$VERBOSE = v
|
46
|
-
klass
|
47
|
-
end
|
48
|
-
|
49
|
-
let(:company) { Company.create!(:name => "Demo Corporation") }
|
50
|
-
let(:project) { Project.create!(:company => company, :name => "Widget", :due_date => Date.new(2014, 1, 1)) }
|
51
|
-
let(:task_1) { Task.create!(:project => project, :name => "Task 1", :start_date => Date.new(2014, 2, 2), :end_date => Date.new(2014, 3, 3)) }
|
52
|
-
let(:task_2) { Task.create!(:project => project, :name => "Task 2", :start_date => Date.new(2014, 9, 1), :end_date => Date.new(2014, 10, 1)) }
|
53
|
-
|
54
|
-
let(:form) do
|
55
|
-
f = form_class.new( :company => company )
|
56
|
-
company.project.tasks.each do |task|
|
57
|
-
f.build_task(:task => task)
|
58
|
-
end
|
59
|
-
f
|
60
|
-
end
|
61
|
-
|
62
|
-
before(:each) do
|
63
|
-
company.reload
|
64
|
-
project.reload
|
65
|
-
task_1.reload
|
66
|
-
task_2.reload
|
67
|
-
end
|
68
|
-
|
69
|
-
describe "form initialization", :initialization => true do
|
70
|
-
it "initializes with Company model" do
|
71
|
-
form.company.should eq(company)
|
72
|
-
end
|
73
|
-
|
74
|
-
it "initializes with Project model" do
|
75
|
-
form.project.should eq(project)
|
76
|
-
end
|
77
|
-
|
78
|
-
it "initializes with Task model" do
|
79
|
-
form.tasks.first.task.should eq(task_1)
|
80
|
-
end
|
81
|
-
|
82
|
-
it "initializes with Task with project parent" do
|
83
|
-
task = form.tasks.first.task
|
84
|
-
task.project.should eq(form.project)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
describe "building nested models", :nested_models => true do
|
89
|
-
it "can build multiple tasks" do
|
90
|
-
form.tasks.count.should eq(2)
|
91
|
-
form.build_task
|
92
|
-
form.tasks.count.should eq(3)
|
93
|
-
end
|
94
|
-
|
95
|
-
it "build new models for each task" do
|
96
|
-
form.build_task
|
97
|
-
task_1 = form.tasks.first.task
|
98
|
-
task_2 = form.tasks.last.task
|
99
|
-
task_1.should_not eq(task_2)
|
100
|
-
end
|
101
|
-
|
102
|
-
it "builds new tasks with project parent" do
|
103
|
-
form.build_task
|
104
|
-
task_1 = form.tasks.first.task
|
105
|
-
task_2 = form.tasks.last.task
|
106
|
-
task_1.project.should eq(task_2.project)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
describe "assigning parameters", :assign_params => true do
|
111
|
-
let(:attributes) do {
|
112
|
-
:company_name => "dummycorp",
|
113
|
-
:project_name => "railsapp",
|
114
|
-
"due_date(1i)" => "2014",
|
115
|
-
"due_date(2i)" => "10",
|
116
|
-
"due_date(3i)" => "30",
|
117
|
-
:tasks_attributes => {
|
118
|
-
"0" => {
|
119
|
-
:name => "task_1",
|
120
|
-
"start_date(1i)" => "2012",
|
121
|
-
"start_date(2i)" => "1",
|
122
|
-
"start_date(3i)" => "2",
|
123
|
-
},
|
124
|
-
"1" => {
|
125
|
-
:name => "task_2",
|
126
|
-
"end_date(1i)" => "2011",
|
127
|
-
"end_date(2i)" => "12",
|
128
|
-
"end_date(3i)" => "15",
|
129
|
-
}
|
130
|
-
} }
|
131
|
-
end
|
132
|
-
|
133
|
-
before(:each) do
|
134
|
-
form.fill(attributes)
|
135
|
-
end
|
136
|
-
|
137
|
-
it "assigns company name" do
|
138
|
-
form.company_name.should eq("dummycorp")
|
139
|
-
form.company.name.should eq("dummycorp")
|
140
|
-
end
|
141
|
-
|
142
|
-
it "assigns project name" do
|
143
|
-
form.project_name.should eq("railsapp")
|
144
|
-
form.project.name.should eq("railsapp")
|
145
|
-
end
|
146
|
-
|
147
|
-
it "assigns project due date" do
|
148
|
-
form.due_date.should eq(Date.new(2014, 10, 30))
|
149
|
-
form.project.due_date.should eq(Date.new(2014, 10, 30))
|
150
|
-
end
|
151
|
-
|
152
|
-
it "builds new task automatically" do
|
153
|
-
form.tasks.count.should eq(2)
|
154
|
-
end
|
155
|
-
|
156
|
-
it "assigns first task name" do
|
157
|
-
form.tasks.first.task.name.should eq("task_1")
|
158
|
-
end
|
159
|
-
|
160
|
-
it "assigns first task start_date" do
|
161
|
-
form.tasks.first.task.start_date.should eq(Date.new(2012, 1, 2))
|
162
|
-
end
|
163
|
-
|
164
|
-
it "assigns second task name" do
|
165
|
-
form.tasks.last.task.name.should eq("task_2")
|
166
|
-
end
|
167
|
-
|
168
|
-
it "assigns second task end_date" do
|
169
|
-
form.tasks.last.task.end_date.should eq(Date.new(2011, 12, 15))
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
describe "validations", :validations => true do
|
174
|
-
context "with invalid attributes" do
|
175
|
-
let(:attributes) do {
|
176
|
-
:company_name => "dummycorp",
|
177
|
-
:project_name => nil,
|
178
|
-
"due_date(1i)" => "2014",
|
179
|
-
"due_date(2i)" => "10",
|
180
|
-
"due_date(3i)" => "30",
|
181
|
-
:tasks_attributes => {
|
182
|
-
"0" => {
|
183
|
-
:name => "task_1",
|
184
|
-
"start_date(1i)" => "2012",
|
185
|
-
"start_date(2i)" => "1",
|
186
|
-
"start_date(3i)" => "2",
|
187
|
-
},
|
188
|
-
"1" => {
|
189
|
-
:name => "task_2",
|
190
|
-
"end_date(1i)" => "2011",
|
191
|
-
"end_date(2i)" => "12",
|
192
|
-
"end_date(3i)" => "15",
|
193
|
-
}
|
194
|
-
} }
|
195
|
-
end
|
196
|
-
|
197
|
-
before(:each) do
|
198
|
-
form.fill(attributes)
|
199
|
-
form.valid?
|
200
|
-
end
|
201
|
-
|
202
|
-
it "should be invalid" do
|
203
|
-
form.should_not be_valid
|
204
|
-
end
|
205
|
-
|
206
|
-
it "should have errors on project name" do
|
207
|
-
form.errors[:project_name].should eq(["can't be blank"])
|
208
|
-
end
|
209
|
-
|
210
|
-
it "should not have errors on last tasks's start_date" do
|
211
|
-
form.tasks.last.errors[:start_date].should be_empty
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
context "with invalid nested model only" do
|
216
|
-
let(:attributes) do {
|
217
|
-
:company_name => "dummycorp",
|
218
|
-
:project_name => "rails app",
|
219
|
-
"due_date(1i)" => "2014",
|
220
|
-
"due_date(2i)" => "10",
|
221
|
-
"due_date(3i)" => "30",
|
222
|
-
:tasks_attributes => {
|
223
|
-
"0" => {
|
224
|
-
:name => "task_1",
|
225
|
-
"start_date(1i)" => nil,
|
226
|
-
"start_date(2i)" => nil,
|
227
|
-
"start_date(3i)" => nil,
|
228
|
-
},
|
229
|
-
"1" => {
|
230
|
-
:name => "task_2",
|
231
|
-
"end_date(1i)" => "2011",
|
232
|
-
"end_date(2i)" => "12",
|
233
|
-
"end_date(3i)" => "15",
|
234
|
-
}
|
235
|
-
} }
|
236
|
-
end
|
237
|
-
|
238
|
-
before(:each) do
|
239
|
-
form.fill(attributes)
|
240
|
-
form.valid?
|
241
|
-
end
|
242
|
-
|
243
|
-
it "should be invalid" do
|
244
|
-
form.should_not be_valid
|
245
|
-
end
|
246
|
-
|
247
|
-
it "should have errors on first tasks's start_date" do
|
248
|
-
form.tasks.first.errors[:start_date].should eq(["can't be blank"])
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
context "with valid attributes" do
|
253
|
-
let(:attributes) do {
|
254
|
-
:company_name => "dummycorp",
|
255
|
-
:project_name => "railsapp",
|
256
|
-
"due_date(1i)" => "2014",
|
257
|
-
"due_date(2i)" => "10",
|
258
|
-
"due_date(3i)" => "30",
|
259
|
-
:tasks_attributes => {
|
260
|
-
"0" => {
|
261
|
-
:name => "task_1",
|
262
|
-
"start_date(1i)" => "2012",
|
263
|
-
"start_date(2i)" => "1",
|
264
|
-
"start_date(3i)" => "2",
|
265
|
-
},
|
266
|
-
"1" => {
|
267
|
-
:name => "task_2",
|
268
|
-
"start_date(1i)" => "2011",
|
269
|
-
"start_date(2i)" => "8",
|
270
|
-
"start_date(3i)" => "15",
|
271
|
-
"end_date(1i)" => "2011",
|
272
|
-
"end_date(2i)" => "12",
|
273
|
-
"end_date(3i)" => "15",
|
274
|
-
}
|
275
|
-
} }
|
276
|
-
end
|
277
|
-
|
278
|
-
before(:each) do
|
279
|
-
form.fill(attributes)
|
280
|
-
end
|
281
|
-
|
282
|
-
it "should be valid" do
|
283
|
-
form.should be_valid
|
284
|
-
end
|
285
|
-
end
|
286
|
-
end
|
287
|
-
|
288
|
-
describe "saving and destroying", :saving => true do
|
289
|
-
context "with invalid attributes" do
|
290
|
-
let(:attributes) do {
|
291
|
-
:company_name => "dummycorp",
|
292
|
-
:project_name => nil,
|
293
|
-
"due_date(1i)" => "2014",
|
294
|
-
"due_date(2i)" => "10",
|
295
|
-
"due_date(3i)" => "30",
|
296
|
-
:tasks_attributes => {
|
297
|
-
"0" => {
|
298
|
-
:name => "task_1",
|
299
|
-
"start_date(1i)" => "2012",
|
300
|
-
"start_date(2i)" => "1",
|
301
|
-
"start_date(3i)" => "2",
|
302
|
-
},
|
303
|
-
"1" => {
|
304
|
-
:name => "task_2",
|
305
|
-
"end_date(1i)" => "2011",
|
306
|
-
"end_date(2i)" => "12",
|
307
|
-
"end_date(3i)" => "15",
|
308
|
-
}
|
309
|
-
} }
|
310
|
-
end
|
311
|
-
|
312
|
-
before(:each) do
|
313
|
-
form.fill(attributes)
|
314
|
-
end
|
315
|
-
|
316
|
-
it "should return false on 'save'" do
|
317
|
-
form.save.should be_false
|
318
|
-
end
|
319
|
-
|
320
|
-
it "should raise error on 'save!'" do
|
321
|
-
expect{ form.save! }.to raise_error(FreeForm::FormInvalid)
|
322
|
-
end
|
323
|
-
end
|
324
|
-
|
325
|
-
context "with invalid, marked for destruction attributes", :failing => true do
|
326
|
-
let(:attributes) do {
|
327
|
-
:company_name => "dummycorp",
|
328
|
-
:project_name => "my_project",
|
329
|
-
"due_date(1i)" => "2014",
|
330
|
-
"due_date(2i)" => "10",
|
331
|
-
"due_date(3i)" => "30",
|
332
|
-
:tasks_attributes => {
|
333
|
-
"0" => {
|
334
|
-
:name => "task_1",
|
335
|
-
"start_date(1i)" => "2012",
|
336
|
-
"start_date(2i)" => "1",
|
337
|
-
"start_date(3i)" => "2",
|
338
|
-
},
|
339
|
-
"1" => {
|
340
|
-
:name => "task_2",
|
341
|
-
"end_date(1i)" => "2011",
|
342
|
-
"end_date(2i)" => "12",
|
343
|
-
"end_date(3i)" => "15",
|
344
|
-
:_destroy => "1"
|
345
|
-
}
|
346
|
-
} }
|
347
|
-
end
|
348
|
-
|
349
|
-
before(:each) do
|
350
|
-
form.fill(attributes)
|
351
|
-
end
|
352
|
-
|
353
|
-
it "should return true on 'save'" do
|
354
|
-
form.save.should be_true
|
355
|
-
end
|
356
|
-
|
357
|
-
it "should not raise error on 'save!'" do
|
358
|
-
expect{ form.save! }.to_not raise_error
|
359
|
-
end
|
360
|
-
end
|
361
|
-
|
362
|
-
context "with valid attributes" do
|
363
|
-
let(:attributes) do {
|
364
|
-
:company_name => "dummycorp",
|
365
|
-
:project_name => "railsapp",
|
366
|
-
"due_date(1i)" => "2014",
|
367
|
-
"due_date(2i)" => "10",
|
368
|
-
"due_date(3i)" => "30",
|
369
|
-
:tasks_attributes => {
|
370
|
-
"0" => {
|
371
|
-
:name => "new_task_1",
|
372
|
-
"start_date(1i)" => "2012",
|
373
|
-
"start_date(2i)" => "1",
|
374
|
-
"start_date(3i)" => "2",
|
375
|
-
},
|
376
|
-
"1" => {
|
377
|
-
:name => "new_task_2",
|
378
|
-
"start_date(1i)" => "2011",
|
379
|
-
"start_date(2i)" => "8",
|
380
|
-
"start_date(3i)" => "15",
|
381
|
-
"end_date(1i)" => "2011",
|
382
|
-
"end_date(2i)" => "12",
|
383
|
-
"end_date(3i)" => "15",
|
384
|
-
}
|
385
|
-
} }
|
386
|
-
end
|
387
|
-
|
388
|
-
before(:each) do
|
389
|
-
form.fill(attributes)
|
390
|
-
end
|
391
|
-
|
392
|
-
describe "save", :save => true do
|
393
|
-
describe "without destroy" do
|
394
|
-
it "should return true on 'save', and call save on other models" do
|
395
|
-
form.company.should_receive(:save).and_return(true)
|
396
|
-
form.project.should_receive(:save).and_return(true)
|
397
|
-
form.tasks.first.task.should_receive(:save).and_return(true)
|
398
|
-
form.tasks.last.task.should_receive(:save).and_return(true)
|
399
|
-
form.save
|
400
|
-
end
|
401
|
-
|
402
|
-
describe "value assignment and persistence" do
|
403
|
-
before(:each) { form.save }
|
404
|
-
|
405
|
-
it "assign company values" do
|
406
|
-
company.reload
|
407
|
-
company.name.should eq("dummycorp")
|
408
|
-
end
|
409
|
-
|
410
|
-
it "assigns project values" do
|
411
|
-
project.reload
|
412
|
-
project.name.should eq("railsapp")
|
413
|
-
project.due_date.should eq(Date.new(2014, 10, 30))
|
414
|
-
end
|
415
|
-
|
416
|
-
it "assigns task_1 values" do
|
417
|
-
task_1.reload
|
418
|
-
task_1.name.should eq("new_task_1")
|
419
|
-
task_1.start_date.should eq(Date.new(2012, 1, 2))
|
420
|
-
task_1.end_date.should eq(Date.new(2014, 3, 3))
|
421
|
-
end
|
422
|
-
|
423
|
-
it "assigns task_1 values" do
|
424
|
-
task_2.reload
|
425
|
-
task_2.name.should eq("new_task_2")
|
426
|
-
task_2.start_date.should eq(Date.new(2011, 8, 15))
|
427
|
-
task_2.end_date.should eq(Date.new(2011, 12, 15))
|
428
|
-
end
|
429
|
-
end
|
430
|
-
end
|
431
|
-
|
432
|
-
describe "with destroy" do
|
433
|
-
it "destroys models on save if set" do
|
434
|
-
form._destroy = true
|
435
|
-
form.company.should_receive(:destroy).and_return(true)
|
436
|
-
form.project.should_receive(:destroy).and_return(true)
|
437
|
-
form.tasks.first.task.should_receive(:save).and_return(true)
|
438
|
-
form.tasks.last.task.should_receive(:save).and_return(true)
|
439
|
-
form.save
|
440
|
-
end
|
441
|
-
|
442
|
-
it "destroys models on save if set through attribute" do
|
443
|
-
form.fill({:_destroy => "1"})
|
444
|
-
form.company.should_receive(:destroy).and_return(true)
|
445
|
-
form.project.should_receive(:destroy).and_return(true)
|
446
|
-
form.tasks.first.task.should_receive(:save).and_return(true)
|
447
|
-
form.tasks.last.task.should_receive(:save).and_return(true)
|
448
|
-
form.save
|
449
|
-
end
|
450
|
-
|
451
|
-
describe "value assignment and persistence" do
|
452
|
-
before(:each) { form._destroy = true }
|
453
|
-
before(:each) { form.save }
|
454
|
-
|
455
|
-
it "destroys company" do
|
456
|
-
expect { company.reload }.to raise_error
|
457
|
-
end
|
458
|
-
|
459
|
-
it "destroys project" do
|
460
|
-
expect { project.reload }.to raise_error
|
461
|
-
end
|
462
|
-
|
463
|
-
it "assigns task_1 values" do
|
464
|
-
task_1.reload
|
465
|
-
task_1.name.should eq("new_task_1")
|
466
|
-
task_1.start_date.should eq(Date.new(2012, 1, 2))
|
467
|
-
task_1.end_date.should eq(Date.new(2014, 3, 3))
|
468
|
-
end
|
469
|
-
|
470
|
-
it "assigns task_1 values" do
|
471
|
-
task_2.reload
|
472
|
-
task_2.name.should eq("new_task_2")
|
473
|
-
task_2.start_date.should eq(Date.new(2011, 8, 15))
|
474
|
-
task_2.end_date.should eq(Date.new(2011, 12, 15))
|
475
|
-
end
|
476
|
-
end
|
477
|
-
end
|
478
|
-
|
479
|
-
describe "with nested destroy" do
|
480
|
-
before(:each) { form.tasks.first._destroy = true }
|
481
|
-
|
482
|
-
it "destroys nested models on save if set" do
|
483
|
-
form.company.should_receive(:save).and_return(true)
|
484
|
-
form.project.should_receive(:save).and_return(true)
|
485
|
-
form.tasks.first.task.should_receive(:destroy).and_return(true)
|
486
|
-
form.tasks.last.task.should_receive(:save).and_return(true)
|
487
|
-
form.save
|
488
|
-
end
|
489
|
-
|
490
|
-
describe "value assignment and persistence" do
|
491
|
-
before(:each) { form.save }
|
492
|
-
|
493
|
-
it "assign company values" do
|
494
|
-
company.reload
|
495
|
-
company.name.should eq("dummycorp")
|
496
|
-
end
|
497
|
-
|
498
|
-
it "assigns project values" do
|
499
|
-
project.reload
|
500
|
-
project.name.should eq("railsapp")
|
501
|
-
project.due_date.should eq(Date.new(2014, 10, 30))
|
502
|
-
end
|
503
|
-
|
504
|
-
it "destroys task_1" do
|
505
|
-
expect { task_1.reload }.to raise_error
|
506
|
-
end
|
507
|
-
|
508
|
-
it "assigns task_1 values" do
|
509
|
-
task_2.reload
|
510
|
-
task_2.name.should eq("new_task_2")
|
511
|
-
task_2.start_date.should eq(Date.new(2011, 8, 15))
|
512
|
-
task_2.end_date.should eq(Date.new(2011, 12, 15))
|
513
|
-
end
|
514
|
-
end
|
515
|
-
end
|
516
|
-
end
|
517
|
-
|
518
|
-
describe "save!", :save! => true do
|
519
|
-
describe "without destroy" do
|
520
|
-
it "should return true on 'save!', and call save! on other models" do
|
521
|
-
form.company.should_receive(:save!).and_return(true)
|
522
|
-
form.project.should_receive(:save!).and_return(true)
|
523
|
-
form.tasks.first.task.should_receive(:save!).and_return(true)
|
524
|
-
form.tasks.last.task.should_receive(:save!).and_return(true)
|
525
|
-
form.save!
|
526
|
-
end
|
527
|
-
|
528
|
-
describe "value assignment and persistence" do
|
529
|
-
before(:each) { form.save! }
|
530
|
-
|
531
|
-
it "assign company values" do
|
532
|
-
company.reload
|
533
|
-
company.name.should eq("dummycorp")
|
534
|
-
end
|
535
|
-
|
536
|
-
it "assigns project values" do
|
537
|
-
project.reload
|
538
|
-
project.name.should eq("railsapp")
|
539
|
-
project.due_date.should eq(Date.new(2014, 10, 30))
|
540
|
-
end
|
541
|
-
|
542
|
-
it "assigns task_1 values" do
|
543
|
-
task_1.reload
|
544
|
-
task_1.name.should eq("new_task_1")
|
545
|
-
task_1.start_date.should eq(Date.new(2012, 1, 2))
|
546
|
-
task_1.end_date.should eq(Date.new(2014, 3, 3))
|
547
|
-
end
|
548
|
-
|
549
|
-
it "assigns task_1 values" do
|
550
|
-
task_2.reload
|
551
|
-
task_2.name.should eq("new_task_2")
|
552
|
-
task_2.start_date.should eq(Date.new(2011, 8, 15))
|
553
|
-
task_2.end_date.should eq(Date.new(2011, 12, 15))
|
554
|
-
end
|
555
|
-
end
|
556
|
-
end
|
557
|
-
|
558
|
-
describe "with destroy" do
|
559
|
-
it "destroys models on save! if set" do
|
560
|
-
form._destroy = true
|
561
|
-
form.company.should_receive(:destroy).and_return(true)
|
562
|
-
form.project.should_receive(:destroy).and_return(true)
|
563
|
-
form.tasks.first.task.should_receive(:save!).and_return(true)
|
564
|
-
form.tasks.last.task.should_receive(:save!).and_return(true)
|
565
|
-
form.save!
|
566
|
-
end
|
567
|
-
|
568
|
-
it "destroys models on save! if set" do
|
569
|
-
form.fill({:_destroy => "1"})
|
570
|
-
form.company.should_receive(:destroy).and_return(true)
|
571
|
-
form.project.should_receive(:destroy).and_return(true)
|
572
|
-
form.tasks.first.task.should_receive(:save!).and_return(true)
|
573
|
-
form.tasks.last.task.should_receive(:save!).and_return(true)
|
574
|
-
form.save!
|
575
|
-
end
|
576
|
-
|
577
|
-
describe "value assignment and persistence" do
|
578
|
-
before(:each) { form._destroy = true }
|
579
|
-
before(:each) { form.save! }
|
580
|
-
|
581
|
-
it "destroys company" do
|
582
|
-
expect { company.reload }.to raise_error
|
583
|
-
end
|
584
|
-
|
585
|
-
it "destroys project" do
|
586
|
-
expect { project.reload }.to raise_error
|
587
|
-
end
|
588
|
-
|
589
|
-
it "assigns task_1 values" do
|
590
|
-
task_1.reload
|
591
|
-
task_1.name.should eq("new_task_1")
|
592
|
-
task_1.start_date.should eq(Date.new(2012, 1, 2))
|
593
|
-
task_1.end_date.should eq(Date.new(2014, 3, 3))
|
594
|
-
end
|
595
|
-
|
596
|
-
it "assigns task_1 values" do
|
597
|
-
task_2.reload
|
598
|
-
task_2.name.should eq("new_task_2")
|
599
|
-
task_2.start_date.should eq(Date.new(2011, 8, 15))
|
600
|
-
task_2.end_date.should eq(Date.new(2011, 12, 15))
|
601
|
-
end
|
602
|
-
end
|
603
|
-
end
|
604
|
-
|
605
|
-
describe "with nested destroy" do
|
606
|
-
it "destroys nested models on save! if set" do
|
607
|
-
form.tasks.last._destroy = true
|
608
|
-
form.company.should_receive(:save!).and_return(true)
|
609
|
-
form.project.should_receive(:save!).and_return(true)
|
610
|
-
form.tasks.first.task.should_receive(:save!).and_return(true)
|
611
|
-
form.tasks.last.task.should_receive(:destroy).and_return(true)
|
612
|
-
form.save!
|
613
|
-
end
|
614
|
-
|
615
|
-
describe "value assignment and persistence" do
|
616
|
-
before(:each) { form.tasks.first._destroy = true }
|
617
|
-
before(:each) { form.save! }
|
618
|
-
|
619
|
-
it "assign company values" do
|
620
|
-
company.reload
|
621
|
-
company.name.should eq("dummycorp")
|
622
|
-
end
|
623
|
-
|
624
|
-
it "assigns project values" do
|
625
|
-
project.reload
|
626
|
-
project.name.should eq("railsapp")
|
627
|
-
project.due_date.should eq(Date.new(2014, 10, 30))
|
628
|
-
end
|
629
|
-
|
630
|
-
it "destroys task_1" do
|
631
|
-
expect { task_1.reload }.to raise_error
|
632
|
-
end
|
633
|
-
|
634
|
-
it "assigns task_1 values" do
|
635
|
-
task_2.reload
|
636
|
-
task_2.name.should eq("new_task_2")
|
637
|
-
task_2.start_date.should eq(Date.new(2011, 8, 15))
|
638
|
-
task_2.end_date.should eq(Date.new(2011, 12, 15))
|
639
|
-
end
|
640
|
-
end
|
641
|
-
end
|
642
|
-
end
|
643
|
-
end
|
644
|
-
end
|
645
|
-
end
|