Skip to content

Commit 40ad19d

Browse files
committed
Create clinic sessions per programme
This builds on top of the refactoring work done in #4526 which unlocked the ability for clinic sessions to work in a similar way to school sessions where there exists a session per group of programmes (HPV, Flu, and Doubles). This is more of a proof of concept for now, we don't know operationally whether teams are more likely to use clinics per programme, or clinics for all the programmes ("make every contact count").
1 parent b8f6c34 commit 40ad19d

File tree

3 files changed

+23
-47
lines changed

3 files changed

+23
-47
lines changed

app/lib/location_sessions_factory.rb

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,11 @@ def initialize(location, academic_year:)
88

99
def call
1010
ActiveRecord::Base.transaction do
11-
if location.generic_clinic?
12-
find_or_create_session!(programmes: location.programmes)
13-
else
14-
ProgrammeGrouper
15-
.call(location.programmes)
16-
.values
17-
.reject { |programmes| already_exists?(programmes:) }
18-
.map { |programmes| create_session!(programmes:) }
19-
end
11+
ProgrammeGrouper
12+
.call(location.programmes)
13+
.values
14+
.reject { |programmes| already_exists?(programmes:) }
15+
.map { |programmes| create_session!(programmes:) }
2016

2117
add_patients!
2218
end
@@ -40,20 +36,6 @@ def create_session!(programmes:)
4036
team.sessions.create!(academic_year:, location:, programmes:)
4137
end
4238

43-
def find_or_create_session!(programmes:)
44-
team
45-
.sessions
46-
.create_with(programmes:)
47-
.find_or_create_by!(academic_year:, location:)
48-
.tap do |session|
49-
programmes.each do |programme|
50-
unless programme.in?(session.programmes)
51-
session.programmes << programme
52-
end
53-
end
54-
end
55-
end
56-
5739
def add_patients!
5840
PatientLocation.import!(
5941
%i[patient_id location_id academic_year],

spec/lib/location_sessions_factory_spec.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,11 +182,17 @@
182182
let!(:location) { create(:generic_clinic, team:) }
183183

184184
it "creates missing sessions for each programme group" do
185-
expect { call }.to change(team.sessions, :count).by(1)
185+
expect { call }.to change(team.sessions, :count).by(3)
186186

187187
session =
188-
team.sessions.includes(:location, :programmes).find_by(location:)
189-
expect(session.programmes).to match_array(programmes)
188+
team
189+
.sessions
190+
.order(:created_at)
191+
.where(location:)
192+
.includes(:programmes)
193+
expect(session.first.programmes).to eq(flu_programmes)
194+
expect(session.second.programmes).to eq(hpv_programmes)
195+
expect(session.third.programmes).to eq(doubles_programmes)
190196
end
191197
end
192198

spec/lib/team_sessions_factory_spec.rb

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,6 @@
3030
expect(session.location).to eq(location)
3131
expect(session.programmes).to eq(programmes)
3232
end
33-
34-
context "if a session already exists" do
35-
let!(:session) do
36-
create(
37-
:session,
38-
:unscheduled,
39-
location:,
40-
team:,
41-
programmes: [create(:programme, :flu)]
42-
)
43-
end
44-
45-
it "adds the programmes to the existing session" do
46-
expect { call }.not_to change(team.sessions, :count)
47-
48-
expect(session.reload.programmes).to include(*programmes)
49-
end
50-
end
5133
end
5234

5335
context "with a community clinic" do
@@ -107,11 +89,17 @@
10789
let!(:location) { create(:generic_clinic, team:) }
10890

10991
it "creates missing unscheduled sessions for each programme group" do
110-
expect { call }.to change(team.sessions, :count).by(1)
92+
expect { call }.to change(team.sessions, :count).by(3)
11193

11294
session =
113-
team.sessions.includes(:location, :programmes).find_by(location:)
114-
expect(session.programmes).to match_array(programmes)
95+
team
96+
.sessions
97+
.order(:created_at)
98+
.where(location:)
99+
.includes(:programmes)
100+
expect(session.first.programmes).to eq(flu_programmes)
101+
expect(session.second.programmes).to eq(hpv_programmes)
102+
expect(session.third.programmes).to eq(doubles_programmes)
115103
end
116104
end
117105

0 commit comments

Comments
 (0)