has_moderated 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/Rakefile +1 -1
  2. data/lib/has_moderated.rb +1 -1
  3. data/lib/has_moderated/associations/base.rb +7 -1
  4. data/lib/has_moderated/moderation_model.rb +3 -1
  5. data/lib/has_moderated/version.rb +1 -1
  6. data/spec/has_moderated/associations_spec.rb +44 -0
  7. data/spec/has_moderated/attributes_spec.rb +31 -0
  8. data/spec/has_moderated/common_features_spec.rb +56 -0
  9. data/spec/has_moderated/has_and_belongs_to_many_spec.rb +98 -0
  10. data/spec/has_moderated/has_many_spec.rb +108 -0
  11. data/spec/has_moderated/has_many_through_spec.rb +91 -0
  12. data/spec/has_moderated/has_one_spec.rb +119 -0
  13. data/spec/has_moderated/hooks_spec.rb +18 -0
  14. data/spec/has_moderated/moderated_create_spec.rb +41 -0
  15. data/spec/has_moderated/moderated_destroy_spec.rb +24 -0
  16. data/{test/dummy/spec/models → spec/has_moderated}/photo_spec.rb +23 -29
  17. data/spec/has_moderated/polymorphic_spec.rb +70 -0
  18. data/spec/has_moderated/preview_spec.rb +182 -0
  19. data/spec/has_moderated/without_moderation_spec.rb +38 -0
  20. metadata +195 -247
  21. data/test/dummy/Rakefile +0 -7
  22. data/test/dummy/app/assets/javascripts/application.js +0 -9
  23. data/test/dummy/app/assets/stylesheets/application.css +0 -7
  24. data/test/dummy/app/controllers/application_controller.rb +0 -3
  25. data/test/dummy/app/helpers/application_helper.rb +0 -2
  26. data/test/dummy/app/models/moderation.rb +0 -5
  27. data/test/dummy/app/uploaders/generic_uploader.rb +0 -49
  28. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  29. data/test/dummy/config.ru +0 -4
  30. data/test/dummy/config/application.rb +0 -50
  31. data/test/dummy/config/boot.rb +0 -10
  32. data/test/dummy/config/database.yml +0 -25
  33. data/test/dummy/config/environment.rb +0 -5
  34. data/test/dummy/config/environments/development.rb +0 -30
  35. data/test/dummy/config/environments/production.rb +0 -60
  36. data/test/dummy/config/environments/test.rb +0 -42
  37. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  38. data/test/dummy/config/initializers/inflections.rb +0 -10
  39. data/test/dummy/config/initializers/mime_types.rb +0 -5
  40. data/test/dummy/config/initializers/secret_token.rb +0 -7
  41. data/test/dummy/config/initializers/session_store.rb +0 -8
  42. data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  43. data/test/dummy/config/locales/en.yml +0 -5
  44. data/test/dummy/config/routes.rb +0 -58
  45. data/test/dummy/db/migrate/20120520215008_initial_schema.rb +0 -48
  46. data/test/dummy/db/migrate/20120520215224_create_photos.rb +0 -13
  47. data/test/dummy/db/schema.rb +0 -71
  48. data/test/dummy/db/test.sqlite3 +0 -0
  49. data/test/dummy/log/test.log +0 -19029
  50. data/test/dummy/public/404.html +0 -26
  51. data/test/dummy/public/422.html +0 -26
  52. data/test/dummy/public/500.html +0 -26
  53. data/test/dummy/public/favicon.ico +0 -0
  54. data/test/dummy/public/test.jpg +0 -0
  55. data/test/dummy/public/uploads/tmp/20121108-2105-18143-8298/test.jpg +0 -0
  56. data/test/dummy/public/uploads/tmp/20121108-2105-18143-8298/thumb_test.jpg +0 -0
  57. data/test/dummy/script/rails +0 -6
  58. data/test/dummy/spec/models/task_spec.rb +0 -886
  59. data/test/dummy/spec/spec_helper.rb +0 -1
  60. data/test/dummy/spec/support/crazy_models.rb +0 -85
  61. data/test/dummy/spec/support/photos.rb +0 -33
@@ -1,26 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>The page you were looking for doesn't exist (404)</title>
5
- <style type="text/css">
6
- body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
- div.dialog {
8
- width: 25em;
9
- padding: 0 4em;
10
- margin: 4em auto 0 auto;
11
- border: 1px solid #ccc;
12
- border-right-color: #999;
13
- border-bottom-color: #999;
14
- }
15
- h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <!-- This file lives in public/404.html -->
21
- <div class="dialog">
22
- <h1>The page you were looking for doesn't exist.</h1>
23
- <p>You may have mistyped the address or the page may have moved.</p>
24
- </div>
25
- </body>
26
- </html>
@@ -1,26 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>The change you wanted was rejected (422)</title>
5
- <style type="text/css">
6
- body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
- div.dialog {
8
- width: 25em;
9
- padding: 0 4em;
10
- margin: 4em auto 0 auto;
11
- border: 1px solid #ccc;
12
- border-right-color: #999;
13
- border-bottom-color: #999;
14
- }
15
- h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <!-- This file lives in public/422.html -->
21
- <div class="dialog">
22
- <h1>The change you wanted was rejected.</h1>
23
- <p>Maybe you tried to change something you didn't have access to.</p>
24
- </div>
25
- </body>
26
- </html>
@@ -1,26 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>We're sorry, but something went wrong (500)</title>
5
- <style type="text/css">
6
- body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
- div.dialog {
8
- width: 25em;
9
- padding: 0 4em;
10
- margin: 4em auto 0 auto;
11
- border: 1px solid #ccc;
12
- border-right-color: #999;
13
- border-bottom-color: #999;
14
- }
15
- h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <!-- This file lives in public/500.html -->
21
- <div class="dialog">
22
- <h1>We're sorry, but something went wrong.</h1>
23
- <p>We've been notified about this issue and we'll take a look at it shortly.</p>
24
- </div>
25
- </body>
26
- </html>
File without changes
Binary file
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
-
4
- APP_PATH = File.expand_path('../../config/application', __FILE__)
5
- require File.expand_path('../../config/boot', __FILE__)
6
- require 'rails/commands'
@@ -1,886 +0,0 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
-
3
- def reload_models &block
4
- crazy_models.reset
5
- crazy_models.with_helpers &block if block_given?
6
- crazy_models
7
- end
8
-
9
- describe Task do
10
-
11
- #
12
- # has_moderated_association
13
- # has_many
14
- #
15
-
16
- context "has_many association:" do
17
- before do
18
- reload_models.task {
19
- has_many :renamed_subtasks, :class_name => subtask_class_name, :foreign_key => task_fk
20
- has_moderated_association :renamed_subtasks
21
- }.subtask {
22
- belongs_to :task, :class_name => task_class_name, :foreign_key => task_fk
23
- }
24
- end
25
-
26
- it "creates and associates subtask (create)" do
27
- task = Task.create! :title => "Task 1"
28
- Moderation.count.should eq(0)
29
- task.renamed_subtasks.create! :title => "Subtask 1"
30
-
31
- task = Task.first
32
- task.renamed_subtasks.count.should eq(0)
33
-
34
- Moderation.count.should eq(1)
35
- Moderation.last.accept
36
- Moderation.count.should eq(0)
37
-
38
- subtask = Task.first.renamed_subtasks.first
39
- subtask.title.should eq("Subtask 1")
40
- end
41
-
42
- it "creates and associates subtask (build, save task)" do
43
- task = Task.create! :title => "Task 1"
44
- Moderation.count.should eq(0)
45
- task.renamed_subtasks.build :title => "Subtask 1"
46
- task.save
47
-
48
- task = Task.first
49
- task.renamed_subtasks.count.should eq(0)
50
-
51
- Moderation.count.should eq(1)
52
- Moderation.last.accept
53
- Moderation.count.should eq(0)
54
-
55
- subtask = Task.first.renamed_subtasks.first
56
- subtask.title.should eq("Subtask 1")
57
- end
58
-
59
- it "creates and associates subtask (build, save subtask)", :broken => true do
60
- task = Task.create! :title => "Task 1"
61
- Moderation.count.should eq(0)
62
- subtask = task.renamed_subtasks.build :title => "Subtask 1"
63
- subtask.save
64
-
65
- task = Task.first
66
- task.renamed_subtasks.count.should eq(0)
67
-
68
- Moderation.count.should eq(1)
69
- Moderation.last.accept
70
- Moderation.count.should eq(0)
71
-
72
- subtask = Task.first.renamed_subtasks.first
73
- subtask.title.should eq("Subtask 1")
74
- end
75
-
76
- it "associates (<<) existing subtask" do
77
- task = Task.create! :title => "Task 1"
78
- Subtask.create! :title => "Subtask 1"
79
- Moderation.count.should eq(0)
80
- task.renamed_subtasks << Subtask.first
81
-
82
- task = Task.first
83
- task.renamed_subtasks.count.should eq(0)
84
-
85
- Moderation.count.should eq(1)
86
- Moderation.last.accept
87
- Moderation.count.should eq(0)
88
-
89
- subtask = Task.first.renamed_subtasks.first
90
- subtask.title.should eq("Subtask 1")
91
- end
92
-
93
- it "associates (push) existing subtask" do
94
- task = Task.create! :title => "Task 1"
95
- Subtask.create! :title => "Subtask 1"
96
- Moderation.count.should eq(0)
97
- task.renamed_subtasks.push Subtask.first
98
-
99
- task = Task.first
100
- task.renamed_subtasks.count.should eq(0)
101
-
102
- Moderation.count.should eq(1)
103
- Moderation.last.accept
104
- Moderation.count.should eq(0)
105
-
106
- subtask = Task.first.renamed_subtasks.first
107
- subtask.title.should eq("Subtask 1")
108
- end
109
-
110
- it "moderates deleting association" do
111
- task = Task.create! :title => "Task 1"
112
- task.renamed_subtasks.create! :title => "Subtask 1"
113
- Moderation.last.accept
114
-
115
- Task.last.renamed_subtasks.delete(Task.last.renamed_subtasks.last)
116
- Task.last.renamed_subtasks.count.should eq(1)
117
-
118
- Moderation.last.accept
119
- Task.last.renamed_subtasks.count.should eq(0)
120
- end
121
- end
122
-
123
- #
124
- # has_moderated_association
125
- # has_many polymorphic
126
- #
127
-
128
- context "has_many polymorphic association:" do
129
- before do
130
- reload_models.task {
131
- has_many :renamed_subtasks, :class_name => subtask_class_name, :as => :parentable
132
- has_moderated_association :renamed_subtasks
133
- }.subtask {
134
- belongs_to :parentable, :class_name => task_class_name, :polymorphic => true
135
- }
136
- end
137
-
138
- it "creates and associates subtask (create)" do
139
- task = Task.create! :title => "Task 1"
140
- Moderation.count.should eq(0)
141
- task.renamed_subtasks.create! :title => "Subtask 1"
142
-
143
- task = Task.first
144
- task.renamed_subtasks.count.should eq(0)
145
-
146
- Moderation.count.should eq(1)
147
- Moderation.last.accept
148
- Moderation.count.should eq(0)
149
-
150
- subtask = Task.first.renamed_subtasks.first
151
- subtask.title.should eq("Subtask 1")
152
- subtask.parentable.should eq(Task.first)
153
- end
154
- end
155
-
156
- #
157
- # has_moderated_association
158
- # has_one polymorphic
159
- #
160
-
161
- context "has_one polymorphic association:" do
162
- before do
163
- reload_models.task {
164
- has_one :renamed_subtask, :class_name => subtask_class_name, :as => :parentable
165
- has_moderated_association :renamed_subtask
166
- }.subtask {
167
- belongs_to :parentable, :class_name => task_class_name, :polymorphic => true
168
- }
169
- end
170
-
171
- it "creates and associates subtask (create)" do
172
- task = Task.create! :title => "Task 1"
173
- Moderation.count.should eq(0)
174
- task.renamed_subtask = Subtask.new :title => "Subtask 1"
175
- task.save
176
-
177
- task = Task.first
178
- task.renamed_subtask.should be_nil
179
-
180
- Moderation.count.should eq(1)
181
- Moderation.last.accept
182
- Moderation.count.should eq(0)
183
-
184
- subtask = Task.first.renamed_subtask
185
- subtask.title.should eq("Subtask 1")
186
- subtask.parentable.should eq(Task.first)
187
- end
188
- end
189
-
190
- #
191
- # has_moderated_association
192
- # has_and_belongs_to_many
193
- #
194
-
195
- context "has_and_belongs_to_many association:" do
196
- before do
197
- reload_models.task {
198
- has_and_belongs_to_many :renamed_subtasks, :class_name => subtask_class_name, :join_table => "tasks_jointable", :foreign_key => "m1_id", :association_foreign_key => "m2_id"
199
- has_moderated_association :renamed_subtasks
200
- }.subtask {
201
- has_and_belongs_to_many :renamed_tasks, :class_name => task_class_name, :join_table => "tasks_jointable", :foreign_key => "m2_id", :association_foreign_key => "m1_id"
202
- }
203
- end
204
-
205
- it "creates and associates a new subtask" do
206
- task = Task.create! :title => "Task 1"
207
- Moderation.count.should eq(0)
208
- task.renamed_subtasks.create! :title => "Subtask 1"
209
-
210
- Subtask.count.should eq(0)
211
- task = Task.first
212
- task.renamed_subtasks.count.should eq(0)
213
-
214
- Moderation.count.should eq(1)
215
- Moderation.last.accept
216
- Moderation.count.should eq(0)
217
-
218
- subtask = Task.first.renamed_subtasks.first
219
- subtask.title.should eq("Subtask 1")
220
- end
221
-
222
- it "associates an existing subtask" do
223
- task = Task.create! :title => "Task 1"
224
- Subtask.create! :title => "Subtask 1"
225
- Task.first.renamed_subtasks.count.should eq(0)
226
- Subtask.count.should eq(1)
227
- Moderation.count.should eq(0)
228
- task.renamed_subtasks << Subtask.first
229
-
230
- Moderation.count.should eq(1)
231
- Moderation.last.accept
232
- Moderation.count.should eq(0)
233
-
234
- Task.first.renamed_subtasks.count.should eq(1)
235
- subtask = Task.first.renamed_subtasks.first
236
- subtask.title.should eq("Subtask 1")
237
- end
238
- end
239
-
240
- context "has_and_belongs_to_many association (create moderation):" do
241
- before :each do # important that we do this before EACH
242
- reload_models.task {
243
- has_moderated_create :with_associations => [:renamed_subtasks]
244
- has_and_belongs_to_many :renamed_subtasks, :class_name => subtask_class_name, :join_table => "tasks_jointable", :foreign_key => "m1_id", :association_foreign_key => "m2_id"
245
- }.subtask {
246
- has_and_belongs_to_many :renamed_tasks, :class_name => task_class_name, :join_table => "tasks_jointable", :foreign_key => "m2_id", :association_foreign_key => "m1_id"
247
- }
248
- end
249
-
250
- it "associates an existing subtask on create 1" do
251
- Task.has_moderated_association :renamed_subtasks # important difference (had different behavior based
252
- # on presence of this line, need to test with and without)
253
- Subtask.create! :title => "Subtask 1"
254
- Subtask.count.should eq(1)
255
- Moderation.count.should eq(0)
256
-
257
- task = Task.new :title => "Task 1"
258
- task.renamed_subtasks << Subtask.first
259
- task.save
260
-
261
- Moderation.count.should eq(1)
262
- Moderation.last.accept
263
- Moderation.count.should eq(0)
264
-
265
- Task.first.renamed_subtasks.count.should eq(1)
266
- subtask = Task.first.renamed_subtasks.first
267
- subtask.title.should eq("Subtask 1")
268
- end
269
-
270
- it "associates an existing subtask on create 2" do
271
- Subtask.create! :title => "Subtask 1"
272
- Subtask.count.should eq(1)
273
- Moderation.count.should eq(0)
274
-
275
- task = Task.new :title => "Task 1"
276
- task.renamed_subtasks << Subtask.first
277
- task.save
278
-
279
- Task.count.should eq(0)
280
- Moderation.count.should eq(1)
281
- Moderation.last.accept
282
- Moderation.count.should eq(0)
283
-
284
- Task.last.renamed_subtasks.count.should eq(1)
285
- subtask = Task.first.renamed_subtasks.first
286
- subtask.title.should eq("Subtask 1")
287
- end
288
- end
289
-
290
- #
291
- # has_moderated_association
292
- # has_many :through
293
- #
294
-
295
- context "has_many :through association:" do
296
- before do
297
- reload_models.task {
298
- has_many :renamed_connections, :class_name => task_connection_class_name, :foreign_key => "m1_id"
299
- has_many :renamed_subtasks, :class_name => subtask_class_name, :through => :renamed_connections, :source => :renamed_subtask
300
- has_moderated_association :renamed_subtasks
301
- has_moderated_association :renamed_connections
302
- }.subtask {
303
- has_many :renamed_connections, :class_name => task_connection_class_name, :foreign_key => "m2_id"
304
- has_many :renamed_tasks, :class_name => task_class_name, :through => :renamed_connections, :source => :renamed_task
305
- }.task_connection {
306
- belongs_to :renamed_task, :class_name => task_class_name, :foreign_key => "m1_id"
307
- belongs_to :renamed_subtask, :class_name => subtask_class_name, :foreign_key => "m2_id"
308
- }
309
- end
310
-
311
- it "associates subtask 1 (update)" do
312
- task = Task.create! :title => "Task 1"
313
- Moderation.count.should eq(0)
314
-
315
- conn = TaskConnection.new :title => "Connection 1"
316
- conn.renamed_subtask = Subtask.new :title => "Subtask 1"
317
- task.renamed_connections << conn
318
- task.save
319
-
320
- TaskConnection.count.should eq(0)
321
- Subtask.count.should eq(0)
322
-
323
- Moderation.last.accept
324
- Moderation.count.should eq(0)
325
-
326
- subtask = Task.first.renamed_subtasks.first
327
- subtask.title.should eq("Subtask 1")
328
- conn = Subtask.first.renamed_connections.first
329
- conn.title.should eq("Connection 1")
330
- conn.renamed_subtask.title.should eq("Subtask 1")
331
- conn.renamed_task.title.should eq("Task 1")
332
- end
333
-
334
- it "associates subtask 2 (update)" do
335
- task = Task.create! :title => "Task 1"
336
- Moderation.count.should eq(0)
337
-
338
- task.renamed_subtasks.build :title => "Subtask 1"
339
- task.save
340
-
341
- TaskConnection.count.should eq(0)
342
- Subtask.count.should eq(0)
343
- Moderation.last.accept
344
- Moderation.count.should eq(0)
345
- Subtask.count.should eq(1)
346
-
347
- subtask = Task.first.renamed_subtasks.first
348
- subtask.title.should eq("Subtask 1")
349
- end
350
-
351
- it "associates subtask 3 (update)" do
352
- task = Task.create! :title => "Task 1"
353
- Moderation.count.should eq(0)
354
-
355
- task.renamed_subtasks.create! :title => "Subtask 1"
356
-
357
- TaskConnection.count.should eq(0)
358
- Subtask.count.should eq(0)
359
-
360
- Moderation.last.accept
361
- Moderation.count.should eq(0)
362
- Subtask.count.should eq(1)
363
-
364
- subtask = Task.first.renamed_subtasks.first
365
- subtask.title.should eq("Subtask 1")
366
- end
367
-
368
- it "associates subtask 1 (create)" do
369
- t = Task.new :title => "Task 1"
370
- t.renamed_subtasks.build :title => "Subtask 1"
371
- t.save
372
-
373
- Subtask.count.should eq(0)
374
- Task.first.title.should eq("Task 1")
375
- Task.first.renamed_subtasks.count.should eq(0)
376
- Task.count.should eq(1)
377
-
378
- Moderation.last.accept
379
-
380
- Task.first.renamed_subtasks.count.should eq(1)
381
- Task.first.renamed_subtasks.first.title.should eq("Subtask 1")
382
- end
383
- end
384
-
385
- #
386
- # has_moderated_association
387
- # has_one
388
- #
389
-
390
- context "has_one association:" do
391
- before do
392
- reload_models.task {
393
- has_one :renamed_subtask, :class_name => subtask_class_name, :foreign_key => task_fk
394
- has_moderated_association :renamed_subtask
395
- }.subtask {
396
- belongs_to :task, :class_name => task_class_name
397
- }
398
- end
399
-
400
- it "creates and associates subtask (= new, task save)" do
401
- task = Task.create! :title => "Task 1"
402
- Moderation.count.should eq(0)
403
- task.renamed_subtask = Subtask.new :title => "Subtask 1"
404
- task.save
405
-
406
- task = Task.first
407
- task.renamed_subtask.should be_nil
408
- Subtask.count.should eq(0)
409
-
410
- Moderation.count.should eq(1)
411
- Moderation.last.accept
412
- Moderation.count.should eq(0)
413
-
414
- subtask = Task.first.renamed_subtask
415
- subtask.title.should eq("Subtask 1")
416
- end
417
-
418
- it "creates and associates subtask (= create, task save)" do
419
- task = Task.create! :title => "Task 1"
420
- Moderation.count.should eq(0)
421
- task.renamed_subtask = Subtask.create! :title => "Subtask 1"
422
- task.save
423
-
424
- task = Task.first
425
- task.renamed_subtask.should be_nil
426
-
427
- Moderation.count.should eq(1)
428
- Moderation.last.accept
429
- Moderation.count.should eq(0)
430
-
431
- subtask = Task.first.renamed_subtask
432
- subtask.title.should eq("Subtask 1")
433
- end
434
-
435
- it "set subtask to nil (delete)" do
436
- task = Task.create! :title => "Task 1"
437
- task.renamed_subtask = Subtask.new :title => "Subtask 1"
438
- task.save
439
- Moderation.last.accept
440
-
441
- Moderation.count.should eq(0)
442
- Task.first.renamed_subtask.should_not be_nil
443
-
444
- Task.first.renamed_subtask = nil
445
- Task.first.renamed_subtask.should_not be_nil
446
-
447
- Moderation.last.accept
448
- Task.first.renamed_subtask.should be_nil
449
- end
450
- end
451
-
452
- context "has_one association (create moderation):" do
453
- before :each do
454
- reload_models.task {
455
- has_one :renamed_subtask, :class_name => subtask_class_name, :foreign_key => task_fk
456
- has_moderated_create :with_associations => [:renamed_subtask]
457
- }.subtask {
458
- belongs_to :task, :class_name => task_class_name
459
- }
460
- end
461
-
462
- it "associates an existing subtask on create 1" do
463
- Task.has_moderated_association :renamed_subtask
464
- Subtask.create! :title => "Subtask 1"
465
- Subtask.count.should eq(1)
466
- Moderation.count.should eq(0)
467
-
468
- task = Task.new :title => "Task 1"
469
- task.renamed_subtask = Subtask.first
470
- task.save
471
-
472
- Subtask.first.task_id.should be_nil
473
-
474
- Task.count.should eq(0)
475
- Moderation.count.should eq(1)
476
- Moderation.last.accept
477
- Moderation.count.should eq(0)
478
- Subtask.first.task_id.should_not be_nil
479
-
480
- subtask = Task.first.renamed_subtask
481
- subtask.title.should eq("Subtask 1")
482
- end
483
-
484
- it "associates an existing subtask on create 2" do
485
- Subtask.create! :title => "Subtask 1"
486
- Subtask.count.should eq(1)
487
- Moderation.count.should eq(0)
488
-
489
- task = Task.new :title => "Task 1"
490
- task.renamed_subtask = Subtask.first
491
- task.save
492
-
493
- Subtask.first.task_id.should be_nil
494
-
495
- Task.count.should eq(0)
496
- Moderation.count.should eq(1)
497
- Moderation.last.accept
498
- Moderation.count.should eq(0)
499
- Subtask.first.task_id.should_not be_nil
500
-
501
- subtask = Task.first.renamed_subtask
502
- subtask.title.should eq("Subtask 1")
503
- end
504
- end
505
-
506
- #
507
- # has_moderated_create
508
- #
509
-
510
- context "create moderation with association:" do
511
- before do
512
- reload_models.task {
513
- has_many :renamed_subtasks, :class_name => subtask_class_name, :foreign_key => task_fk
514
- has_moderated_create :with_associations => [:renamed_subtasks]
515
- }.subtask {
516
- belongs_to :task, :class_name => task_class_name
517
- }
518
- end
519
-
520
- it "moderates create" do
521
- task = Task.create! :title => "Task 1"
522
- Moderation.count.should eq(1)
523
- Task.count.should eq(0)
524
-
525
- Moderation.last.accept
526
- Task.count.should eq(1)
527
- Task.first.title.should eq("Task 1")
528
- end
529
-
530
- # TODO: test all associations on create
531
- it "moderates assoc on create" do
532
- task = Task.new :title => "Task 1"
533
- task.renamed_subtasks.build :title => "Subtask 1"
534
- task.save
535
- Subtask.count.should eq(0)
536
- Moderation.last.accept
537
-
538
- Task.last.renamed_subtasks.count.should eq(1)
539
- Task.last.renamed_subtasks.first.title.should eq("Subtask 1")
540
- end
541
-
542
- it "doesn't create anything if nothing was created" do
543
- task = Task.create! :title => "Task 1"
544
- Moderation.last.accept
545
-
546
- Task.first.renamed_subtasks.count.should eq(0)
547
- end
548
- end
549
-
550
- #
551
- # has_moderated_destroy
552
- #
553
-
554
- context "destroy moderation:" do
555
- before do
556
- reload_models.task {
557
- has_moderated_destroy
558
- }
559
- end
560
-
561
- it "moderates destroy" do
562
- Task.create! :title => "Task 1"
563
- Task.count.should eq(1)
564
- Task.first.destroy
565
- Task.count.should eq(1)
566
- Moderation.last.accept
567
- Task.count.should eq(0)
568
- end
569
-
570
- it "returns nil for #preview" do
571
- Task.create! :title => "Task 1"
572
- Task.first.destroy
573
- Moderation.last.preview.should be_nil
574
- end
575
- end
576
-
577
- #
578
- # has_moderated_attributes
579
- #
580
-
581
- context "moderates attributes:" do
582
- it "moderates an attribute" do
583
- reload_models.task {
584
- has_moderated :title
585
- }
586
- Task.create! :title => "Task 1", :desc => "Description"
587
- Task.first.title.should be_blank
588
- Task.first.desc.should eq("Description")
589
- Moderation.last.accept
590
- Task.first.title.should eq("Task 1")
591
- Task.first.update_attribute(:title, "Task 2")
592
- Task.first.title.should eq("Task 1")
593
- Moderation.last.accept
594
- Task.first.title.should eq("Task 2")
595
- end
596
-
597
- it "validates uniqueness properly" do
598
- reload_models.task {
599
- has_moderated :title
600
- validates_uniqueness_of :title
601
- }
602
- Task.create! :title => "Task 1"
603
- Task.create! :title => "Task 1"
604
- Moderation.first.accept
605
- expect { Task.create! :title => "Task 1" }.should raise_error
606
- Moderation.first.accept.should be_false
607
- expect { Moderation.first.accept! }.should raise_error
608
- end
609
- end
610
-
611
- #
612
- # other features
613
- #
614
-
615
- context "common features:" do
616
- it "get_moderation_attributes can be overriden in model" do
617
- reload_models.task {
618
- has_moderated_create
619
- self.class_eval do
620
- def get_moderation_attributes
621
- { :test => "ok" }
622
- end
623
- end
624
- }
625
- Task.create! :title => "Task 1"
626
- data = YAML::load(Moderation.last.data)[:create][:attributes]
627
- data.should_not be_blank
628
- data[:test].should_not be_blank
629
- data[:test].should eq("ok")
630
- data.keys.count.should eq(1)
631
- end
632
-
633
- it "knows if it's a create moderation" do
634
- reload_models.task {
635
- has_moderated_create
636
- }
637
-
638
- Task.create! :title => "Task 1"
639
-
640
- Moderation.last.create?.should be_true
641
- Moderation.last.destroy?.should be_false
642
- Moderation.last.update?.should be_false
643
- end
644
-
645
- it "knows if it's a destroy moderation" do
646
- reload_models.task {
647
- has_moderated_destroy
648
- }
649
-
650
- Task.create! :title => "Task 1"
651
- Task.last.destroy
652
-
653
- Moderation.last.destroy?.should be_true
654
- Moderation.last.create?.should be_false
655
- Moderation.last.update?.should be_false
656
- end
657
-
658
- it "calls moderation callbacks on destroy" do
659
- reload_models.task {
660
- has_moderated_create
661
- def self.moderatable_discard(m, opts)
662
- raise "moderatable_discard"
663
- end
664
- }
665
- Task.create!
666
- expect { Moderation.last.destroy }.should raise_error("moderatable_discard")
667
- end
668
- end
669
-
670
- context "hooks:" do
671
- before do
672
- reload_models.task {
673
- has_moderated :title
674
- moderation_creating do |moderation|
675
- moderation.data = "Test!"
676
- end
677
- }
678
- end
679
-
680
- it "handles a creating hook properly" do
681
- Task.create! :title => "Task 1"
682
- Moderation.count.should eq(1)
683
- Moderation.last.data.should eq("Test!")
684
- end
685
- end
686
-
687
- context "without_moderation:" do
688
- before do
689
- reload_models.task {
690
- has_moderated :title
691
- }
692
- end
693
-
694
- it "can bypass moderation for specific model" do
695
- Task.create!
696
- Moderation.count.should eq(0)
697
- t = Task.first
698
- t.title = "Task 2"
699
- t.without_moderation do
700
- t.save
701
- end
702
- Moderation.count.should eq(0)
703
- Task.first.title.should eq("Task 2")
704
- end
705
-
706
- it "can bypass moderation for all models" do
707
- Task.create!
708
- Moderation.count.should eq(0)
709
- t = Task.first
710
- t.title = "Task 2"
711
- Moderation.without_moderation do
712
- t.save
713
- end
714
- Moderation.count.should eq(0)
715
- Task.first.title.should eq("Task 2")
716
- Moderation.moderation_disabled.should be_false
717
- t.title = "Task 3"
718
- t.save
719
- Moderation.count.should eq(1)
720
- Task.first.title.should eq("Task 2")
721
- end
722
- end
723
-
724
- context "preview:" do
725
- it "shows a live preview of changed attributes" do
726
- reload_models.task {
727
- has_moderated :title
728
- }
729
-
730
- Task.create! :title => "Task 1"
731
- Task.last.title.should be_blank
732
-
733
- last_task_id = Task.last.id
734
- Moderation.last.live_preview do |preview|
735
- preview.title.should eq("Task 1")
736
- preview.id.should eq(last_task_id)
737
- end
738
-
739
- Task.last.title.should be_blank
740
- end
741
-
742
- it "returns a preview for create moderations (issue #13)" do
743
- reload_models.task {
744
- has_moderated_create
745
- }
746
-
747
- Task.create! :title => "Task 1"
748
- Moderation.last.preview.should_not be_nil
749
- Moderation.last.preview.title.should eq("Task 1")
750
- end
751
-
752
- it "shows a saved preview of changed attributes" do
753
- reload_models.task {
754
- has_moderated :title
755
- }
756
-
757
- task = Task.create! :title => "Task 1"
758
- Task.last.title.should be_blank
759
-
760
- preview = Moderation.last.preview
761
- preview.title.should eq("Task 1")
762
- preview.id.should eq(Task.last.id)
763
- Task.last.title.should be_blank
764
- end
765
-
766
- it "supports dirty tracking for the saved preview" do
767
- reload_models.task {
768
- has_moderated :title
769
- }
770
-
771
- task = Task.create! :title => "Task 1"
772
- Task.last.title.should be_blank
773
-
774
- preview = Moderation.last.preview
775
- preview.title_changed?.should be_true
776
- preview.title_change.should eq([nil, "Task 1"])
777
- end
778
-
779
- it "supports updating moderation attributes for the saved preview if :saveable => true" do
780
- reload_models.task {
781
- has_moderated :title
782
- }
783
-
784
- task = Task.create! :title => "Task 1"
785
- Task.last.title.should be_blank
786
-
787
- preview = Moderation.last.preview(:saveable => true)
788
- preview.title = "Task 2"
789
- preview.update_moderation
790
-
791
- moderation = Moderation.last
792
- moderation.parsed_data.should eq({:attributes=>{"title"=>"Task 2"}})
793
- moderation.accept
794
- Task.last.title.should eq("Task 2")
795
- end
796
-
797
- it "doesn't support updating moderation attributes for the saved preview by default" do
798
- reload_models.task {
799
- has_moderated :title
800
- }
801
-
802
- task = Task.create! :title => "Task 1"
803
- Task.last.title.should be_blank
804
-
805
- moderation = Moderation.last
806
- preview = Moderation.last.preview
807
- preview.frozen?.should be_true
808
- expect { preview.title = "Task 2" }.should raise_error
809
- expect { preview.update_moderation }.should raise_error
810
-
811
- moderation = Moderation.last
812
- moderation.accept
813
- Task.last.title.should eq("Task 1")
814
- end
815
-
816
- it "shows a saved preview of has_many association" do
817
- reload_models.task {
818
- has_many :renamed_subtasks, :class_name => subtask_class_name, :foreign_key => task_fk
819
- has_moderated_association :renamed_subtasks
820
- }.subtask {
821
- belongs_to :task, :class_name => task_class_name
822
- }
823
-
824
- task = Task.create! :title => "Task 1"
825
-
826
- task.renamed_subtasks.create! :title => "Subtask 1"
827
- preview = Moderation.last.preview
828
- subtask = preview.renamed_subtasks.first
829
- subtask.title.should eq("Subtask 1")
830
- subtask.id.should_not be_blank
831
- subtask.task.should_not be_blank
832
-
833
- Task.last.renamed_subtasks.count.should eq(0)
834
- Subtask.count.should eq(0)
835
- end
836
-
837
- it "shows a saved preview of has_many :through association" do
838
- reload_models.task {
839
- has_many :renamed_connections, :class_name => task_connection_class_name, :foreign_key => "m1_id"
840
- has_many :renamed_subtasks, :class_name => subtask_class_name, :through => :renamed_connections, :source => :renamed_subtask
841
- has_moderated_association :renamed_subtasks
842
- has_moderated_association :renamed_connections
843
- }.subtask {
844
- belongs_to :task
845
- has_many :renamed_connections, :class_name => task_connection_class_name, :foreign_key => "m2_id"
846
- has_many :renamed_tasks, :class_name => task_class_name, :through => :renamed_connections, :source => :renamed_task
847
- }.task_connection {
848
- belongs_to :renamed_task, :class_name => task_class_name, :foreign_key => "m1_id"
849
- belongs_to :renamed_subtask, :class_name => subtask_class_name, :foreign_key => "m2_id"
850
- }
851
-
852
- task = Task.create! :title => "Task 1"
853
- conn = TaskConnection.new :title => "Connection 1"
854
- conn.renamed_subtask = Subtask.new :title => "Subtask 1"
855
- task.renamed_connections << conn
856
- task.save
857
-
858
- TaskConnection.count.should eq(0)
859
- Subtask.count.should eq(0)
860
-
861
- task = Moderation.last.preview
862
-
863
- TaskConnection.count.should eq(0)
864
- Subtask.count.should eq(0)
865
- Moderation.count.should eq(1)
866
-
867
- subtask = task.renamed_subtasks.first
868
- subtask.title.should eq("Subtask 1")
869
- subtask.renamed_connections.first.should be_present
870
- conn = task.renamed_connections.first
871
- conn.title.should eq("Connection 1")
872
- conn.renamed_subtask.title.should eq("Subtask 1")
873
- conn.renamed_task.title.should eq("Task 1")
874
-
875
- # everything has to be frozen
876
- task.frozen?.should be_true
877
- task.renamed_subtasks.frozen?.should be_true
878
- task.renamed_connections.frozen?.should be_true
879
- subtask.frozen?.should be_true
880
- subtask.renamed_connections.frozen?.should be_true
881
- conn.frozen?.should be_true
882
- conn.renamed_task.frozen?.should be_true
883
- conn.renamed_subtask.frozen?.should be_true
884
- end
885
- end
886
- end