From 01cc1752d5f29a597a7d8d3e370ea717d4fed6b0 Mon Sep 17 00:00:00 2001 From: kevinrobinson Date: Thu, 5 Sep 2019 11:19:27 -0400 Subject: [PATCH] Homerooms: Default grades list to active students only --- app/models/homeroom.rb | 10 +++++++--- spec/models/homeroom_spec.rb | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/app/models/homeroom.rb b/app/models/homeroom.rb index 3396da24e0..75cfb6087c 100644 --- a/app/models/homeroom.rb +++ b/app/models/homeroom.rb @@ -14,10 +14,14 @@ class Homeroom < ApplicationRecord validate :validate_school_matches_educator_school - # Query students on-demand rather than using deprecated `grade`. + # Query students on-demand rather than using deprecated `grade`, + # and filters by `active` unless told not to. + # # Returns sorted and compacted list. - def grades - GradeLevels.sort students.flat_map(&:grade).compact.uniq + def grades(options = {}) + should_include_inactive = options.fetch(:include_inactive_students, false) + relevant_students = should_include_inactive ? self.students : self.students.active + GradeLevels.sort relevant_students.flat_map(&:grade).compact.uniq end private diff --git a/spec/models/homeroom_spec.rb b/spec/models/homeroom_spec.rb index cf50b2558f..328ccfd4ff 100644 --- a/spec/models/homeroom_spec.rb +++ b/spec/models/homeroom_spec.rb @@ -38,6 +38,22 @@ expect(homeroom.grades).to eq ['TK', 'PK', '1', '9', '11'] end end + + it 'includes only active students' do + homeroom = FactoryBot.create(:homeroom).tap do |h| + h.students << FactoryBot.create(:student, missing_from_last_export: true, grade: 'PK') + h.students << FactoryBot.create(:student, grade: '1') + end + expect(homeroom.grades).to eq ['1'] + end + + it 'includes all students when include_inactive_students:true' do + homeroom = FactoryBot.create(:homeroom).tap do |h| + h.students << FactoryBot.create(:student, missing_from_last_export: true, grade: 'PK') + h.students << FactoryBot.create(:student, grade: '1') + end + expect(homeroom.grades(include_inactive_students: true)).to eq ['PK', '1'] + end end describe '#grade' do