replace observer

pull/6827/head
Jens Ulferts 8 years ago committed by Oliver Günther
parent 6111827114
commit 967678ad65
  1. 11
      app/models/document.rb
  2. 41
      app/models/document_observer.rb
  3. 4
      lib/open_project/documents/engine.rb
  4. 60
      spec/models/document_observer_spec.rb
  5. 17
      spec/models/document_spec.rb

@ -64,6 +64,7 @@ class Document < ActiveRecord::Base
} }
after_initialize :set_default_category after_initialize :set_default_category
after_create :notify_document_created
def visible?(user=User.current) def visible?(user=User.current)
!user.nil? && user.allowed_to?(:view_documents, project) !user.nil? && user.allowed_to?(:view_documents, project)
@ -83,4 +84,14 @@ class Document < ActiveRecord::Base
end end
@updated_on @updated_on
end end
private
def notify_document_created
return unless Setting.notified_events.include?('document_added')
recipients.each do |user|
DocumentsMailer.document_added(user, self).deliver_now
end
end
end end

@ -1,41 +0,0 @@
#-- encoding: UTF-8
#-- copyright
# OpenProject Documents Plugin
#
# Former OpenProject Core functionality extracted into a plugin.
#
# Copyright (C) 2009-2014 the OpenProject Foundation (OPF)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2013 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See doc/COPYRIGHT.rdoc for more details.
#++
class DocumentObserver < ActiveRecord::Observer
def after_create(document)
return unless Setting.notified_events.include?('document_added')
document.recipients.each do |user|
DocumentsMailer.document_added(user, document).deliver_now
end
end
end

@ -70,10 +70,6 @@ module OpenProject::Documents
require 'open_project/documents/hooks' require 'open_project/documents/hooks'
end end
initializer 'documents.register_observers' do |_app|
ActiveRecord::Base.observers.push :document_observer
end
config.to_prepare do config.to_prepare do
require_dependency 'document_category' require_dependency 'document_category'
require_dependency 'document_category_custom_field' require_dependency 'document_category_custom_field'

@ -1,60 +0,0 @@
#-- copyright
# OpenProject Documents Plugin
#
# Former OpenProject Core functionality extracted into a plugin.
#
# Copyright (C) 2009-2014 the OpenProject Foundation (OPF)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2013 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See doc/COPYRIGHT.rdoc for more details.
#++
require File.dirname(__FILE__) + '/../spec_helper'
describe DocumentObserver do
let(:user) { FactoryGirl.create(:user, firstname: 'Test', lastname: "User", mail: 'test@test.com') }
let(:project) { FactoryGirl.create(:project, name: "TestProject")}
let(:mail) do
mock = Object.new
allow(mock).to receive(:deliver_now)
mock
end
it "is triggered, when a document has been created" do
document = FactoryGirl.build(:document)
#observers are singletons, so any_instance exactly leaves out the singleton
expect(DocumentObserver.instance).to receive(:after_create)
document.save!
end
it "calls the DocumentsMailer, when a new document has been added" do
document = FactoryGirl.build(:document)
# make sure, that we have actually someone to notify
allow(document).to receive(:recipients).and_return([user])
# ... and notifies are actually sent out
Setting.notified_events = Setting.notified_events << 'document_added'
expect(DocumentsMailer).to receive(:document_added).and_return(mail)
document.save
end
end

@ -38,6 +38,12 @@ describe Document do
let(:user) { FactoryGirl.create(:user)} let(:user) { FactoryGirl.create(:user)}
let(:admin) { FactoryGirl.create(:admin)} let(:admin) { FactoryGirl.create(:admin)}
let(:mail) do
mock = Object.new
allow(mock).to receive(:deliver_now)
mock
end
context "validation" do context "validation" do
it { is_expected.to validate_presence_of :project} it { is_expected.to validate_presence_of :project}
@ -110,4 +116,15 @@ describe Document do
it { expect(document.event_datetime).to eq(now) } it { expect(document.event_datetime).to eq(now) }
end end
it "calls the DocumentsMailer, when a new document has been added" do
document = FactoryGirl.build(:document)
# make sure, that we have actually someone to notify
allow(document).to receive(:recipients).and_return([user])
# ... and notifies are actually sent out
Setting.notified_events = Setting.notified_events << 'document_added'
expect(DocumentsMailer).to receive(:document_added).and_return(mail)
document.save
end
end end

Loading…
Cancel
Save