Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions app/controllers/audits_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@ def show

# When deleting an appointment, override the patient and doctor information
if @version.item_type == 'Appointment' && @version.event == 'destroy'
begin
object = JSON.parse(@version.object)
object['doctor_id'] = Doctor.find_by(id: object['doctor_id']).fullname
object['patient_id'] = Patient.find_by(id: object['patient_id']).fullname
object = JSON.parse(@version.object)
object['doctor_id'] = Doctor.find_by(id: object['doctor_id'])&.fullname ||
I18n.t('audits.deleted_item_with_id', id: object['doctor_id'])
object['patient_id'] = Patient.find_by(id: object['patient_id'])&.fullname ||
I18n.t('audits.deleted_item_with_id', id: object['patient_id'])

@version.object = object.to_json
end
@version.object = object.to_json
end

@whodunnit_user = @version.whodunnit.present? ? User.find_by(id: @version.whodunnit) : nil
Expand Down
5 changes: 2 additions & 3 deletions app/views/audits/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -143,12 +143,11 @@
</td>
</tr>
<% end %>
<% rescue => e %>
<% rescue %>
<tr>
<td colspan="3">
<div class="alert alert-warning">
<%= t(:error_parsing_changes) %>: <%= e.message %>
<br><small class="text-muted">Debug: <%= @version.object_changes.present? ? 'Data present' : 'No data' %></small>
<%= t(:error_parsing_changes) %>
</div>
</td>
</tr>
Expand Down
45 changes: 45 additions & 0 deletions test/functional/audits_controller_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# frozen_string_literal: true

require 'test_helper'

class AuditsControllerTest < ActionController::TestCase
setup do
@controller.session['user'] = users(:founder)
end

test 'should get index' do
get :index
assert_response :success
end

test 'show renders a destroyed appointment whose doctor and patient are gone' do
version = PaperTrail::Version.create!(
item_type: 'Appointment',
item_id: 987_654,
event: 'destroy',
whodunnit: users(:founder).id.to_s,
practice_id: users(:founder).practice_id,
object: appointments(:first_visit).attributes.merge('doctor_id' => 999_999, 'patient_id' => 999_999).to_json
)

get :show, params: { id: version.id }

assert_response :success
end

test 'show does not leak debug output when object changes cannot be parsed' do
version = PaperTrail::Version.create!(
item_type: 'Patient',
item_id: patients(:one).id,
event: 'update',
whodunnit: users(:founder).id.to_s,
practice_id: users(:founder).practice_id,
object_changes: '"corrupted"'
)

get :show, params: { id: version.id }

assert_response :success
assert_not_includes response.body, 'Debug:'
end
end
Loading