Skip to content

Commit d7fab24

Browse files
authored
Merge pull request #6158 from rubyforgood/case-contacts-controller-n1
Improve speed of CaseContactsController
2 parents cd2d7d1 + fe54a5d commit d7fab24

File tree

9 files changed

+84
-21
lines changed

9 files changed

+84
-21
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,4 @@ npm-debug.log
6161

6262
# In case we want to keep something in the compiled assets directory
6363
!/app/assets/builds/.keep
64+
.aider*

.standard_todo.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -675,6 +675,8 @@ ignore:
675675
- RSpec/NamedSubject
676676
- spec/policies/learning_hour_policy_spec.rb:
677677
- RSpec/NamedSubject
678+
- spec/policies/nil_class_policy_spec.rb:
679+
- RSpec/NamedSubject
678680
- spec/policies/notification_policy_spec.rb:
679681
- RSpec/NamedSubject
680682
- spec/policies/other_duty_policy_spec.rb:
@@ -804,6 +806,7 @@ ignore:
804806
- spec/requests/case_contacts_spec.rb:
805807
- RSpec/MultipleMemoizedHelpers
806808
- RSpec/MultipleExpectations
809+
- RSpec/PendingWithoutReason
807810
- spec/requests/case_court_reports_spec.rb:
808811
- RSpec/ContextWording
809812
- RSpec/NestedGroups

app/controllers/case_contacts_controller.rb

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ def all_case_contacts
107107
:creator,
108108
:followups,
109109
:contact_types,
110-
contact_topic_answers: [:contact_topic]
110+
contact_topic_answers: [:contact_topic],
111+
casa_case: [:volunteers]
111112
)
112113
end
113114

@@ -116,25 +117,16 @@ def additional_expense_params
116117
end
117118

118119
def set_case_contact
119-
if current_organization.case_contacts.exists?(params[:id])
120-
@case_contact = authorize(current_organization.case_contacts.find(params[:id]))
121-
else
122-
redirect_to authenticated_user_root_path
123-
end
120+
@case_contact = authorize(current_organization.case_contacts.find_by(id: params[:id]))
121+
redirect_to authenticated_user_root_path unless @case_contact
124122
end
125123

126124
def build_draft_case_ids(params, casa_cases)
127125
# Use case(s) from params if present
128-
if params[:draft_case_ids].present?
129-
params[:draft_case_ids]
130-
elsif params.dig(:case_contact, :casa_case_id).present?
131-
casa_cases.where(id: params.dig(:case_contact, :casa_case_id)).pluck(:id)
132-
elsif casa_cases.count == 1
133-
# If there is only one case for user, select that case
134-
[casa_cases.first.id]
135-
else
136-
# Otherwise, let user select cases
137-
[]
138-
end
126+
return params[:draft_case_ids] if params[:draft_case_ids].present?
127+
return casa_cases.where(id: params.dig(:case_contact, :casa_case_id)).pluck(:id) if params.dig(:case_contact, :casa_case_id).present?
128+
return [casa_cases.first.id] if casa_cases.count == 1
129+
130+
[]
139131
end
140132
end

app/policies/nil_class_policy.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class NilClassPolicy < ApplicationPolicy
2+
def method_missing(*)
3+
false
4+
end
5+
6+
def respond_to_missing?(*)
7+
true
8+
end
9+
end

app/presenters/case_contact_presenter.rb

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@ def boolean_select_options
2525
private
2626

2727
def org_cases
28-
CasaOrg.includes(:casa_cases)
29-
.references(:casa_cases)
30-
.find_by(id: current_user.casa_org_id)
31-
.casa_cases
28+
CasaOrg.find(current_user.casa_org_id).casa_cases.active
3229
end
3330
end
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace :test do
2+
desc "Check for controller tests in spec/controllers and fail if any are found"
3+
task check_controller_tests: :environment do
4+
controller_tests = Dir.glob("spec/controllers/**/*_spec.rb")
5+
if controller_tests.any?
6+
puts "controller tests should be in spec/requests"
7+
exit 1
8+
else
9+
puts "No controller tests found in spec/controllers"
10+
end
11+
end
12+
end

spec/controllers/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Tests for controllers should be in spec/requests
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
require "rails_helper"
2+
3+
RSpec.describe NilClassPolicy do
4+
subject { described_class.new(nil, nil) }
5+
6+
it "doesn't permit index action" do
7+
expect(subject).not_to be_index
8+
end
9+
10+
it "doesn't permit show action" do
11+
expect(subject).not_to be_show
12+
end
13+
14+
it "doesn't permit create action" do
15+
expect(subject).not_to be_create
16+
end
17+
18+
it "doesn't permit new action" do
19+
expect(subject).not_to be_new
20+
end
21+
22+
it "doesn't permit update action" do
23+
expect(subject).not_to be_update
24+
end
25+
26+
it "doesn't permit edit action" do
27+
expect(subject).not_to be_edit
28+
end
29+
30+
it "doesn't permit destroy action" do
31+
expect(subject).not_to be_destroy
32+
end
33+
end

spec/requests/case_contacts_spec.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,4 +145,19 @@
145145
expect { request }.to change { case_contact.reload.deleted? }.from(true).to(false)
146146
end
147147
end
148+
149+
xdescribe "GET /leave" do
150+
subject(:request) do
151+
get leave_case_contact_path
152+
153+
response
154+
end
155+
156+
it { is_expected.to redirect_to(case_contacts_path) }
157+
158+
it "redirects back to referer or fallback location" do
159+
request
160+
expect(response).to redirect_to(case_contacts_path)
161+
end
162+
end
148163
end

0 commit comments

Comments
 (0)