message_train 0.1.7 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
  }