message_train 0.1.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/.simplecov +8 -0
  3. data/.travis.yml +7 -2
  4. data/Gemfile +3 -0
  5. data/README.rdoc +37 -1
  6. data/Rakefile +5 -6
  7. data/VERSION +1 -1
  8. data/app/assets/javascripts/message_train.js +33 -0
  9. data/app/assets/stylesheets/message_train.scss +26 -0
  10. data/app/controllers/concerns/message_train_support.rb +127 -0
  11. data/app/controllers/message_train/application_controller.rb +1 -60
  12. data/app/controllers/message_train/boxes_controller.rb +0 -4
  13. data/app/controllers/message_train/messages_controller.rb +12 -6
  14. data/app/controllers/message_train/participants_controller.rb +1 -1
  15. data/app/controllers/message_train/unsubscribes_controller.rb +59 -0
  16. data/app/helpers/message_train/application_helper.rb +26 -0
  17. data/app/helpers/message_train/attachments_helper.rb +19 -0
  18. data/app/helpers/message_train/boxes_helper.rb +16 -11
  19. data/app/helpers/message_train/collectives_helper.rb +48 -0
  20. data/app/helpers/message_train/conversations_helper.rb +24 -16
  21. data/app/helpers/message_train/messages_helper.rb +14 -12
  22. data/app/mailers/message_train/application_mailer.rb +8 -0
  23. data/app/mailers/message_train/previews/receipt_mailer_preview.rb +10 -0
  24. data/app/mailers/message_train/receipt_mailer.rb +17 -0
  25. data/app/models/message_train/attachment.rb +28 -10
  26. data/app/models/message_train/box.rb +114 -83
  27. data/app/models/message_train/conversation.rb +48 -39
  28. data/app/models/message_train/ignore.rb +2 -6
  29. data/app/models/message_train/message.rb +40 -24
  30. data/app/models/message_train/receipt.rb +20 -10
  31. data/app/models/message_train/unsubscribe.rb +7 -0
  32. data/app/views/layouts/mailer.html.haml +6 -0
  33. data/app/views/message_train/application/_attachment_fields.html.haml +7 -0
  34. data/app/views/message_train/application/_attachment_link.html.haml +4 -0
  35. data/app/views/message_train/application/_widget.html.haml +6 -0
  36. data/app/views/message_train/boxes/_dropdown_list.html.haml +1 -2
  37. data/app/views/message_train/boxes/_list_item.html.haml +2 -2
  38. data/app/views/message_train/boxes/_widget.html.haml +4 -1
  39. data/app/views/message_train/boxes/show.html.haml +12 -4
  40. data/app/views/message_train/collectives/_dropdown_list.html.haml +6 -0
  41. data/app/views/message_train/collectives/_list_item.html.haml +5 -0
  42. data/app/views/message_train/collectives/_widget.html.haml +7 -0
  43. data/app/views/message_train/conversations/_conversation.html.haml +22 -7
  44. data/app/views/message_train/conversations/_deleted_toggle.html.haml +1 -1
  45. data/app/views/message_train/conversations/_ignored_toggle.html.haml +3 -3
  46. data/app/views/message_train/conversations/_read_toggle.html.haml +3 -3
  47. data/app/views/message_train/conversations/_toggle.html.haml +4 -1
  48. data/app/views/message_train/conversations/_trashed_toggle.html.haml +3 -3
  49. data/app/views/message_train/conversations/show.html.haml +4 -3
  50. data/app/views/message_train/messages/_deleted_toggle.html.haml +1 -1
  51. data/app/views/message_train/messages/_form.html.haml +22 -7
  52. data/app/views/message_train/messages/_message.html.haml +14 -4
  53. data/app/views/message_train/messages/_read_toggle.html.haml +1 -1
  54. data/app/views/message_train/messages/_trashed_toggle.html.haml +1 -1
  55. data/app/views/message_train/messages/edit.html.haml +1 -1
  56. data/app/views/message_train/messages/new.html.haml +4 -1
  57. data/app/views/message_train/participants/_field.html.haml +1 -1
  58. data/app/views/message_train/participants/_prefilled_field.html.haml +4 -0
  59. data/app/views/message_train/receipt_mailer/notification_email.html.haml +13 -0
  60. data/app/views/message_train/unsubscribes/index.html.haml +10 -0
  61. data/config/environment.rb +1 -0
  62. data/config/locales/en.yml +49 -7
  63. data/config/routes.rb +10 -2
  64. data/db/migrate/20150901183458_add_received_through_to_message_train_receipts.rb +6 -0
  65. data/db/migrate/20151004184347_add_unique_index_to_receipts.rb +5 -0
  66. data/db/migrate/20151124000820_create_message_train_unsubscribes.rb +14 -0
  67. data/lib/generators/message_train/install/install_generator.rb +8 -2
  68. data/lib/generators/message_train/install/templates/initializer.rb +5 -1
  69. data/lib/message_train/configuration.rb +11 -1
  70. data/lib/message_train/engine.rb +1 -0
  71. data/lib/message_train/mixin.rb +206 -21
  72. data/message_train.gemspec +66 -13
  73. data/spec/controllers/message_train/boxes_controller_spec.rb +10 -3
  74. data/spec/controllers/message_train/concerns_spec.rb +40 -0
  75. data/spec/controllers/message_train/conversations_controller_spec.rb +3 -3
  76. data/spec/controllers/message_train/messages_controller_spec.rb +60 -27
  77. data/spec/controllers/message_train/participants_controller_spec.rb +41 -6
  78. data/spec/controllers/message_train/unsubscribes_controller_spec.rb +56 -0
  79. data/spec/dummy/app/assets/files/message_train/attachments/{1917-Boys_Race_Above-Wiki.jpg → image-sample.jpg} +0 -0
  80. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  81. data/spec/dummy/app/models/group.rb +16 -1
  82. data/spec/dummy/app/models/role.rb +22 -0
  83. data/spec/dummy/app/models/user.rb +1 -1
  84. data/spec/dummy/app/views/layouts/_top_navigation.html.haml +4 -2
  85. data/spec/dummy/app/views/layouts/application.html.haml +2 -3
  86. data/spec/dummy/app/views/pages/index.html.haml +4 -0
  87. data/spec/dummy/config/application.rb +6 -0
  88. data/spec/dummy/config/environments/development.rb +1 -0
  89. data/spec/dummy/config/environments/test.rb +1 -0
  90. data/spec/dummy/config/initializers/high_voltage.rb +3 -0
  91. data/spec/dummy/config/initializers/message_train.rb +6 -1
  92. data/spec/dummy/config/initializers/paperclip.rb +2 -2
  93. data/spec/dummy/config/routes.rb +2 -2
  94. data/spec/dummy/config/settings.yml +9 -0
  95. data/spec/dummy/db/migrate/{20150724142846_create_message_train_conversations.night_train.rb → 20150901183629_create_message_train_conversations.message_train.rb} +0 -0
  96. data/spec/dummy/db/migrate/{20150724142847_create_message_train_messages.night_train.rb → 20150901183630_create_message_train_messages.message_train.rb} +0 -0
  97. data/spec/dummy/db/migrate/{20150724142848_create_message_train_attachments.night_train.rb → 20150901183631_create_message_train_attachments.message_train.rb} +0 -0
  98. data/spec/dummy/db/migrate/{20150724142849_create_message_train_receipts.night_train.rb → 20150901183632_create_message_train_receipts.message_train.rb} +0 -0
  99. data/spec/dummy/db/migrate/{20150724142850_create_message_train_ignores.night_train.rb → 20150901183633_create_message_train_ignores.message_train.rb} +0 -0
  100. data/spec/dummy/db/migrate/20150901183634_add_received_through_to_message_train_receipts.message_train.rb +7 -0
  101. data/spec/dummy/db/migrate/20151004184519_add_unique_index_to_receipts.message_train.rb +6 -0
  102. data/spec/dummy/db/migrate/20151124001417_create_message_train_unsubscribes.message_train.rb +15 -0
  103. data/spec/dummy/db/schema.rb +24 -7
  104. data/spec/dummy/db/seeds/conversations.seeds.rb +92 -3
  105. data/spec/dummy/db/seeds/groups.seeds.rb +27 -0
  106. data/spec/dummy/db/seeds/test/attachments.seeds.rb +4 -0
  107. data/spec/dummy/db/seeds/unsubscribes.seeds.rb +12 -0
  108. data/spec/dummy/db/seeds/users.seeds.rb +27 -0
  109. data/spec/dummy/db/test.sqlite3 +0 -0
  110. data/spec/factories/group.rb +4 -4
  111. data/spec/factories/message.rb +10 -3
  112. data/spec/features/boxes_spec.rb +160 -33
  113. data/spec/features/conversations_spec.rb +11 -4
  114. data/spec/features/messages_spec.rb +20 -6
  115. data/spec/features/unsubscribes_spec.rb +38 -0
  116. data/spec/helpers/message_train/application_helper_spec.rb +60 -0
  117. data/spec/helpers/message_train/attachment_helper_spec.rb +35 -0
  118. data/spec/helpers/message_train/boxes_helper_spec.rb +11 -5
  119. data/spec/helpers/message_train/collectives_helper_spec.rb +76 -0
  120. data/spec/helpers/message_train/conversations_helper_spec.rb +295 -0
  121. data/spec/helpers/message_train/messages_helper_spec.rb +217 -0
  122. data/spec/models/group_spec.rb +112 -2
  123. data/spec/models/message_train/attachment_spec.rb +44 -1
  124. data/spec/models/message_train/box_spec.rb +306 -51
  125. data/spec/models/message_train/conversation_spec.rb +84 -6
  126. data/spec/models/message_train/ignore_spec.rb +0 -4
  127. data/spec/models/message_train/message_spec.rb +49 -12
  128. data/spec/models/message_train/receipt_spec.rb +44 -8
  129. data/spec/models/message_train/unsubscribe_spec.rb +16 -0
  130. data/spec/models/role_spec.rb +125 -0
  131. data/spec/models/user_spec.rb +155 -26
  132. data/spec/rails_helper.rb +8 -1
  133. data/spec/support/attachments.rb +4 -0
  134. data/spec/support/controller_behaviors.rb +28 -0
  135. data/spec/support/conversations.rb +13 -0
  136. data/spec/support/groups.rb +3 -0
  137. data/spec/support/loaded_site.rb +3 -0
  138. data/spec/support/messages.rb +23 -0
  139. data/spec/support/roles.rb +4 -0
  140. data/spec/support/users.rb +6 -0
  141. data/spec/support/wysihtml5_helper.rb +8 -0
  142. metadata +99 -12
  143. data/spec/dummy/app/assets/files/message_train/attachments/Haie_rci.svg +0 -1714
  144. data/spec/dummy/public/capybara.html +0 -193
@@ -1,4 +1,7 @@
1
1
  class ApplicationController < ActionController::Base
2
+
3
+ include MessageTrain::MessageTrainSupport
4
+
2
5
  # Prevent CSRF attacks by raising an exception.
3
6
  # For APIs, you may want to use :null_session instead.
4
7
  protect_from_forgery with: :exception
@@ -3,11 +3,18 @@ class Group < ActiveRecord::Base
3
3
  resourcify
4
4
 
5
5
  # MessageTrain Gem
6
- message_train only: :recipient, valid_senders: :owners, name_column: :title, slug_column: :slug
6
+ message_train only: :recipient,
7
+ valid_senders: :owners,
8
+ name_column: :title,
9
+ slug_column: :slug,
10
+ collectives_for_recipient: :membered_by,
11
+ valid_recipients: :recipients
7
12
 
8
13
  # Callbacks
9
14
  before_create :set_slug
10
15
 
16
+ scope :membered_by, ->(user) { with_roles([:member, :owner], user).uniq }
17
+
11
18
  def set_slug
12
19
  # Manually generate slug instead of using friendly id, for testing.
13
20
  self.slug = title.downcase.gsub(/[^a-z0-9]+/, '-')
@@ -16,4 +23,12 @@ class Group < ActiveRecord::Base
16
23
  def owners
17
24
  User.with_role(:owner, self)
18
25
  end
26
+
27
+ def recipients
28
+ User.with_role(:member, self)
29
+ end
30
+
31
+ def self.fallback_address_book(user)
32
+ Group.with_role(:owner, user)
33
+ end
19
34
  end
@@ -7,4 +7,26 @@ class Role < ActiveRecord::Base
7
7
  :allow_nil => true
8
8
 
9
9
  scopify
10
+
11
+ # MessageTrain Gem
12
+ message_train except: :sender,
13
+ valid_senders: :superadmins,
14
+ name_column: :capitalized_name,
15
+ slug_column: :name,
16
+ collectives_for_recipient: :sendable_roles,
17
+ valid_recipients: :recipients
18
+
19
+ scope :sendable_roles, ->(user) { where(resource: nil).where.not(name: 'superadmin') }
20
+
21
+ def recipients
22
+ User.with_role(self.name.to_sym)
23
+ end
24
+
25
+ def superadmins
26
+ User.with_role(:superadmin)
27
+ end
28
+
29
+ def capitalized_name
30
+ name.capitalize
31
+ end
10
32
  end
@@ -1,4 +1,4 @@
1
- require 'group' #TODO This is a hack to get the group model to load in development. Works, but for how long?
1
+ # require 'group' #TODO This is a hack to get the group model to load in development. Works, but for how long?
2
2
 
3
3
  class User < ActiveRecord::Base
4
4
  # Rolify Gem
@@ -1,5 +1,7 @@
1
1
  = navbar container_mode: :inside, class: 'navbar-static-top' do
2
2
  = nav_list class: 'navbar-nav navbar-right' do
3
3
  - if user_signed_in?
4
- = boxes_dropdown_list
5
- = nav_item 'Sign Out', '/users/sign_out', method: :delete
4
+ = collective_boxes_dropdown_list(current_user)
5
+ = boxes_dropdown_list(current_user)
6
+ = nav_item 'Manage Notifications', '/unsubscribes'
7
+ = nav_item 'Sign Out', '/users/sign_out', method: :delete
@@ -16,10 +16,9 @@
16
16
  .container
17
17
  = render_hero_unit
18
18
  - if user_signed_in?
19
- - add_widget do
20
- = boxes_widget
19
+ = message_train_widget
21
20
  = render_widgets 'md', 3
22
- .col-md-9
21
+ .col-md-9.content
23
22
  = render_h1 # For the h1 tag containing the title alone
24
23
  #alert_area
25
24
  = alert_flash_messages
@@ -0,0 +1,4 @@
1
+ - if user_signed_in?
2
+ = link_to 'Message Train Application', message_train.box_path(:in)
3
+ - else
4
+ = link_to 'Sign In', new_user_session_path
@@ -35,6 +35,12 @@ module Dummy
35
35
  g.stylesheets false
36
36
  g.javascripts false
37
37
  end
38
+
39
+ config.time_zone = 'America/Denver'
40
+ config.active_record.default_timezone = :local
38
41
  end
39
42
  end
40
43
 
44
+ FactoryGirl.definition_file_paths << MessageTrain::Engine.root.join('spec/factories')
45
+ FactoryGirl.reload
46
+
@@ -15,6 +15,7 @@ Rails.application.configure do
15
15
 
16
16
  # Don't care if the mailer can't send.
17
17
  config.action_mailer.raise_delivery_errors = false
18
+ config.action_mailer.default_url_options = { :host => 'localhost:3000' }
18
19
 
19
20
  # Print deprecation notices to the Rails logger.
20
21
  config.active_support.deprecation = :log
@@ -30,6 +30,7 @@ Rails.application.configure do
30
30
  # The :test delivery method accumulates sent emails in the
31
31
  # ActionMailer::Base.deliveries array.
32
32
  config.action_mailer.delivery_method = :test
33
+ config.action_mailer.default_url_options = { :host => 'localhost:3000' }
33
34
 
34
35
  # Randomize the order test cases are executed.
35
36
  config.active_support.test_order = :random
@@ -0,0 +1,3 @@
1
+ HighVoltage.configure do |config|
2
+ config.home_page = 'index'
3
+ end
@@ -5,4 +5,9 @@ MessageTrain.configure do |config|
5
5
  # config.user_sign_in_path = '/user/sign_in'
6
6
  # config.user_route_authentication_method = :user
7
7
  # config.address_book_methods[:users] = :address_book
8
- end
8
+ config.address_book_method = :fallback_address_book # "Groups" will pick this up, having no address book method.
9
+ config.from_email = 'do-not-reply@gemvein.com'
10
+ config.site_name = 'MessageTrain Test Site'
11
+ end
12
+
13
+ Rails.application.config.eager_load = true #FIXME: This is a weird place to put this. What would be better?
@@ -1,2 +1,2 @@
1
- Paperclip::Attachment.default_options[:path] = ':rails_root/public/system/:rails_env/:class/:attachment/:id_partition/:filename'
2
- Paperclip::Attachment.default_options[:url] = '/system/:rails_env/:class/:attachment/:id_partition/:filename'
1
+ Paperclip::Attachment.default_options[:path] = ':rails_root/public/system/:rails_env/:class/:attachment/:id_partition/:style/:filename'
2
+ Paperclip::Attachment.default_options[:url] = '/system/:rails_env/:class/:attachment/:id_partition/:style/:filename'
@@ -1,5 +1,5 @@
1
1
  Rails.application.routes.draw do
2
-
3
- mount MessageTrain::Engine => '/', :as => 'message_train'
2
+
3
+ mount MessageTrain::Engine => '/', :as => 'message_train'
4
4
  devise_for :users
5
5
  end
@@ -0,0 +1,9 @@
1
+ mailer:
2
+ from: "MessageTrain Mailer <webmaster@gemvein.com>"
3
+ address: "smtp.gmail.com"
4
+ port: 587
5
+ domain: "gmail.com"
6
+ user_name: <%= ENV["MAILER_USERNAME"] %>
7
+ password: <%= ENV["MAILER_PASSWORD"] %>
8
+ authentication: :login
9
+ enable_starttls_auto: true
@@ -0,0 +1,7 @@
1
+ # This migration comes from message_train (originally 20150901183458)
2
+ class AddReceivedThroughToMessageTrainReceipts < ActiveRecord::Migration
3
+ def change
4
+ add_reference :message_train_receipts, :received_through, polymorphic: true
5
+ add_index :message_train_receipts, [:received_through_type, :received_through_id], name: :index_message_train_receipts_on_received_through
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ # This migration comes from message_train (originally 20151004184347)
2
+ class AddUniqueIndexToReceipts < ActiveRecord::Migration
3
+ def change
4
+ add_index :message_train_receipts, [:message_id, :recipient_type, :recipient_id], name: :message_recipient, unique: true
5
+ end
6
+ end
@@ -0,0 +1,15 @@
1
+ # This migration comes from message_train (originally 20151124000820)
2
+ class CreateMessageTrainUnsubscribes < ActiveRecord::Migration
3
+ def change
4
+ create_table :message_train_unsubscribes do |t|
5
+ t.references :recipient, polymorphic: true
6
+ t.references :from, polymorphic: true
7
+
8
+ t.timestamps null: false
9
+ end
10
+
11
+ add_index :message_train_unsubscribes, [:recipient_type, :recipient_id], name: :unsubscribe_recipient
12
+ add_index :message_train_unsubscribes, [:from_type, :from_id], name: :unsubscribe_from
13
+ add_index :message_train_unsubscribes, [:recipient_type, :recipient_id, :from_type, :from_id], name: :unsubscribes, unique: true
14
+ end
15
+ end
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20150724142850) do
14
+ ActiveRecord::Schema.define(version: 20151124001417) do
15
15
 
16
16
  create_table "groups", force: :cascade do |t|
17
17
  t.string "title"
@@ -69,17 +69,34 @@ ActiveRecord::Schema.define(version: 20150724142850) do
69
69
  t.integer "recipient_id"
70
70
  t.string "recipient_type"
71
71
  t.integer "message_id"
72
- t.boolean "marked_read", default: false
73
- t.boolean "marked_trash", default: false
74
- t.boolean "marked_deleted", default: false
75
- t.boolean "sender", default: false
76
- t.datetime "created_at", null: false
77
- t.datetime "updated_at", null: false
72
+ t.boolean "marked_read", default: false
73
+ t.boolean "marked_trash", default: false
74
+ t.boolean "marked_deleted", default: false
75
+ t.boolean "sender", default: false
76
+ t.datetime "created_at", null: false
77
+ t.datetime "updated_at", null: false
78
+ t.integer "received_through_id"
79
+ t.string "received_through_type"
78
80
  end
79
81
 
82
+ add_index "message_train_receipts", ["message_id", "recipient_type", "recipient_id"], name: "message_recipient", unique: true
80
83
  add_index "message_train_receipts", ["message_id"], name: "index_message_train_receipts_on_message_id"
84
+ add_index "message_train_receipts", ["received_through_type", "received_through_id"], name: "index_message_train_receipts_on_received_through"
81
85
  add_index "message_train_receipts", ["recipient_type", "recipient_id"], name: "index_message_train_receipts_on_recipient"
82
86
 
87
+ create_table "message_train_unsubscribes", force: :cascade do |t|
88
+ t.integer "recipient_id"
89
+ t.string "recipient_type"
90
+ t.integer "from_id"
91
+ t.string "from_type"
92
+ t.datetime "created_at", null: false
93
+ t.datetime "updated_at", null: false
94
+ end
95
+
96
+ add_index "message_train_unsubscribes", ["from_type", "from_id"], name: "unsubscribe_from"
97
+ add_index "message_train_unsubscribes", ["recipient_type", "recipient_id", "from_type", "from_id"], name: "unsubscribes", unique: true
98
+ add_index "message_train_unsubscribes", ["recipient_type", "recipient_id"], name: "unsubscribe_recipient"
99
+
83
100
  create_table "roles", force: :cascade do |t|
84
101
  t.string "name"
85
102
  t.integer "resource_id"
@@ -2,8 +2,11 @@ after :users, :groups do
2
2
  first_user = User.friendly.find('first-user')
3
3
  second_user = User.friendly.find('second-user')
4
4
  third_user = User.friendly.find('third-user')
5
+ fourth_user = User.friendly.find('fourth-user')
6
+ superadmin_user = User.friendly.find('superadmin-user')
5
7
 
6
8
  first_group = Group.find_by_slug('first-group')
9
+ membered_group = Group.find_by_slug('membered-group')
7
10
 
8
11
  sent_message = FactoryGirl.create(
9
12
  :simple_message,
@@ -19,6 +22,13 @@ after :users, :groups do
19
22
  subject: 'Unread Conversation'
20
23
  )
21
24
 
25
+ to_many_message = FactoryGirl.create(
26
+ :simple_message,
27
+ sender: first_user,
28
+ recipients_to_save: { 'users' => [second_user.slug, third_user.slug, fourth_user.slug].join(', ') },
29
+ subject: 'To Many Conversation'
30
+ )
31
+
22
32
  ignored_message = FactoryGirl.create(
23
33
  :simple_message,
24
34
  sender: second_user,
@@ -43,6 +53,15 @@ after :users, :groups do
43
53
  )
44
54
  read_message.mark_read_for(first_user)
45
55
 
56
+
57
+ attachment_message = FactoryGirl.create(
58
+ :simple_message,
59
+ sender: second_user,
60
+ recipients_to_save: { 'users' => first_user.slug },
61
+ subject: 'Attachment Conversation',
62
+ generate_attachment?: true
63
+ )
64
+
46
65
  deleted_message = FactoryGirl.create(
47
66
  :simple_message,
48
67
  sender: second_user,
@@ -55,7 +74,77 @@ after :users, :groups do
55
74
  :simple_message,
56
75
  sender: first_user,
57
76
  recipients_to_save: { 'groups' => first_group.slug },
58
- subject: 'Group Message'
77
+ subject: 'Group Announcement'
78
+ )
79
+
80
+ membered_group_message = FactoryGirl.create(
81
+ :simple_message,
82
+ sender: second_user,
83
+ recipients_to_save: { 'groups' => membered_group.slug },
84
+ subject: 'Membered Group Announcement'
85
+ )
86
+
87
+ membered_group_trashed_message = FactoryGirl.create(
88
+ :simple_message,
89
+ sender: second_user,
90
+ recipients_to_save: { 'groups' => membered_group.slug },
91
+ subject: 'Membered Group Trashed Conversation'
92
+ )
93
+ membered_group_trashed_message.mark(:trash, first_user)
94
+
95
+ membered_group_read_message = FactoryGirl.create(
96
+ :simple_message,
97
+ sender: second_user,
98
+ recipients_to_save: { 'groups' => membered_group.slug },
99
+ subject: 'Membered Group Read Conversation'
100
+ )
101
+ membered_group_read_message.mark(:read, first_user)
102
+
103
+ membered_group_ignored_message = FactoryGirl.create(
104
+ :simple_message,
105
+ sender: second_user,
106
+ recipients_to_save: { 'groups' => membered_group.slug },
107
+ subject: 'Membered Group Ignored Conversation'
108
+ )
109
+ membered_group_ignored_message.conversation.set_ignored(first_user)
110
+
111
+ membered_group_deleted_message = FactoryGirl.create(
112
+ :simple_message,
113
+ sender: second_user,
114
+ recipients_to_save: { 'groups' => membered_group.slug },
115
+ subject: 'Membered Group Deleted Conversation'
116
+ )
117
+ membered_group_deleted_message.mark(:deleted, first_user)
118
+
119
+ membered_group_draft = FactoryGirl.create(
120
+ :simple_message,
121
+ sender: second_user,
122
+ recipients_to_save: { 'groups' => membered_group.slug },
123
+ subject: 'Membered Group Draft',
124
+ draft: true
125
+ )
126
+
127
+ owned_group_draft = FactoryGirl.create(
128
+ :simple_message,
129
+ sender: first_user,
130
+ recipients_to_save: { 'groups' => first_group.slug },
131
+ subject: 'Owned Group Draft',
132
+ draft: true
133
+ )
134
+
135
+ role_message = FactoryGirl.create(
136
+ :simple_message,
137
+ sender: superadmin_user,
138
+ recipients_to_save: { 'roles' => 'admin' },
139
+ subject: 'Role Conversation'
140
+ )
141
+
142
+ role_draft = FactoryGirl.create(
143
+ :simple_message,
144
+ sender: superadmin_user,
145
+ recipients_to_save: { 'roles' => 'admin' },
146
+ subject: 'Role Draft',
147
+ draft: true
59
148
  )
60
149
 
61
150
  draft_message = FactoryGirl.create(
@@ -80,7 +169,7 @@ after :users, :groups do
80
169
  )
81
170
  FactoryGirl.create_list(:simple_message, 11,
82
171
  conversation: long_message.conversation,
83
- sender: second_user,
84
- recipients_to_save: { 'users' => first_user.slug }
172
+ sender: first_user,
173
+ recipients_to_save: { 'users' => second_user.slug }
85
174
  )
86
175
  end
@@ -1,9 +1,36 @@
1
1
  after :users do
2
2
  first_user = User.friendly.find('first-user')
3
+ second_user = User.friendly.find('second-user')
4
+ third_user = User.friendly.find('third-user')
5
+ fourth_user = User.friendly.find('fourth-user')
6
+ unsubscribed_user = User.friendly.find('unsubscribed-user')
3
7
 
4
8
  first_group = FactoryGirl.create(
5
9
  :group,
6
10
  title: 'First Group',
7
11
  owner: first_user
8
12
  )
13
+ fourth_user.add_role(:member, first_group)
14
+ unsubscribed_user.add_role(:member, first_group)
15
+
16
+ membered_group = FactoryGirl.create(
17
+ :group,
18
+ title: 'Membered Group',
19
+ owner: second_user
20
+ )
21
+ first_user.add_role(:member, membered_group)
22
+ unsubscribed_user.add_role(:member, membered_group)
23
+
24
+ empty_group = FactoryGirl.create(
25
+ :group,
26
+ title: 'Empty Group',
27
+ owner: first_user
28
+ )
29
+
30
+ unsubscribed_group = FactoryGirl.create(
31
+ :group,
32
+ title: 'Unsubscribed Group',
33
+ owner: second_user
34
+ )
35
+ first_user.add_role(:member, unsubscribed_group)
9
36
  end
@@ -0,0 +1,4 @@
1
+ after 'test:conversations' do
2
+ FactoryGirl.create(:attachment, attachment: File.open('spec/dummy/app/assets/files/message_train/attachments/image-sample.jpg'))
3
+ FactoryGirl.create(:attachment, attachment: File.open('spec/dummy/app/assets/files/message_train/attachments/pdf-sample.pdf'))
4
+ end
@@ -0,0 +1,12 @@
1
+ after :groups do
2
+ first_user = User.friendly.find('first-user')
3
+ unsubscribed_user = User.friendly.find('unsubscribed-user')
4
+ first_group = Group.find_by_title('First Group')
5
+ membered_group = Group.find_by_title('Membered Group')
6
+ unsubscribed_group = Group.find_by_title('Unsubscribed Group')
7
+
8
+ unsubscribed_user.unsubscribe_from(first_group)
9
+ unsubscribed_user.unsubscribe_from(membered_group)
10
+ unsubscribed_user.unsubscribe_from(unsubscribed_user)
11
+ first_user.unsubscribe_from(unsubscribed_group)
12
+ end
@@ -13,3 +13,30 @@ third_user = FactoryGirl.create(
13
13
  display_name: 'Third User',
14
14
  email: 'third.user@example.com'
15
15
  )
16
+ fourth_user = FactoryGirl.create(
17
+ :user,
18
+ display_name: 'Fourth User',
19
+ email: 'fourth.user@example.com'
20
+ )
21
+ unsubscribed_user = FactoryGirl.create(
22
+ :user,
23
+ display_name: 'Unsubscribed User',
24
+ email: 'unsubscribed.user@example.com'
25
+ )
26
+ silent_user = FactoryGirl.create(
27
+ :user,
28
+ display_name: 'Silent User',
29
+ email: 'silent.user@example.com'
30
+ )
31
+ superadmin_user = FactoryGirl.create(
32
+ :user,
33
+ display_name: 'Superadmin User',
34
+ email: 'superadmin.user@example.com'
35
+ )
36
+ superadmin_user.add_role(:superadmin)
37
+ admin_user = FactoryGirl.create(
38
+ :user,
39
+ display_name: 'Admin User',
40
+ email: 'admin.user@example.com'
41
+ )
42
+ admin_user.add_role(:admin)
Binary file
@@ -4,7 +4,7 @@ FactoryGirl.define do
4
4
  description { Faker::Lorem.paragraphs([*1..5].sample).join("\n\n") }
5
5
  transient do
6
6
  owner { User.order("RANDOM()").first }
7
- member_count 5
7
+ # member_count 5
8
8
  end
9
9
  # the after(:create) yields two values; the user instance itself and the
10
10
  # evaluator, which stores all values from the factory, including transient
@@ -12,9 +12,9 @@ FactoryGirl.define do
12
12
  # to create and we make sure the user is associated properly to the post
13
13
  after(:create) do |group, evaluator|
14
14
  evaluator.owner.add_role(:owner, group)
15
- User.where('id != ?', evaluator.owner.id).order("RANDOM()").limit(evaluator.member_count).find_each do |user|
16
- user.add_role(:member, group)
17
- end
15
+ # User.where('id != ?', evaluator.owner.id).order("RANDOM()").limit(evaluator.member_count).find_each do |user|
16
+ # user.add_role(:member, group)
17
+ # end
18
18
  end
19
19
  end
20
20
  end
@@ -7,14 +7,18 @@ FactoryGirl.define do
7
7
  }
8
8
  recipients_to_save { { 'users' =>
9
9
  User
10
- .where('id != ?', sender.id)
10
+ .where
11
+ .not(id: sender.id)
12
+ .where
13
+ .not(slug: 'silent-user')
11
14
  .order('RANDOM()')
12
15
  .limit([*1..5].sample)
13
16
  .collect { |x| x.slug }
14
17
  .join(', ')
15
18
  } }
16
19
  subject { Faker::Lorem.sentence }
17
- body { Faker::Lorem.paragraphs([*1..5].sample).join("\n\n") }
20
+ body { "<p>#{Faker::Lorem.paragraphs([*1..5].sample).join('</p><p>')}</p>" }
21
+
18
22
  transient do
19
23
  generate_attachment? { [*1..100].sample >= 80 }
20
24
  generate_response? { [*1..100].sample >= 50 }
@@ -53,7 +57,10 @@ FactoryGirl.define do
53
57
  sender {
54
58
  recipient_user_ids = recipients_to_save['users'].split(',').collect{ |x| User.friendly.find(x.strip).id }
55
59
  User
56
- .where('NOT (id IN (?))', recipient_user_ids )
60
+ .where
61
+ .not(id: recipient_user_ids )
62
+ .where
63
+ .not(slug: 'silent-user')
57
64
  .order('RANDOM()')
58
65
  .first
59
66
  }