Skip to content

Commit

Permalink
Update scopes for selecting mail job recipients (#848)
Browse files Browse the repository at this point in the history
* update scopes for selecting mail job recipients

* uncomment continue training nudge mail job

* fix user_overview spec
  • Loading branch information
jack-coggin authored Sep 25, 2023
1 parent 7489298 commit 4a7a42c
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 27 deletions.
2 changes: 1 addition & 1 deletion app/models/ahoy/visit.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ class Ahoy::Visit < ApplicationRecord
belongs_to :user, optional: true

scope :month_old, -> { where(started_at: 4.weeks.ago.beginning_of_day..4.weeks.ago.end_of_day) }
scope :last_4_weeks, -> { where(started_at: 4.weeks.ago.end_of_day..Time.zone.now) }
scope :within_4_weeks, -> { where(started_at: 4.weeks.ago.end_of_day..Time.zone.now) }
scope :dashboard, -> { where(started_at: Time.zone.now.beginning_of_month..Time.zone.now) }
end
4 changes: 2 additions & 2 deletions app/models/data/user_overview.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def column_names
'Without Notes Percentage',
'Complete Registration Mail Recipients',
'Start Training Mail Recipients',
# 'Continue Training Mail Recipients',
'Continue Training Mail Recipients',
'New Module Mail Recipients',
]
end
Expand Down Expand Up @@ -58,7 +58,7 @@ def dashboard
without_notes_percentage: 1 - with_notes_percentage,
complete_registration_mail_recipients: CompleteRegistrationMailJob.recipients.count,
start_training_mail_recipients: StartTrainingMailJob.recipients.count,
# continue_training_mail_recipients: ContinueTrainingMailJob.recipients.count,
continue_training_mail_recipients: ContinueTrainingMailJob.recipients.count,
new_module_mail_recipients: NewModuleMailJob.recipients.count,
}]
end
Expand Down
19 changes: 15 additions & 4 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,26 @@ def self.dashboard_headers
scope :with_assessments, -> { joins(:user_assessments) }
scope :with_passing_assessments, -> { with_assessments.merge(UserAssessment.passes) }

# events
scope :with_events, -> { joins(:events) }
scope :with_module_start_events, -> { with_events.merge(Ahoy::Event.module_start) }
scope :with_module_complete_events, -> { with_events.merge(Ahoy::Event.module_complete) }
scope :completed_available_modules, -> { with_module_complete_events.group('users.id').having('count(ahoy_events.id) = ?', ModuleRelease.count) }
scope :started_training, -> { with_module_start_events.distinct }
scope :not_started_training, -> { where.not(id: with_module_start_events) }

# visits
scope :with_visits, -> { joins(:visits) }
scope :visits_this_month, -> { with_visits.merge(Ahoy::Visit.within_4_weeks).distinct }
scope :no_visits_this_month, -> { where.not(id: visits_this_month) }

# emails
scope :training_email_recipients, -> { where(training_emails: [true, nil]) }
scope :early_years_email_recipients, -> { where(early_years_emails: true) }
scope :start_training_mail_job_recipients, -> { order(:id).training_email_recipients.month_old_confirmation.registration_complete.not_started_training }
scope :complete_registration_mail_job_recipients, -> { order(:id).training_email_recipients.month_old_confirmation.registration_incomplete }
scope :continue_training_mail_job_recipients, -> { order(:id).training_email_recipients.select(&:continue_training_recipient?) }
scope :new_module_mail_job_recipients, -> { order(:id).training_email_recipients.select(&:completed_available_modules?) }
scope :continue_training_mail_job_recipients, -> { order(:id).training_email_recipients.no_visits_this_month.distinct(&:course_in_progress?) }
scope :new_module_mail_job_recipients, -> { order(:id).training_email_recipients.completed_available_modules.to_a }

# data
scope :dashboard, -> { not_closed }
Expand Down Expand Up @@ -361,8 +374,6 @@ def completed_available_modules?

# @return [Boolean]
def continue_training_recipient?
return false unless course_in_progress?

recent_visits = Ahoy::Visit.last_4_weeks
old_visits = Ahoy::Visit.month_old.reject { |visit| recent_visits.pluck(:user_id).include?(visit.user_id) }
old_visits.pluck(:user_id).include?(id)
Expand Down
2 changes: 1 addition & 1 deletion config/initializers/que.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
DashboardJob: { cron: Rails.application.config.dashboard_update_interval },
CompleteRegistrationMailJob: { cron: Rails.application.config.mail_job_interval },
StartTrainingMailJob: { cron: Rails.application.config.mail_job_interval },
# ContinueTrainingMailJob: { cron: Rails.application.config.mail_job_interval },
ContinueTrainingMailJob: { cron: Rails.application.config.mail_job_interval },
}
end

Expand Down
2 changes: 1 addition & 1 deletion spec/jobs/new_module_mail_job_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
let(:included) { [user] }

let(:excluded) do
create_list :user, 2, :registered, confirmed_at: 4.weeks.ago
create_list :user, 2, :registered, confirmed_at: 4.weeks.ago, module_time_to_completion: { alpha: 1 }
end

# Recipients must have completed all available modules - in this case, alpha and bravo
Expand Down
37 changes: 19 additions & 18 deletions spec/models/data/user_overview_spec.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
require 'rails_helper'

RSpec.describe Data::UserOverview do
include_context 'with progress'
let(:headers) do
[
'Registration Complete',
Expand All @@ -25,38 +26,38 @@
'Without Notes Percentage',
'Complete Registration Mail Recipients',
'Start Training Mail Recipients',
# 'Continue Training Mail Recipients',
'Continue Training Mail Recipients',
'New Module Mail Recipients',
]
end

let(:rows) do
[
{
registration_complete: 5,
registration_complete: 4,
registration_incomplete: 1,
reregistered: 0,
registered_since_private_beta: 6,
registered_since_private_beta: 5,
private_beta_only_registration_incomplete: 0,
private_beta_only_registration_complete: 0,
registration_events: 0,
private_beta_registration_events: 0,
public_beta_registration_events: 0,
total: 6,
total: 5,
locked_out: 0,
confirmed: 6,
confirmed: 5,
unconfirmed: 0,
user_defined_roles: 2,
started_learning: 4,
started_learning: 3,
not_started_learning: 2,
with_notes: 3,
with_notes_percentage: 0.5,
with_notes: 2,
with_notes_percentage: 0.4,
without_notes: 3,
without_notes_percentage: 0.5,
without_notes_percentage: 0.6,
complete_registration_mail_recipients: 1,
start_training_mail_recipients: 1,
# continue_training_mail_recipients: 0,
new_module_mail_recipients: 2,
continue_training_mail_recipients: 4,
new_module_mail_recipients: 1,
},
]
end
Expand All @@ -66,10 +67,6 @@
end

let(:user_2) do
create :user, :registered, module_time_to_completion: { alpha: 2, bravo: 3, charlie: 1 }
end

let(:user_3) do
create :user, :registered, module_time_to_completion: { alpha: 2, bravo: 0, charlie: 1 }
end

Expand All @@ -80,16 +77,20 @@
create(:module_release, release_id: release_1.id, module_position: 1, name: 'alpha')
create(:module_release, release_id: release_1.id, module_position: 2, name: 'bravo')
create(:module_release, release_id: release_1.id, module_position: 3, name: 'charlie')

# create notes for the `with_notes` and `without_notes` users
create(:note, user: user_1)
create(:note, user: user_2)
create(:note, user: user_3)
# A user who has completed all available modules and will receive the new module mail
create(:user, :registered, module_time_to_completion: { alpha: 2, charlie: 1, bravo: 3 })

# A user who confirmed their email 4 weeks ago will receive the complete registration mail
create(:user, :confirmed, confirmed_at: 4.weeks.ago)
# A registered user who will receive the start training mail
create(:user, :registered, confirmed_at: 4.weeks.ago)

# This will complete the alpha, bravo and charlie modules for `user`
complete_module(alpha, 1.minute)
complete_module(bravo, 1.minute)
complete_module(charlie, 1.minute)
end

it_behaves_like 'a data export model'
Expand Down

0 comments on commit 4a7a42c

Please sign in to comment.