active_metadata 0.0.2 → 0.1.9

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 (90) hide show
  1. data/app/controllers/active_metadata/attachments_controller.rb +47 -0
  2. data/app/controllers/active_metadata/histories_controller.rb +16 -0
  3. data/app/controllers/active_metadata/notes_controller.rb +61 -0
  4. data/app/controllers/active_metadata/watchers_controller.rb +34 -0
  5. data/app/helpers/application_helper.rb +2 -0
  6. data/app/views/active_metadata/attachments/index.html.erb +11 -0
  7. data/app/views/active_metadata/histories/index.html.erb +5 -0
  8. data/app/views/active_metadata/notes/_form.html.erb +23 -0
  9. data/app/views/active_metadata/notes/edit.html.erb +8 -0
  10. data/app/views/active_metadata/notes/index.html.erb +11 -0
  11. data/app/views/active_metadata/notes/index.js.erb +1 -0
  12. data/app/views/active_metadata/notes/show.html.erb +9 -0
  13. data/app/views/active_metadata/watchers/create.js.erb +1 -0
  14. data/app/views/active_metadata/watchers/destroy.js.erb +1 -0
  15. data/app/views/active_metadata/watchers/index.html.erb +5 -0
  16. data/config/active_metadata.yml +17 -0
  17. data/config/application.rb +0 -0
  18. data/config/database.yml +11 -0
  19. data/config/initializers/inflections.rb +7 -0
  20. data/config/mongoid.yml +28 -0
  21. data/config/routes.rb +30 -0
  22. data/db/development.sqlite3 +0 -0
  23. data/db/migrate/001_create_document.rb +12 -0
  24. data/db/migrate/002_add_surname_to_document.rb +9 -0
  25. data/db/migrate/003_create_section.rb +13 -0
  26. data/db/migrate/004_create_user.rb +14 -0
  27. data/db/migrate/005_create_inboxes.rb +19 -0
  28. data/db/migrate/006_create_alert_message.rb +37 -0
  29. data/db/migrate/007_create_notes.rb +22 -0
  30. data/db/migrate/008_create_history.rb +20 -0
  31. data/db/migrate/009_create_watcher.rb +21 -0
  32. data/db/migrate/010_create_attachment.rb +26 -0
  33. data/db/migrate/011_add_created_by_to_histories.rb +10 -0
  34. data/db/test.sqlite3 +0 -0
  35. data/features/step_definitions/add_a_user_to_a_watcher_steps.rb +29 -0
  36. data/features/step_definitions/trigger_alert_on_modify_steps.rb +86 -0
  37. data/features/supports/file.txt +1 -0
  38. data/features/supports/initializer.rb +1 -0
  39. data/features/supports/updated_file.txt +1 -0
  40. data/features/watchlist/add_a_user_to_a_watcher.feature +19 -0
  41. data/features/watchlist/trigger_alert_on_modify.feature +90 -0
  42. data/lib/active_metadata/base.rb +59 -0
  43. data/lib/active_metadata/persistence/active_record/attachment.rb +42 -0
  44. data/lib/active_metadata/persistence/active_record/history.rb +22 -0
  45. data/lib/active_metadata/persistence/active_record/note.rb +45 -0
  46. data/lib/active_metadata/persistence/active_record/watcher.rb +45 -0
  47. data/lib/active_metadata/persistence/active_record.rb +26 -0
  48. data/lib/active_metadata/persistence/mongoid/attachment.rb +45 -0
  49. data/lib/active_metadata/persistence/mongoid/history.rb +26 -0
  50. data/lib/active_metadata/persistence/mongoid/note.rb +48 -0
  51. data/lib/active_metadata/persistence/mongoid/watcher.rb +43 -0
  52. data/lib/active_metadata/persistence/mongoid.rb +30 -0
  53. data/lib/active_metadata/persistence/persistence.rb +13 -0
  54. data/lib/active_metadata/railtie.rb +6 -0
  55. data/lib/active_metadata/version.rb +1 -1
  56. data/lib/active_metadata.rb +6 -12
  57. data/lib/application_controller.rb +28 -0
  58. data/lib/application_helper.rb +7 -0
  59. data/lib/engine.rb +29 -0
  60. data/lib/model/active_record/attachment.rb +18 -0
  61. data/lib/model/active_record/history.rb +2 -0
  62. data/lib/model/active_record/note.rb +2 -0
  63. data/lib/model/active_record/watcher.rb +4 -0
  64. data/lib/model/mongoid/active_meta.rb +6 -0
  65. data/lib/model/mongoid/attachment.rb +25 -0
  66. data/lib/model/mongoid/history.rb +9 -0
  67. data/lib/model/mongoid/label.rb +14 -0
  68. data/lib/model/mongoid/note.rb +10 -0
  69. data/lib/model/mongoid/watcher.rb +24 -0
  70. data/lib/rails/railties/tasks.rake +8 -0
  71. data/lib/rake/active_record_tasks.rb +77 -0
  72. data/lib/rake/task.rb +18 -0
  73. data/lib/templates/active_metadata.yml +17 -0
  74. data/lib/templates/active_metadata_migrations +67 -0
  75. data/lib/templates/mongoid.yml +20 -0
  76. data/spec/active_metadata_spec.rb +596 -0
  77. data/spec/benchmark_spec.rb +35 -0
  78. data/spec/controllers/metadata_controller_spec.rb +14 -0
  79. data/spec/spec_helper.rb +87 -0
  80. data/spec/support/document.rb +8 -0
  81. data/spec/support/pdf_test.pdf +0 -0
  82. data/spec/support/pdf_test_2.pdf +0 -0
  83. data/spec/support/section.rb +8 -0
  84. data/spec/support/user.rb +13 -0
  85. data/spec/support/watcher_notifier.rb +21 -0
  86. metadata +201 -19
  87. data/.gitignore +0 -4
  88. data/Gemfile +0 -4
  89. data/Rakefile +0 -1
  90. data/active_metadata.gemspec +0 -24
@@ -0,0 +1,596 @@
1
+ require "spec_helper"
2
+ require "rack/test/uploaded_file"
3
+ require "time"
4
+
5
+ describe ActiveMetadata do
6
+
7
+ context "model methods" do
8
+
9
+ it "should exist a method acts_as_metadata in the model" do
10
+ Document.respond_to?(:acts_as_metadata).should be_true
11
+ end
12
+
13
+ it "should find the metadata id if no metadata_id_from params has been provided" do
14
+ @document = Document.create! { |d| d.name = "John" }
15
+ @document.reload
16
+ @document.metadata_id.should eq @document.id
17
+ end
18
+
19
+ it "should find the metadata id if a metadata_id_from params has been specified" do
20
+ @document = Document.create! { |d| d.name = "John" }
21
+ @document.reload
22
+ @section = @document.create_section :title => "new section"
23
+ @section.reload
24
+ @section.metadata_id.should eq @document.id
25
+ end
26
+
27
+ end
28
+
29
+ context "saving and quering notes" do
30
+
31
+ before(:each) do
32
+ @document = Document.create! { |d| d.name = "John" }
33
+ @document.reload
34
+ end
35
+
36
+ it "should create a new note for a given field" do
37
+ @document.create_note_for(:name, "Very important note!")
38
+ @document.notes_for(:name).should have(1).record
39
+ end
40
+
41
+ it "should verify the content of a note created" do
42
+ @document.create_note_for(:name, "Very important note!")
43
+ @document.notes_for(:name).last.note.should eq "Very important note!"
44
+ end
45
+
46
+ it "should verify the created_by of a note created" do
47
+ @document.create_note_for(:name, "Very important note!")
48
+ @document.notes_for(:name).last.created_by.should eq User.current.id
49
+ end
50
+
51
+ it "should verify that notes_for_name return only notes for the self Document" do
52
+ # fixtures
53
+ @another_doc = Document.create :name => "Andrea"
54
+ @another_doc.create_note_for(:name, "Very important note for doc2!")
55
+ @another_doc.reload
56
+ @document.create_note_for(:name, "Very important note!")
57
+
58
+ # expectations
59
+ @document.notes_for(:name).count.should eq(1)
60
+ @document.notes_for(:name).last.note.should eq "Very important note!"
61
+ @another_doc.notes_for(:name).last.note.should eq "Very important note for doc2!"
62
+
63
+ end
64
+
65
+ it "should update a note using update_note_for_name", :mongoid => true do
66
+ @document.create_note_for(:name, "Very important note!")
67
+ id = @document.notes_for(:name).last._id
68
+ @document.update_note(id, "New note value!")
69
+ @document.notes_for(:name).last.note.should eq "New note value!"
70
+ end
71
+
72
+ it "should update a note using update_note_for_name", :active_record => true do
73
+ @document.create_note_for(:name, "Very important note!")
74
+ id = @document.notes_for(:name).last.id
75
+ @document.update_note(id, "New note value!")
76
+ @document.notes_for(:name).last.note.should eq "New note value!"
77
+ end
78
+
79
+ it "should verify the content of a note created for a second attribute" do
80
+ @document.create_note_for(:name, "Very important note!")
81
+ @document.create_note_for(:surname, "Note on surname attribute!")
82
+
83
+ @document.notes_for(:name).last.note.should eq "Very important note!"
84
+ @document.notes_for(:surname).last.note.should eq "Note on surname attribute!"
85
+ end
86
+
87
+ it "should save multiple notes" do
88
+ notes = ["note number 1", "note number 2"]
89
+ @document.create_notes_for(:name, notes)
90
+ @document.notes_for(:name).should have(2).record
91
+ end
92
+
93
+ it "should save the updater id in metadata" do
94
+ @document.create_note_for(:name, "Very important note!")
95
+ id = @document.notes_for(:name).last.id
96
+ @document.update_note id, "new note value"
97
+ @document.notes_for(:name).last.updated_by.should eq User.current.id
98
+ end
99
+
100
+ it "should save the created_at datetime in metadata" do
101
+ @document.create_note_for(:name, "Very important note!")
102
+ @document.notes_for(:name).last.created_at.should be_a_kind_of Time
103
+ end
104
+
105
+ it "should save the updated_at datetime in metadata" do
106
+ @document.create_note_for(:name, "Very important note!")
107
+ @document.notes_for(:name).last.updated_at.should be_a_kind_of Time
108
+ end
109
+
110
+ it "should update the updated_at field when a note is updated", :mongoid => true do
111
+ @document.create_note_for(:name, "Very important note!")
112
+ id = @document.notes_for(:name).last._id
113
+ sleep 1.seconds
114
+ @document.update_note id, "new note value"
115
+ note = @document.notes_for(:name).last
116
+ note.updated_at.should > note.created_at
117
+ end
118
+
119
+ it "should update the updated_at field when a note is updated", :active_record => true do
120
+ @document.create_note_for(:name, "Very important note!")
121
+ id = @document.notes_for(:name).last.id
122
+ sleep 1.seconds
123
+ @document.update_note id, "new note value"
124
+ note = @document.notes_for(:name).last
125
+ note.updated_at.should > note.created_at
126
+ end
127
+
128
+ it "should verify that note are saved with the correct model id if metadata_id_from is defined" , :mongoid => true do
129
+ # fixtures
130
+ @document.create_note_for(:name, "Very important note!")
131
+ @section = @document.create_section :title => "new section"
132
+ @section.reload
133
+ @section.create_note_for(:title, "Very important note for section!")
134
+
135
+ # expectations
136
+ @document.notes_for(:name).last.label.active_meta.document_id.should eq @document.id
137
+ @section.notes_for(:title).last.label.active_meta.document_id.should eq @document.id
138
+ end
139
+
140
+ it "should verify that note are saved with the correct model id if metadata_id_from is defined" , :active_record => true do
141
+ # fixtures
142
+ @document.create_note_for(:name, "Very important note!")
143
+ @section = @document.create_section :title => "new section"
144
+ @section.reload
145
+ @section.create_note_for(:title, "Very important note for section!")
146
+
147
+ # expectations
148
+ @document.notes_for(:name).last.document_id.should eq @document.id
149
+ @section.notes_for(:title).last.document_id.should eq @document.id
150
+ end
151
+
152
+ it "should delete a note passing a bson object as id", :mongoid => true do
153
+ #fixtures
154
+ 2.times do |i|
155
+ @document.create_note_for(:name, "Note number #{i}")
156
+ end
157
+
158
+ #expectations
159
+ notes = @document.notes_for(:name)
160
+ notes.count.should eq 2
161
+ note_to_be_deleted = notes[0].note
162
+
163
+ @document.delete_note_for(:name,notes[0]._id)
164
+
165
+ notes = @document.notes_for(:name)
166
+ notes.count.should eq 1
167
+ notes.first.note.should_not eq note_to_be_deleted
168
+
169
+ end
170
+
171
+ it "should delete a note passing a string as id", :mongoid => true do
172
+ #fixtures
173
+ 2.times do |i|
174
+ @document.create_note_for(:name, "Note number #{i}")
175
+ end
176
+
177
+ #expectations
178
+ notes = @document.notes_for(:name)
179
+ notes.count.should eq 2
180
+ note_to_be_deleted = notes[0].note
181
+
182
+ @document.delete_note_for(:name,notes[0].id.to_s)
183
+
184
+ notes = @document.notes_for(:name)
185
+ notes.count.should eq 1
186
+ notes.first.note.should_not eq note_to_be_deleted
187
+
188
+ end
189
+
190
+ it "should delete a note id", :active_record => true do
191
+ #fixtures
192
+ 2.times do |i|
193
+ @document.create_note_for(:name, "Note number #{i}")
194
+ end
195
+
196
+ #expectations
197
+ notes = @document.notes_for(:name)
198
+ notes.count.should eq 2
199
+ note_to_be_deleted = notes[0].note
200
+
201
+ @document.delete_note_for(:name,notes[0].id)
202
+
203
+ notes = @document.notes_for(:name)
204
+ notes.count.should eq 1
205
+ notes.first.note.should_not eq note_to_be_deleted
206
+
207
+ end
208
+
209
+ it "should verify that notes_for sort by updated_at descending" do
210
+ #fixtures
211
+ 3.times do |i|
212
+ sleep 1.seconds
213
+ @document.create_note_for(:name, "Note number #{i}")
214
+ end
215
+
216
+ #expectations
217
+ @document.notes_for(:name).first.note.should eq "Note number 2"
218
+ @document.notes_for(:name).last.note.should eq "Note number 0"
219
+ end
220
+
221
+ it "should find a note by id", :mongoid => true, do
222
+
223
+ 3.times do |i|
224
+ @document.create_note_for(:name, "Note number #{i}")
225
+ end
226
+
227
+ note = @document.notes_for(:name).last
228
+ id = note.id.to_s
229
+
230
+ match_note = @document.note_for :name,id
231
+ match_note.id.to_s.should eq id
232
+
233
+ end
234
+
235
+ it "should find a note by id", :active_record => true, do
236
+
237
+ 3.times do |i|
238
+ @document.create_note_for(:name, "Note number #{i}")
239
+ end
240
+
241
+ note = @document.notes_for(:name).last
242
+ id = note.id
243
+
244
+ match_note = @document.note_for :name,id
245
+ match_note.id.should eq id
246
+
247
+ end
248
+
249
+ it "should has_notes_for verify if defined field has notes" do
250
+ @document.has_notes_for(:name).should be_false
251
+ @document.create_note_for(:name, "new note")
252
+ @document.has_notes_for(:name).should be_true
253
+ end
254
+
255
+ end
256
+
257
+ context "history" do
258
+
259
+ before(:each) do
260
+ @document = Document.create! { |d| d.name = "John" }
261
+ @document.reload
262
+ end
263
+
264
+ it "should create history when a document is created" do
265
+ @document.history_for(:name).should have(1).record
266
+ end
267
+
268
+ it "should create history for a defined field when a document is created" do
269
+ @document.history_for(:name)[0].value.should eq(@document.name)
270
+ end
271
+
272
+ it "should save the craeted_at datetime anytime an history entry is created" do
273
+ @document.history_for(:name)[0].created_at.should be_a_kind_of Time
274
+ end
275
+
276
+ it "should verify that history return records only for the self document" do
277
+ # fixtures
278
+ @another_doc = Document.create :name => "Andrea"
279
+ @another_doc.reload
280
+
281
+ # expectations
282
+ @document.history_for(:name).count.should eq(1)
283
+ @another_doc.history_for(:name).count.should eq(1)
284
+
285
+ @document.history_for(:name).last.value.should eq @document.name
286
+ @another_doc.history_for(:name).last.value.should eq @another_doc.name
287
+ end
288
+
289
+ it "should verify that history is saved with the correct model id if metadata_id_from is defined", :mongoid => true, do
290
+ # fixtures
291
+ @section = @document.create_section :title => "new section"
292
+ @section.reload
293
+
294
+ # expectations
295
+ @document.history_for(:name).count.should eq(1)
296
+ @document.history_for(:name).last.label.active_meta.document_id.should eq @document.id
297
+
298
+ @section.history_for(:title).count.should eq(1)
299
+ @section.history_for(:title).last.label.active_meta.document_id.should eq @document.id
300
+ end
301
+
302
+ it "should verify that history is saved with the correct model id if metadata_id_from is defined", :active_record => true, do
303
+ # fixtures
304
+ @section = @document.create_section :title => "new section"
305
+ @section.reload
306
+
307
+ # expectations
308
+ @document.history_for(:name).count.should eq(1)
309
+ @document.history_for(:name).last.document_id.should eq @document.id
310
+
311
+ @section.history_for(:title).count.should eq(1)
312
+ @section.history_for(:title).last.document_id.should eq @document.id
313
+ end
314
+
315
+ it "should verify that history_for sort by created_at descending" do
316
+ #fixtures
317
+ 3.times do |i|
318
+ sleep 0.1.seconds
319
+ @document.name = "name #{i}"
320
+ @document.save
321
+ end
322
+
323
+ #expectations
324
+ @document.history_for(:name).first.value.should eq "name 2"
325
+ @document.history_for(:name).last.value.should eq "John"
326
+ end
327
+
328
+ it "should verify that no history is craeted for the skipped field defined in the config file" do
329
+ @document.history_for(:name).should have(1).record
330
+ @document.history_for(:id).should have(0).record
331
+ end
332
+
333
+ it "should save the correct creator when a history is created" do
334
+ current_user = User.current
335
+ history = @document.history_for(:name).first
336
+ history.created_by.should eq current_user.id
337
+ end
338
+
339
+ end
340
+
341
+ context "attachments" do
342
+
343
+ before(:each) do
344
+ @document = Document.create! { |d| d.name = "John" }
345
+ @document.reload
346
+ doc = File.expand_path('../support/pdf_test.pdf',__FILE__)
347
+ @attachment = Rack::Test::UploadedFile.new(doc, "application/pdf")
348
+ doc2 = File.expand_path('../support/pdf_test_2.pdf',__FILE__)
349
+ @attachment2 = Rack::Test::UploadedFile.new(doc2, "application/pdf")
350
+ end
351
+
352
+ it "should save attachment for a given attribute" do
353
+ @document.save_attachment_for(:name,@attachment)
354
+ @document.attachments_for(:name).should have(1).record
355
+ end
356
+
357
+ it "should verify that the attachment metadata id refers to the correct self id", :mongoid => true do
358
+ @document.save_attachment_for(:name,@attachment)
359
+ @document.attachments_for(:name).last.label.active_meta.document_id.should eq @document.id
360
+ end
361
+
362
+ it "should verify that the attachment metadata id refers to the correct self id", :active_record => true do
363
+ @document.save_attachment_for(:name,@attachment)
364
+ @document.attachments_for(:name).last.document_id.should eq @document.id
365
+ end
366
+
367
+ it "should verify that the attachment file name is correctly saved" do
368
+ @document.save_attachment_for(:name,@attachment)
369
+ @document.attachments_for(:name).last.attach.original_filename.should eq @attachment.original_filename
370
+ end
371
+
372
+ it "should verify that the attachment content type is correctly saved" do
373
+ @document.save_attachment_for(:name,@attachment)
374
+ @document.attachments_for(:name).last.attach.content_type.should eq @attachment.content_type
375
+ end
376
+
377
+ it "should verify that the attachment size is correctly saved" do
378
+ @document.save_attachment_for(:name,@attachment)
379
+ @document.attachments_for(:name).last.attach.size.should eq @attachment.size
380
+ end
381
+
382
+ it "should verify that the attachment updated_at is correctly saved", :mongoid => true do
383
+ @document.save_attachment_for(:name,@attachment)
384
+ @document.attachments_for(:name).last.attach.instance_read(:updated_at).should be_a_kind_of DateTime
385
+ end
386
+
387
+ it "should verify that the attachment updated_at is correctly saved", :active_record => true do
388
+ @document.save_attachment_for(:name,@attachment)
389
+ @document.attachments_for(:name).last.attach.instance_read(:updated_at).should be_a_kind_of Time
390
+ end
391
+
392
+ it "should verify that the document has been saved in the correct position on filesystem", :active_record => true do
393
+ @document.save_attachment_for(:name,@attachment)
394
+ att = @document.attachments_for(:name).first
395
+ expected_path = File.expand_path "#{ActiveMetadata::CONFIG['attachment_base_path']}/#{@document.id}/#{:name.to_s}/#{att.id}/#{@attachment.original_filename}"
396
+ File.exists?(expected_path).should be_true
397
+ end
398
+
399
+ it "should verify that the document has been saved in the correct position on filesystem", :mongoid => true do
400
+ @document.save_attachment_for(:name,@attachment)
401
+ att = @document.attachments_for(:name).first
402
+ expected_path = File.expand_path "#{ActiveMetadata::CONFIG['attachment_base_path']}/#{@document.id}/#{:name.to_s}/#{att.counter}/#{@attachment.original_filename}"
403
+ File.exists?(expected_path).should be_true
404
+ end
405
+
406
+ it "should delete an attachment passing a bson object as id", :mongoid => true do
407
+
408
+ #fixtures
409
+ 2.times do |i|
410
+ @document.save_attachment_for(:name,@attachment)
411
+ end
412
+
413
+ #expectations
414
+ attachments = @document.attachments_for(:name)
415
+ attachments.count.should eq 2
416
+ attachment_path_to_be_deleted = attachments[0].attach.path
417
+
418
+ @document.delete_attachment_for(:name,attachments[0]._id)
419
+
420
+ attachments = @document.attachments_for(:name)
421
+ attachments.count.should eq 1
422
+ attachments.first.attach.path.should_not eq attachment_path_to_be_deleted
423
+ end
424
+
425
+ it "should delete an attachment passing a string as id", :mongoid => true do
426
+ #fixtures
427
+ 2.times do |i|
428
+ @document.save_attachment_for(:name,@attachment)
429
+ end
430
+
431
+ #expectations
432
+ attachments = @document.attachments_for(:name)
433
+ attachments.count.should eq 2
434
+ attachment_path_to_be_deleted = attachments[0].attach.path
435
+
436
+ @document.delete_attachment_for(:name,attachments[0].id.to_s)
437
+
438
+ attachments = @document.attachments_for(:name)
439
+ attachments.count.should eq 1
440
+ attachments.first.attach.path.should_not eq attachment_path_to_be_deleted
441
+ end
442
+
443
+ it "should delete an attachment by id", :active_record => true do
444
+ #fixtures
445
+ 2.times do |i|
446
+ @document.save_attachment_for(:name,@attachment)
447
+ end
448
+
449
+ #expectations
450
+ attachments = @document.attachments_for(:name)
451
+ attachments.count.should eq 2
452
+ attachment_path_to_be_deleted = attachments[0].attach.path
453
+
454
+ @document.delete_attachment_for(:name,attachments[0].id)
455
+
456
+ attachments = @document.attachments_for(:name)
457
+ attachments.count.should eq 1
458
+ attachments.first.attach.path.should_not eq attachment_path_to_be_deleted
459
+ end
460
+
461
+ it "should update an attachment", :mongoid => true do
462
+ @document.save_attachment_for(:name,@attachment)
463
+ att = @document.attachments_for(:name).last
464
+
465
+ @document.update_attachment_for :name,att._id,@attachment2
466
+ att2 = @document.attachments_for(:name).last
467
+
468
+ File.exists?(att.attach.path).should be_false
469
+ File.exists?(att2.attach.path).should be_true
470
+ end
471
+
472
+ it "should update an attachment", :active_record => true do
473
+ @document.save_attachment_for(:name,@attachment)
474
+ att = @document.attachments_for(:name).last
475
+
476
+ @document.update_attachment_for :name,att.id,@attachment2
477
+ att2 = @document.attachments_for(:name).last
478
+
479
+ File.exists?(att.attach.path).should be_false
480
+ File.exists?(att2.attach.path).should be_true
481
+ end
482
+
483
+ it "should verify that field attachment_updated_at is modified after an update", :mongoid => true do
484
+ @document.save_attachment_for(:name,@attachment)
485
+ att = @document.attachments_for(:name).last
486
+
487
+ sleep 1.seconds
488
+
489
+ @document.update_attachment_for :name,att._id,@attachment2
490
+ att2 = @document.attachments_for(:name).last
491
+
492
+ att2.attach.instance_read(:updated_at).should be > att.attach.instance_read(:updated_at)
493
+ end
494
+
495
+ it "should verify that field attachment_updated_at is modified after an update", :active_record => true do
496
+ @document.save_attachment_for(:name,@attachment)
497
+ att = @document.attachments_for(:name).last
498
+
499
+ sleep 1.seconds
500
+
501
+ @document.update_attachment_for :name,att.id,@attachment2
502
+ att2 = @document.attachments_for(:name).last
503
+
504
+ att2.attach.instance_read(:updated_at).should be > att.attach.instance_read(:updated_at)
505
+ end
506
+
507
+ it "should verify that is possible to upload 2 files with the same name for the same field" do
508
+ 2.times do
509
+ @document.save_attachment_for(:name,@attachment)
510
+ end
511
+
512
+ #expectations
513
+ attachments = @document.attachments_for :name
514
+ attachments.count.should eq 2
515
+ File.exists?(attachments[0].attach.path).should be_true
516
+ attachments[0].attach.instance_read(:file_name).should eq "pdf_test.pdf"
517
+ File.exists?(attachments[1].attach.path).should be_true
518
+ attachments[1].attach.instance_read(:file_name).should eq "pdf_test.pdf"
519
+ end
520
+
521
+ it "should save the correct creator when an attachment is created" do
522
+ @document.save_attachment_for(:name,@attachment)
523
+ @document.attachments_for(:name).last.created_by.should eq User.current.id
524
+ end
525
+
526
+ it "should save the correct updater when anttachment is updated" do
527
+ @document.save_attachment_for(:name,@attachment)
528
+ att = @document.attachments_for(:name).last
529
+
530
+ @document.update_attachment_for :name,att.id,@attachment2
531
+ att2 = @document.attachments_for(:name).last
532
+
533
+ @document.attachments_for(:name).last.updated_by.should eq User.current.id
534
+ end
535
+
536
+ it "should has_notes_for verify if defined field has attachments" do
537
+ @document.has_attachments_for(:name).should be_false
538
+ @document.save_attachment_for(:name,@attachment)
539
+ @document.has_attachments_for(:name).should be_true
540
+ end
541
+
542
+ end
543
+
544
+ context "watchers" do
545
+ before(:each) do
546
+ @document = Document.create! { |d| d.name = "John" }
547
+ end
548
+
549
+ it "should create a watcher for a given field" do
550
+ user = User.create!(:email => "email@email.it", :firstname => 'John', :lastname => 'smith' )
551
+ @document.create_watcher_for(:name, user)
552
+ @document.watchers_for(:name).should have(1).record
553
+ end
554
+
555
+ it "should delete a watcher for a given field" do
556
+ user = User.create!(:email => "email@email.it", :firstname => 'John', :lastname => 'smith' )
557
+ @document.create_watcher_for(:name, user)
558
+ @document.watchers_for(:name).should have(1).record
559
+
560
+ @document.delete_watcher_for :name, user
561
+ @document.watchers_for(:name).should have(0).record
562
+ end
563
+
564
+ it "should return false if field is not watched by the passed user" do
565
+ user = User.create!(:email => "email@email.it", :firstname => 'John', :lastname => 'smith' )
566
+ another_user = User.create!(:email => "email2@email.it", :firstname => 'George', :lastname => 'Washington' )
567
+
568
+ @document.create_watcher_for(:name, user)
569
+ @document.is_watched_by(:name,user).should be_true
570
+ @document.is_watched_by(:name,another_user).should be_false
571
+ end
572
+
573
+
574
+ it "should create an unread message by default" do
575
+ pending "to be moved in virgilio project"
576
+ user = User.create!(:email => "email@email.it", :firstname => 'John', :lastname => 'smith' )
577
+ @document.create_watcher_for(:name, user)
578
+ @document.update_attribute(:name, 'new_value')
579
+
580
+
581
+ user.inbox.messages.should have(1).record
582
+ user.inbox.messages.first.read.should be_false
583
+ end
584
+
585
+ it "should read an unread message" do
586
+ pending "to be moved in virgilio project"
587
+ user = User.create!(:email => "email@email.it", :firstname => 'John', :lastname => 'smith' )
588
+ @document.create_watcher_for(:name, user)
589
+ @document.update_attribute(:name, 'new_value')
590
+ alert_message = user.inbox.messages.first
591
+ alert_message.mark_as_read
592
+ user.inbox.messages.first.read.should be_true
593
+ end
594
+
595
+ end
596
+ end
@@ -0,0 +1,35 @@
1
+ require "spec_helper"
2
+ require "rack/test/uploaded_file"
3
+ require "benchmark"
4
+
5
+ describe "ActiveMetadata" do
6
+
7
+ before(:each) do
8
+ @document = Document.create! { |d| d.name = "John" }
9
+ @document.reload
10
+ end
11
+
12
+ context "running on mongo" do
13
+
14
+ # it "should insert xxx notes" do
15
+ # notes = 1000000
16
+ # result = []
17
+ # Benchmark.bm do |x|
18
+ # x.report do
19
+ # notes.times do |i|
20
+ # start = Time.now
21
+ # @document.create_note_for(:name, "Note number #{i}")
22
+ # result.push Time.now - start
23
+ # end
24
+ # end
25
+ # end
26
+ # puts "Total = #{result.sum}"
27
+ # puts "Average = #{result.sum / notes}"
28
+ # @document.notes_for(:name).count.should eq notes
29
+ # end
30
+
31
+ end
32
+
33
+ end
34
+
35
+
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe "NotesController" do
4
+
5
+ context "create" do
6
+ it "should create a new note" do
7
+ pending
8
+ # post :create
9
+ # response.should be_success
10
+ #
11
+ end
12
+ end
13
+
14
+ end