mirror of
https://github.com/edcommonwealth/sqm-dashboards.git
synced 2026-03-07 21:48:16 -08:00
Take sufficient data requirements into account when calculating score for subcategory
This commit is contained in:
parent
26dbabafd2
commit
f3c632ea2a
2 changed files with 35 additions and 4 deletions
|
|
@ -9,13 +9,15 @@ class SurveyItemResponse < ActiveRecord::Base
|
|||
scope :for_measure, ->(measure) { joins(:survey_item).where('survey_items.measure_id': measure.id) }
|
||||
|
||||
def self.score_for_subcategory(subcategory:, school:, academic_year:)
|
||||
SurveyItemResponse.for_measures(subcategory.measures)
|
||||
measures = subcategory.measures.select { |measure| sufficient_data?(measure: measure, school: school, academic_year: academic_year) }
|
||||
|
||||
SurveyItemResponse.for_measures(measures)
|
||||
.where(academic_year: academic_year, school: school)
|
||||
.average(:likert_score)
|
||||
end
|
||||
|
||||
def self.score_for_measure(measure:, school:, academic_year:)
|
||||
return nil unless SurveyItemResponse.sufficient_data?(measure: measure, school: school, academic_year: academic_year)
|
||||
return nil unless sufficient_data?(measure: measure, school: school, academic_year: academic_year)
|
||||
|
||||
SurveyItemResponse.for_measure(measure)
|
||||
.where(academic_year: academic_year, school: school)
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe SurveyItemResponse, type: :model do
|
||||
let(:school) { create(:school) }
|
||||
let(:ay) { create(:academic_year) }
|
||||
|
||||
describe '.score_for_measure' do
|
||||
let(:measure) { create(:measure) }
|
||||
let(:school) { create(:school) }
|
||||
let(:ay) { create(:academic_year) }
|
||||
|
||||
context 'when the measure includes only teacher data' do
|
||||
let(:teacher_survey_item_1) { create(:survey_item, survey_item_id: 't-question-1', measure: measure) }
|
||||
|
|
@ -229,4 +230,32 @@ describe SurveyItemResponse, type: :model do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '.score_for_subcategory' do
|
||||
let(:subcategory) { create(:subcategory) }
|
||||
let(:sufficient_measure_1) { create(:measure, subcategory: subcategory) }
|
||||
let(:sufficient_measure_2) { create(:measure, subcategory: subcategory) }
|
||||
let(:insufficient_measure) { create(:measure, subcategory: subcategory) }
|
||||
let(:sufficient_teacher_survey_item) { create(:survey_item, survey_item_id: 't-question-1', measure: sufficient_measure_1) }
|
||||
let(:insufficient_teacher_survey_item) { create(:survey_item, survey_item_id: 't-question-2', measure: insufficient_measure) }
|
||||
let(:sufficient_student_survey_item) { create(:survey_item, survey_item_id: 's-question-1', measure: sufficient_measure_2) }
|
||||
let(:insufficient_student_survey_item) { create(:survey_item, survey_item_id: 's-question-2', measure: insufficient_measure) }
|
||||
|
||||
before :each do
|
||||
[SurveyItemResponse::TEACHER_RESPONSE_THRESHOLD, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD].max.times do
|
||||
create(:survey_item_response, survey_item: sufficient_teacher_survey_item, academic_year: ay, school: school, likert_score: 1)
|
||||
create(:survey_item_response, survey_item: sufficient_student_survey_item, academic_year: ay, school: school, likert_score: 4)
|
||||
end
|
||||
(SurveyItemResponse::TEACHER_RESPONSE_THRESHOLD - 1).times do
|
||||
create(:survey_item_response, survey_item: insufficient_teacher_survey_item, academic_year: ay, school: school, likert_score: 1)
|
||||
end
|
||||
(SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD - 1).times do
|
||||
create(:survey_item_response, survey_item: insufficient_student_survey_item, academic_year: ay, school: school, likert_score: 1)
|
||||
end
|
||||
end
|
||||
|
||||
it 'returns the average score of all survey item responses for measures meeting their respective thresholds' do
|
||||
expect(SurveyItemResponse.score_for_subcategory(subcategory: subcategory, school: school, academic_year: ay)).to eq 2.5
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue