Merge pull request #517 from sgmap/add_metadata_to_log

[FIX 433] Add Raven Metadata on the current user/gestionnaire/admin ...
This commit is contained in:
LeSim 2017-07-04 14:28:06 +02:00 committed by GitHub
commit e9491da5c5
2 changed files with 81 additions and 0 deletions

View file

@ -4,6 +4,7 @@ class ApplicationController < ActionController::Base
protect_from_forgery with: :exception protect_from_forgery with: :exception
before_action :check_browser before_action :check_browser
before_action :load_navbar_left_pannel_partial_url before_action :load_navbar_left_pannel_partial_url
before_action :set_raven_context
def default_url_options def default_url_options
return {protocol: 'https'} if Rails.env.staging? || Rails.env.production? return {protocol: 'https'} if Rails.env.staging? || Rails.env.production?
@ -40,4 +41,25 @@ class ApplicationController < ActionController::Base
redirect_to new_user_session_path redirect_to new_user_session_path
end end
end end
private
def set_raven_context
context = { ip_address: request.ip }
logged_models = [
current_user,
current_gestionnaire,
current_administrateur,
current_administration
].compact
context[:email] = logged_models.first&.email
context[:id] = logged_models.first&.id
class_names = logged_models.map { |model| model.class.name }
context[:classes] = class_names.any? ? class_names.join(', ') : 'Guest'
Raven.user_context(context)
end
end end

View file

@ -0,0 +1,59 @@
require 'spec_helper'
describe ApplicationController, type: :controller do
describe 'before_action: set_raven_context' do
it 'is present' do
before_actions = ApplicationController
._process_action_callbacks
.find_all{|process_action_callbacks| process_action_callbacks.kind == :before}
.map(&:filter)
expect(before_actions).to include(:set_raven_context)
end
end
describe 'set_raven_context' do
let(:current_user) { nil }
let(:current_gestionnaire) { nil }
let(:current_administrateur) { nil }
let(:current_administration) { nil }
before do
expect(@controller).to receive(:current_user).and_return(current_user)
expect(@controller).to receive(:current_gestionnaire).and_return(current_gestionnaire)
expect(@controller).to receive(:current_administrateur).and_return(current_administrateur)
expect(@controller).to receive(:current_administration).and_return(current_administration)
allow(Raven).to receive(:user_context)
@controller.send(:set_raven_context)
end
context 'when no one is logged in' do
it do
expect(Raven).to have_received(:user_context)
.with({ ip_address: '0.0.0.0', email: nil, id: nil, classes: 'Guest' })
end
end
context 'when a user is logged in' do
let(:current_user) { create(:user) }
it do
expect(Raven).to have_received(:user_context)
.with({ ip_address: '0.0.0.0', email: current_user.email, id: current_user.id, classes: 'User' })
end
end
context 'when someone is logged as a user, gestionnaire, administrateur and administration' do
let(:current_user) { create(:user) }
let(:current_gestionnaire) { create(:gestionnaire) }
let(:current_administrateur) { create(:administrateur) }
let(:current_administration) { create(:administration) }
it do
expect(Raven).to have_received(:user_context)
.with({ ip_address: '0.0.0.0', email: current_user.email, id: current_user.id, classes: 'User, Gestionnaire, Administrateur, Administration' })
end
end
end
end