Skip to content

Commit 7a2687f

Browse files
committed
Fix routing logic
1 parent 53aada7 commit 7a2687f

File tree

3 files changed

+29
-27
lines changed

3 files changed

+29
-27
lines changed

app/services/partner_routing_service.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ def vita_partner_from_zip_code
103103

104104
eligible_with_capacity = Organization.with_capacity.joins(:serviced_zip_codes).
105105
where(vita_partner_zip_codes: { zip_code: @zip_code })
106-
vita_partner = eligible_with_capacity.first
106+
107+
vita_partner = eligible_with_capacity.order(Arel.sql('RANDOM()')).first
107108

108109
if vita_partner.present?
109110
@routing_method = :zip_code

spec/forms/hub/zip_code_routing_form_spec.rb

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,6 @@
1111
}
1212
end
1313
describe "#valid?" do
14-
context "when the zip code is already in use" do
15-
context "when it belongs to current vita partner" do
16-
before do
17-
create :vita_partner_zip_code, vita_partner: vita_partner, zip_code: zip_code
18-
end
19-
20-
it "is invalid with appropriate message" do
21-
expect(subject.valid?).to eq false
22-
expect(subject.errors[:zip_code]).to include "94606 is already routed to this partner."
23-
end
24-
end
25-
26-
context "when it belongs to a different vita partner" do
27-
let(:other_vita_partner) { create :organization, name: "Oregano Org" }
28-
before do
29-
create :vita_partner_zip_code, vita_partner: other_vita_partner, zip_code: zip_code
30-
end
31-
32-
it "is invalid with appropriate message" do
33-
expect(subject.valid?).to eq false
34-
expect(subject.errors[:zip_code]).to include "94606 is already routed to <a href=/en/hub/organizations/#{other_vita_partner.id}/edit#zip-code-routing-form>Oregano Org</a>."
35-
end
36-
end
37-
38-
end
39-
4014
context "when the zip code is not valid" do
4115
let(:zip_code) { "A2345"}
4216
it "is invalid" do

spec/services/partner_routing_service_spec.rb

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,5 +359,32 @@
359359
end
360360
end
361361
end
362+
363+
context "when multiple Vita Partners serve the same zip code" do
364+
let(:vita_partner_2) { create :organization, name: "Partner 2" }
365+
before do
366+
create :vita_partner_zip_code, zip_code: "94606", vita_partner: vita_partner_2
367+
end
368+
369+
subject { PartnerRoutingService.new(zip_code: "94606") }
370+
371+
it "routes to one of the partners with capacity" do
372+
result = subject.determine_partner
373+
374+
expect([vita_partner, vita_partner_2]).to include(result)
375+
expect(subject.routing_method).to eq :zip_code
376+
end
377+
378+
context "when one partner is at capacity" do
379+
before do
380+
vita_partner.update(capacity_limit: 0)
381+
end
382+
383+
it "routes only to partners with capacity" do
384+
expect(subject.determine_partner).to eq vita_partner_2
385+
expect(subject.routing_method).to eq :zip_code
386+
end
387+
end
388+
end
362389
end
363390
end

0 commit comments

Comments
 (0)