has_moderated 1.2.2 → 1.2.3

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.
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