[FIX #433] Add Raven Metadata on the current user/gestionnaire/admin ...
This commit is contained in:
parent
351bb9afe8
commit
12c12953d6
2 changed files with 81 additions and 0 deletions
|
@ -4,6 +4,7 @@ class ApplicationController < ActionController::Base
|
|||
protect_from_forgery with: :exception
|
||||
before_action :check_browser
|
||||
before_action :load_navbar_left_pannel_partial_url
|
||||
before_action :set_raven_context
|
||||
|
||||
def default_url_options
|
||||
return {protocol: 'https'} if Rails.env.staging? || Rails.env.production?
|
||||
|
@ -40,4 +41,25 @@ class ApplicationController < ActionController::Base
|
|||
redirect_to new_user_session_path
|
||||
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
|
||||
|
|
59
spec/controllers/application_controller_spec.rb
Normal file
59
spec/controllers/application_controller_spec.rb
Normal 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
|
Loading…
Reference in a new issue