Commit f53683e6 authored by Valery Sizov's avatar Valery Sizov

fix specs

parent 410d25c8
class Subscription < ActiveRecord::Base class Subscription < ActiveRecord::Base
belongs_to :user
belongs_to :subscribable, polymorphic: true belongs_to :subscribable, polymorphic: true
validates :user_id, validates :user_id,
uniqueness: { scope: [:subscribable_id, :subscribable_type]}, uniqueness: { scope: [:subscribable_id, :subscribable_type] },
presence: true presence: true
end end
...@@ -151,6 +151,10 @@ class NotificationService ...@@ -151,6 +151,10 @@ class NotificationService
# Reject mutes users # Reject mutes users
recipients = reject_muted_users(recipients, note.project) recipients = reject_muted_users(recipients, note.project)
recipients = add_subscribed_users(recipients, note.noteable)
recipients = reject_unsubscribed_users(recipients, note.noteable)
# Reject author # Reject author
recipients.delete(note.author) recipients.delete(note.author)
...@@ -315,12 +319,26 @@ class NotificationService ...@@ -315,12 +319,26 @@ class NotificationService
end end
def reject_unsubscribed_users(recipients, target) def reject_unsubscribed_users(recipients, target)
return recipients unless target.respond_to? :subscriptions
recipients.reject do |user| recipients.reject do |user|
subscription = target.subscriptions.find_by_user_id(user.id) subscription = target.subscriptions.find_by_user_id(user.id)
subscription && !subscription.subscribed subscription && !subscription.subscribed
end end
end end
def add_subscribed_users(recipients, target)
return recipients unless target.respond_to? :subscriptions
subscriptions = target.subscriptions
if subscriptions.any?
recipients + subscriptions.where("subscribed is true").map(&:user)
else
recipients
end
end
def new_resource_email(target, project, method) def new_resource_email(target, project, method)
recipients = build_recipients(target, project) recipients = build_recipients(target, project)
recipients.delete(target.author) recipients.delete(target.author)
...@@ -368,21 +386,12 @@ class NotificationService ...@@ -368,21 +386,12 @@ class NotificationService
recipients = reject_muted_users(recipients, project) recipients = reject_muted_users(recipients, project)
recipients = reject_mention_users(recipients, project) recipients = reject_mention_users(recipients, project)
recipients = add_subscribed_users(recipients, project) recipients = add_subscribed_users(recipients, target)
recipients = recipients.concat(project_watchers(project)).uniq recipients = recipients.concat(project_watchers(project)).uniq
recipients = reject_unsubscribed_users(recipients, target) recipients = reject_unsubscribed_users(recipients, target)
recipients recipients
end end
def add_subscribed_users(recipients, target)
subscriptions = target.subscriptions
if subscriptions.any?
recipients.merge(subscriptions.where("subscribed is true").map(&:user))
else
recipients
end
end
def mailer def mailer
Notify.delay Notify.delay
end end
......
...@@ -334,12 +334,12 @@ ActiveRecord::Schema.define(version: 20150313012111) do ...@@ -334,12 +334,12 @@ ActiveRecord::Schema.define(version: 20150313012111) do
t.string "import_url" t.string "import_url"
t.integer "visibility_level", default: 0, null: false t.integer "visibility_level", default: 0, null: false
t.boolean "archived", default: false, null: false t.boolean "archived", default: false, null: false
t.string "avatar"
t.string "import_status" t.string "import_status"
t.float "repository_size", default: 0.0 t.float "repository_size", default: 0.0
t.integer "star_count", default: 0, null: false t.integer "star_count", default: 0, null: false
t.string "import_type" t.string "import_type"
t.string "import_source" t.string "import_source"
t.string "avatar"
end end
add_index "projects", ["created_at", "id"], name: "index_projects_on_created_at_and_id", using: :btree add_index "projects", ["created_at", "id"], name: "index_projects_on_created_at_and_id", using: :btree
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment