Exclude projects pending delete from notifications
If the Sidekiq job fails for some reason, a project can be 'stuck' pending deletion. The project can't be viewed, so it shouldn't be available through the notification settings association as this will throw an exception when we try to show the link.
This commit is contained in:
parent
3c89a788c7
commit
ea25e0918b
|
@ -17,6 +17,7 @@ v 8.10.0 (unreleased)
|
|||
- Fix MR-auto-close text added to description. !4836
|
||||
- Fix issue, preventing users w/o push access to sort tags !5105 (redetection)
|
||||
- Add Spring EmojiOne updates.
|
||||
- Fix viewing notification settings when a project is pending deletion
|
||||
- Fix pagination when sorting by columns with lots of ties (like priority)
|
||||
- Updated project header design
|
||||
- Exclude email check from the standard health check
|
||||
|
|
|
@ -5,6 +5,7 @@ class NotificationSetting < ActiveRecord::Base
|
|||
|
||||
belongs_to :user
|
||||
belongs_to :source, polymorphic: true
|
||||
belongs_to :project, foreign_key: 'source_id'
|
||||
|
||||
validates :user, presence: true
|
||||
validates :level, presence: true
|
||||
|
@ -13,7 +14,13 @@ class NotificationSetting < ActiveRecord::Base
|
|||
allow_nil: true }
|
||||
|
||||
scope :for_groups, -> { where(source_type: 'Namespace') }
|
||||
scope :for_projects, -> { where(source_type: 'Project') }
|
||||
|
||||
# Exclude projects not included by the Project model's default scope (those that are
|
||||
# pending delete).
|
||||
#
|
||||
scope :for_projects, -> do
|
||||
includes(:project).references(:projects).where(source_type: 'Project').where.not(projects: { id: nil })
|
||||
end
|
||||
|
||||
EMAIL_EVENTS = [
|
||||
:new_note,
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
FactoryGirl.define do
|
||||
factory :notification_setting do
|
||||
source factory: :empty_project
|
||||
user
|
||||
level 3
|
||||
events []
|
||||
end
|
||||
end
|
|
@ -38,4 +38,21 @@ RSpec.describe NotificationSetting, type: :model do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#for_projects' do
|
||||
let(:user) { create(:user) }
|
||||
|
||||
before do
|
||||
1.upto(4) do |i|
|
||||
setting = create(:notification_setting, user: user)
|
||||
|
||||
setting.project.update_attributes(pending_delete: true) if i.even?
|
||||
end
|
||||
end
|
||||
|
||||
it 'excludes projects pending delete' do
|
||||
expect(user.notification_settings.for_projects).to all(have_attributes(project: an_instance_of(Project)))
|
||||
expect(user.notification_settings.for_projects.map(&:project)).to all(have_attributes(pending_delete: false))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue