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.
- checksums.yaml +4 -4
- data/.simplecov +8 -0
- data/.travis.yml +7 -2
- data/Gemfile +3 -0
- data/README.rdoc +37 -1
- data/Rakefile +5 -6
- data/VERSION +1 -1
- data/app/assets/javascripts/message_train.js +33 -0
- data/app/assets/stylesheets/message_train.scss +26 -0
- data/app/controllers/concerns/message_train_support.rb +127 -0
- data/app/controllers/message_train/application_controller.rb +1 -60
- data/app/controllers/message_train/boxes_controller.rb +0 -4
- data/app/controllers/message_train/messages_controller.rb +12 -6
- data/app/controllers/message_train/participants_controller.rb +1 -1
- data/app/controllers/message_train/unsubscribes_controller.rb +59 -0
- data/app/helpers/message_train/application_helper.rb +26 -0
- data/app/helpers/message_train/attachments_helper.rb +19 -0
- data/app/helpers/message_train/boxes_helper.rb +16 -11
- data/app/helpers/message_train/collectives_helper.rb +48 -0
- data/app/helpers/message_train/conversations_helper.rb +24 -16
- data/app/helpers/message_train/messages_helper.rb +14 -12
- data/app/mailers/message_train/application_mailer.rb +8 -0
- data/app/mailers/message_train/previews/receipt_mailer_preview.rb +10 -0
- data/app/mailers/message_train/receipt_mailer.rb +17 -0
- data/app/models/message_train/attachment.rb +28 -10
- data/app/models/message_train/box.rb +114 -83
- data/app/models/message_train/conversation.rb +48 -39
- data/app/models/message_train/ignore.rb +2 -6
- data/app/models/message_train/message.rb +40 -24
- data/app/models/message_train/receipt.rb +20 -10
- data/app/models/message_train/unsubscribe.rb +7 -0
- data/app/views/layouts/mailer.html.haml +6 -0
- data/app/views/message_train/application/_attachment_fields.html.haml +7 -0
- data/app/views/message_train/application/_attachment_link.html.haml +4 -0
- data/app/views/message_train/application/_widget.html.haml +6 -0
- data/app/views/message_train/boxes/_dropdown_list.html.haml +1 -2
- data/app/views/message_train/boxes/_list_item.html.haml +2 -2
- data/app/views/message_train/boxes/_widget.html.haml +4 -1
- data/app/views/message_train/boxes/show.html.haml +12 -4
- data/app/views/message_train/collectives/_dropdown_list.html.haml +6 -0
- data/app/views/message_train/collectives/_list_item.html.haml +5 -0
- data/app/views/message_train/collectives/_widget.html.haml +7 -0
- data/app/views/message_train/conversations/_conversation.html.haml +22 -7
- data/app/views/message_train/conversations/_deleted_toggle.html.haml +1 -1
- data/app/views/message_train/conversations/_ignored_toggle.html.haml +3 -3
- data/app/views/message_train/conversations/_read_toggle.html.haml +3 -3
- data/app/views/message_train/conversations/_toggle.html.haml +4 -1
- data/app/views/message_train/conversations/_trashed_toggle.html.haml +3 -3
- data/app/views/message_train/conversations/show.html.haml +4 -3
- data/app/views/message_train/messages/_deleted_toggle.html.haml +1 -1
- data/app/views/message_train/messages/_form.html.haml +22 -7
- data/app/views/message_train/messages/_message.html.haml +14 -4
- data/app/views/message_train/messages/_read_toggle.html.haml +1 -1
- data/app/views/message_train/messages/_trashed_toggle.html.haml +1 -1
- data/app/views/message_train/messages/edit.html.haml +1 -1
- data/app/views/message_train/messages/new.html.haml +4 -1
- data/app/views/message_train/participants/_field.html.haml +1 -1
- data/app/views/message_train/participants/_prefilled_field.html.haml +4 -0
- data/app/views/message_train/receipt_mailer/notification_email.html.haml +13 -0
- data/app/views/message_train/unsubscribes/index.html.haml +10 -0
- data/config/environment.rb +1 -0
- data/config/locales/en.yml +49 -7
- data/config/routes.rb +10 -2
- data/db/migrate/20150901183458_add_received_through_to_message_train_receipts.rb +6 -0
- data/db/migrate/20151004184347_add_unique_index_to_receipts.rb +5 -0
- data/db/migrate/20151124000820_create_message_train_unsubscribes.rb +14 -0
- data/lib/generators/message_train/install/install_generator.rb +8 -2
- data/lib/generators/message_train/install/templates/initializer.rb +5 -1
- data/lib/message_train/configuration.rb +11 -1
- data/lib/message_train/engine.rb +1 -0
- data/lib/message_train/mixin.rb +206 -21
- data/message_train.gemspec +66 -13
- data/spec/controllers/message_train/boxes_controller_spec.rb +10 -3
- data/spec/controllers/message_train/concerns_spec.rb +40 -0
- data/spec/controllers/message_train/conversations_controller_spec.rb +3 -3
- data/spec/controllers/message_train/messages_controller_spec.rb +60 -27
- data/spec/controllers/message_train/participants_controller_spec.rb +41 -6
- data/spec/controllers/message_train/unsubscribes_controller_spec.rb +56 -0
- data/spec/dummy/app/assets/files/message_train/attachments/{1917-Boys_Race_Above-Wiki.jpg → image-sample.jpg} +0 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/models/group.rb +16 -1
- data/spec/dummy/app/models/role.rb +22 -0
- data/spec/dummy/app/models/user.rb +1 -1
- data/spec/dummy/app/views/layouts/_top_navigation.html.haml +4 -2
- data/spec/dummy/app/views/layouts/application.html.haml +2 -3
- data/spec/dummy/app/views/pages/index.html.haml +4 -0
- data/spec/dummy/config/application.rb +6 -0
- data/spec/dummy/config/environments/development.rb +1 -0
- data/spec/dummy/config/environments/test.rb +1 -0
- data/spec/dummy/config/initializers/high_voltage.rb +3 -0
- data/spec/dummy/config/initializers/message_train.rb +6 -1
- data/spec/dummy/config/initializers/paperclip.rb +2 -2
- data/spec/dummy/config/routes.rb +2 -2
- data/spec/dummy/config/settings.yml +9 -0
- data/spec/dummy/db/migrate/{20150724142846_create_message_train_conversations.night_train.rb → 20150901183629_create_message_train_conversations.message_train.rb} +0 -0
- data/spec/dummy/db/migrate/{20150724142847_create_message_train_messages.night_train.rb → 20150901183630_create_message_train_messages.message_train.rb} +0 -0
- data/spec/dummy/db/migrate/{20150724142848_create_message_train_attachments.night_train.rb → 20150901183631_create_message_train_attachments.message_train.rb} +0 -0
- data/spec/dummy/db/migrate/{20150724142849_create_message_train_receipts.night_train.rb → 20150901183632_create_message_train_receipts.message_train.rb} +0 -0
- data/spec/dummy/db/migrate/{20150724142850_create_message_train_ignores.night_train.rb → 20150901183633_create_message_train_ignores.message_train.rb} +0 -0
- data/spec/dummy/db/migrate/20150901183634_add_received_through_to_message_train_receipts.message_train.rb +7 -0
- data/spec/dummy/db/migrate/20151004184519_add_unique_index_to_receipts.message_train.rb +6 -0
- data/spec/dummy/db/migrate/20151124001417_create_message_train_unsubscribes.message_train.rb +15 -0
- data/spec/dummy/db/schema.rb +24 -7
- data/spec/dummy/db/seeds/conversations.seeds.rb +92 -3
- data/spec/dummy/db/seeds/groups.seeds.rb +27 -0
- data/spec/dummy/db/seeds/test/attachments.seeds.rb +4 -0
- data/spec/dummy/db/seeds/unsubscribes.seeds.rb +12 -0
- data/spec/dummy/db/seeds/users.seeds.rb +27 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/factories/group.rb +4 -4
- data/spec/factories/message.rb +10 -3
- data/spec/features/boxes_spec.rb +160 -33
- data/spec/features/conversations_spec.rb +11 -4
- data/spec/features/messages_spec.rb +20 -6
- data/spec/features/unsubscribes_spec.rb +38 -0
- data/spec/helpers/message_train/application_helper_spec.rb +60 -0
- data/spec/helpers/message_train/attachment_helper_spec.rb +35 -0
- data/spec/helpers/message_train/boxes_helper_spec.rb +11 -5
- data/spec/helpers/message_train/collectives_helper_spec.rb +76 -0
- data/spec/helpers/message_train/conversations_helper_spec.rb +295 -0
- data/spec/helpers/message_train/messages_helper_spec.rb +217 -0
- data/spec/models/group_spec.rb +112 -2
- data/spec/models/message_train/attachment_spec.rb +44 -1
- data/spec/models/message_train/box_spec.rb +306 -51
- data/spec/models/message_train/conversation_spec.rb +84 -6
- data/spec/models/message_train/ignore_spec.rb +0 -4
- data/spec/models/message_train/message_spec.rb +49 -12
- data/spec/models/message_train/receipt_spec.rb +44 -8
- data/spec/models/message_train/unsubscribe_spec.rb +16 -0
- data/spec/models/role_spec.rb +125 -0
- data/spec/models/user_spec.rb +155 -26
- data/spec/rails_helper.rb +8 -1
- data/spec/support/attachments.rb +4 -0
- data/spec/support/controller_behaviors.rb +28 -0
- data/spec/support/conversations.rb +13 -0
- data/spec/support/groups.rb +3 -0
- data/spec/support/loaded_site.rb +3 -0
- data/spec/support/messages.rb +23 -0
- data/spec/support/roles.rb +4 -0
- data/spec/support/users.rb +6 -0
- data/spec/support/wysihtml5_helper.rb +8 -0
- metadata +99 -12
- data/spec/dummy/app/assets/files/message_train/attachments/Haie_rci.svg +0 -1714
- data/spec/dummy/public/capybara.html +0 -193
@@ -3,11 +3,18 @@ class Group < ActiveRecord::Base
|
|
3
3
|
resourcify
|
4
4
|
|
5
5
|
# MessageTrain Gem
|
6
|
-
message_train only: :recipient,
|
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
|
-
=
|
5
|
-
|
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
|
-
|
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
|
@@ -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
|
@@ -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
|
-
|
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'
|
data/spec/dummy/config/routes.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -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
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -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:
|
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",
|
73
|
-
t.boolean "marked_trash",
|
74
|
-
t.boolean "marked_deleted",
|
75
|
-
t.boolean "sender",
|
76
|
-
t.datetime "created_at",
|
77
|
-
t.datetime "updated_at",
|
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
|
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:
|
84
|
-
recipients_to_save: { 'users' =>
|
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)
|
data/spec/dummy/db/test.sqlite3
CHANGED
Binary file
|
data/spec/factories/group.rb
CHANGED
@@ -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
|
-
|
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
|
data/spec/factories/message.rb
CHANGED
@@ -7,14 +7,18 @@ FactoryGirl.define do
|
|
7
7
|
}
|
8
8
|
recipients_to_save { { 'users' =>
|
9
9
|
User
|
10
|
-
.where
|
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("
|
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
|
60
|
+
.where
|
61
|
+
.not(id: recipient_user_ids )
|
62
|
+
.where
|
63
|
+
.not(slug: 'silent-user')
|
57
64
|
.order('RANDOM()')
|
58
65
|
.first
|
59
66
|
}
|