mirror of
https://github.com/edcommonwealth/sqm-dashboards.git
synced 2026-03-08 15:08:15 -07:00
Inline the SurveyResponseAggregator
This commit is contained in:
parent
25578a896f
commit
4d5335491b
3 changed files with 11 additions and 94 deletions
|
|
@ -6,31 +6,34 @@ class DashboardController < ApplicationController
|
|||
@measure_graph_row_presenters = measure_ids
|
||||
.map { |measure_id| Measure.find_by_measure_id measure_id }
|
||||
.map(&method(:presenter_for_measure))
|
||||
.sort().reverse
|
||||
.sort
|
||||
.reverse
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def measure_ids
|
||||
Measure.all.map {|measure |
|
||||
measure.measure_id
|
||||
}
|
||||
Measure.all.map(&:measure_id)
|
||||
end
|
||||
|
||||
def presenter_for_measure(measure)
|
||||
score = SurveyItemResponse.for_measure(measure)
|
||||
.where(academic_year: academic_year, school: school)
|
||||
.average(:likert_score)
|
||||
|
||||
MeasureGraphRowPresenter.new(
|
||||
measure: measure,
|
||||
score: SurveyResponseAggregator.score(school: school, academic_year: academic_year, measure: measure)
|
||||
score: score
|
||||
)
|
||||
end
|
||||
|
||||
def school
|
||||
@school = schools.first if params[:school_id] == "first"
|
||||
@school = schools.first if params[:school_id] == "first"
|
||||
@school ||= School.find_by_slug school_slug
|
||||
end
|
||||
|
||||
def schools
|
||||
@schools = School.where(district: district).sort_by { | school| school.name }
|
||||
@schools = School.where(district: district).sort_by(&:name)
|
||||
end
|
||||
|
||||
def district
|
||||
|
|
@ -38,7 +41,7 @@ class DashboardController < ApplicationController
|
|||
end
|
||||
|
||||
def districts
|
||||
@districts = District.all.sort_by {|district| district.name}
|
||||
@districts = District.all.sort_by(&:name)
|
||||
end
|
||||
|
||||
def district_slug
|
||||
|
|
|
|||
|
|
@ -1,16 +0,0 @@
|
|||
# TODO inline me pls
|
||||
class SurveyResponseAggregator
|
||||
# Returns an average score for all SurveyItemResponses for the given AcademicYear, School, and Measure
|
||||
def self.score(academic_year:, school:, measure:)
|
||||
SurveyItemResponse.for_measure(measure)
|
||||
.where(academic_year: academic_year, school: school)
|
||||
.average(:likert_score)
|
||||
end
|
||||
|
||||
# Returns an array of SurveyItemResponses for the given AcademicYear, School, and Measure
|
||||
def self.find_responses_by_measure(academic_year:, school:, measure:)
|
||||
SurveyItemResponse
|
||||
.where(academic_year: academic_year, school: school)
|
||||
.joins(:survey_item).where('survey_items.measure_id': measure.id)
|
||||
end
|
||||
end
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe SurveyResponseAggregator do
|
||||
let(:category) { SqmCategory.create }
|
||||
let(:subcategory) { Subcategory.create sqm_category: category }
|
||||
|
||||
let(:ay_2020_21) { AcademicYear.find_by_range '2020-21' }
|
||||
let(:ay_2021_22) { AcademicYear.find_by_range '2021-22' }
|
||||
|
||||
let(:school_a) { School.create name: 'School A' }
|
||||
let(:school_b) { School.create name: 'School A' }
|
||||
|
||||
let(:measure_a) { Measure.create subcategory: subcategory, name: 'Measure A', measure_id: 'measure-a-id', watch_low_benchmark: 1.1, growth_low_benchmark: 2, approval_low_benchmark: 3, ideal_low_benchmark: 4 }
|
||||
let(:measure_b) { Measure.create subcategory: subcategory, name: 'Measure B', measure_id: 'measure-b-id', watch_low_benchmark: 1.1, growth_low_benchmark: 2, approval_low_benchmark: 3, ideal_low_benchmark: 4 }
|
||||
|
||||
let(:survey_item_1_for_measure_a) { SurveyItem.create measure: measure_a, survey_item_id: 'si1a' }
|
||||
let(:survey_item_2_for_measure_a) { SurveyItem.create measure: measure_a, survey_item_id: 'si2a' }
|
||||
|
||||
let(:survey_item_1_for_measure_b) { SurveyItem.create measure: measure_b, survey_item_id: 'si1b' }
|
||||
let(:survey_item_2_for_measure_b) { SurveyItem.create measure: measure_b, survey_item_id: 'si2b' }
|
||||
|
||||
before :each do
|
||||
SurveyItemResponse.create response_id: '01', academic_year: ay_2020_21, school: school_a, survey_item: survey_item_1_for_measure_a, likert_score: 1
|
||||
SurveyItemResponse.create response_id: '02', academic_year: ay_2020_21, school: school_a, survey_item: survey_item_2_for_measure_a, likert_score: 2
|
||||
|
||||
SurveyItemResponse.create response_id: '03', academic_year: ay_2020_21, school: school_a, survey_item: survey_item_1_for_measure_b, likert_score: 1
|
||||
SurveyItemResponse.create response_id: '04', academic_year: ay_2020_21, school: school_a, survey_item: survey_item_2_for_measure_b, likert_score: 3
|
||||
|
||||
SurveyItemResponse.create response_id: '05', academic_year: ay_2020_21, school: school_b, survey_item: survey_item_1_for_measure_a, likert_score: 1
|
||||
SurveyItemResponse.create response_id: '06', academic_year: ay_2020_21, school: school_b, survey_item: survey_item_2_for_measure_a, likert_score: 4
|
||||
|
||||
SurveyItemResponse.create response_id: '07', academic_year: ay_2020_21, school: school_b, survey_item: survey_item_1_for_measure_b, likert_score: 1
|
||||
SurveyItemResponse.create response_id: '08', academic_year: ay_2020_21, school: school_b, survey_item: survey_item_2_for_measure_b, likert_score: 5
|
||||
|
||||
SurveyItemResponse.create response_id: '09', academic_year: ay_2021_22, school: school_a, survey_item: survey_item_1_for_measure_a, likert_score: 2
|
||||
SurveyItemResponse.create response_id: '10', academic_year: ay_2021_22, school: school_a, survey_item: survey_item_2_for_measure_a, likert_score: 3
|
||||
|
||||
SurveyItemResponse.create response_id: '11', academic_year: ay_2021_22, school: school_a, survey_item: survey_item_1_for_measure_b, likert_score: 2
|
||||
SurveyItemResponse.create response_id: '12', academic_year: ay_2021_22, school: school_a, survey_item: survey_item_2_for_measure_b, likert_score: 4
|
||||
|
||||
SurveyItemResponse.create response_id: '13', academic_year: ay_2021_22, school: school_b, survey_item: survey_item_1_for_measure_a, likert_score: 2
|
||||
SurveyItemResponse.create response_id: '14', academic_year: ay_2021_22, school: school_b, survey_item: survey_item_2_for_measure_a, likert_score: 5
|
||||
|
||||
SurveyItemResponse.create response_id: '15', academic_year: ay_2021_22, school: school_b, survey_item: survey_item_1_for_measure_b, likert_score: 3
|
||||
SurveyItemResponse.create response_id: '16', academic_year: ay_2021_22, school: school_b, survey_item: survey_item_2_for_measure_b, likert_score: 5
|
||||
end
|
||||
|
||||
describe '.score' do
|
||||
it 'returns the average score of the survey responses for the given school, academic year, and measure' do
|
||||
expect(SurveyResponseAggregator.score(academic_year: ay_2020_21, school: school_a, measure: measure_a)).to eq 1.5
|
||||
expect(SurveyResponseAggregator.score(academic_year: ay_2020_21, school: school_a, measure: measure_b)).to eq 2.0
|
||||
|
||||
expect(SurveyResponseAggregator.score(academic_year: ay_2020_21, school: school_b, measure: measure_a)).to eq 2.5
|
||||
expect(SurveyResponseAggregator.score(academic_year: ay_2020_21, school: school_b, measure: measure_b)).to eq 3.0
|
||||
|
||||
expect(SurveyResponseAggregator.score(academic_year: ay_2021_22, school: school_a, measure: measure_a)).to eq 2.5
|
||||
expect(SurveyResponseAggregator.score(academic_year: ay_2021_22, school: school_a, measure: measure_b)).to eq 3.0
|
||||
|
||||
expect(SurveyResponseAggregator.score(academic_year: ay_2021_22, school: school_b, measure: measure_a)).to eq 3.5
|
||||
expect(SurveyResponseAggregator.score(academic_year: ay_2021_22, school: school_b, measure: measure_b)).to eq 4.0
|
||||
end
|
||||
end
|
||||
|
||||
describe '.find_responses_by_measure' do
|
||||
it 'returns all survey item responses corresponding to a year school and measure' do
|
||||
expect(SurveyResponseAggregator.find_responses_by_measure(academic_year: ay_2020_21, school: school_a, measure: measure_a).count).to eq 2
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue