feat: Add overall response rate

mciea-main
rebuilt 3 years ago
parent 0ceaad3a2b
commit 0a5500ecc9

@ -67,6 +67,7 @@ group :development, :test do
gem 'parallel_tests'
gem 'rack-mini-profiler'
gem 'rspec-rails', '~> 5.1.0'
gem 'debug', platforms: %i[mri mingw x64_mingw]
end
group :development do

@ -117,6 +117,9 @@ GEM
database_cleaner-core (~> 2.0.0)
database_cleaner-core (2.0.1)
date (3.3.3)
debug (1.8.0)
irb (>= 1.5.0)
reline (>= 0.3.1)
devise (4.9.2)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
@ -189,6 +192,8 @@ GEM
i18n (1.14.1)
concurrent-ruby (~> 1.0)
io-console (0.6.0)
irb (1.7.4)
reline (>= 0.3.6)
jaro_winkler (1.5.6)
jbuilder (2.11.5)
actionview (>= 5.0.0)
@ -457,6 +462,7 @@ DEPENDENCIES
cuprite
cypress-rails
database_cleaner
debug
devise
dotenv-rails
ed25519

@ -89,6 +89,26 @@
width: 20px;
}
.overall-response-rate-row {
width: 55%;
display: flex;
flex-direction: row;
justify-content: space-between;
margin-top: -23px;
}
.overall-response-rate-container {
padding: 0.4em 0.7em;
width: 48%;
display: flex;
justify-content: space-between;
align-items: center;
color: $gray-1;
@extend .bg-color-gray-3;
@extend .border-radius-8;
@extend .font-size-14
}
@media only screen and (min-width: 768px){
.measure-row-label {
width: 170px;

@ -7,6 +7,10 @@ class OverviewController < SqmApplicationController
def index
@variance_chart_row_presenters = measures.map(&method(:presenter_for_measure))
@category_presenters = Category.sorted.map { |category| CategoryPresenter.new(category:) }
@student_response_rate_presenter = ResponseRatePresenter.new(focus: :student, school: @school,
academic_year: @academic_year)
@teacher_response_rate_presenter = ResponseRatePresenter.new(focus: :teacher, school: @school,
academic_year: @academic_year)
end
private

@ -0,0 +1,45 @@
class ResponseRatePresenter
attr_reader :focus, :academic_year, :school, :survey_items
def initialize(focus:, academic_year:, school:)
@focus = focus
@academic_year = academic_year
@school = school
@survey_items = SurveyItem.student_survey_items if focus == :student
@survey_items = SurveyItem.teacher_survey_items if focus == :teacher
end
def date
SurveyItemResponse.where(survey_item: survey_items, school:).order(updated_at: :DESC).first&.updated_at || Date.new
end
def percentage
cap_at_100(actual_count.to_f / respondents_count.to_f * 100).round
end
def color
# Problem: the color (either $gold or $purple) is determined by the scss variable, but the
# percentage is decided by the presenter. Therefore the class style must be generated
# within this file and not the scss file.
# TODO: Fix this.
percentage > 75 ? '#49416D' : '#FFC857'
end
private
def cap_at_100(value)
value > 100 ? 100 : value
end
def actual_count
SurveyItemResponse.where(school:, academic_year:,
survey_item: survey_items).select(:response_id).distinct.count
end
def respondents_count
respondents = Respondent.find_by(school:, academic_year:)
count = respondents.total_students if focus == :student
count = respondents.total_teachers if focus == :teacher
count
end
end

@ -0,0 +1,8 @@
<div class="overall-response-rate-container">
<div>Response Rates as of <%= response_rate_presenter.date.to_date.strftime("%m/%d/%y") %> </div>
<div style="display: flex; justify-content:space-between; width: 100px;">
<div><%= response_rate_presenter.focus.capitalize %> </div>
<%= render partial: "response_rate_graphic", locals: {response_rate_presenter: response_rate_presenter}, cached: true %>
<div><%= response_rate_presenter.percentage %>% </div>
</div>
</div>

@ -0,0 +1,35 @@
<style>
/*
For some reason, none of the sizing in the pie class works, and it always
fills 100% of the containing frame, so the size has to be dictated by .prog
*/
.prog {
width: 16px;
height: 16px;
position: relative;
border: 1px solid black;
border-radius: 50%;
margin-top: 0.2em;
}
.pie {
aspect-ratio: 1;
display: inline-grid;
place-content: center;
margin: 5px;
font-size: 25px;
font-weight: bold;
font-family: sans-serif;
}
#response-rate-pie-<%= response_rate_presenter.focus %>:before{
content: "";
position: absolute;
border-radius: 50%;
inset: 0;
background: conic-gradient(<%= response_rate_presenter.color %> calc(<%= response_rate_presenter.percentage %>*1%),#0000 0);
}
</style>
<div class="prog">
<div id="response-rate-pie-<%= response_rate_presenter.focus %>" class="pie"></div>
</div>

@ -81,6 +81,12 @@
</div>
</div>
<%= render partial: "quality_framework_indicators", locals: { category_presenters: @category_presenters }, cached: true %>
<div class="overall-response-rate-row">
<%= render partial: "response_rate", locals: {response_rate_presenter: @student_response_rate_presenter}, cached: true %>
<%= render partial: "response_rate", locals: {response_rate_presenter: @teacher_response_rate_presenter}, cached: true %>
</div>
</div>
<div class="card">
<h2 class="sub-header-2 mb-4">Distance From Benchmark</h2>

@ -4,6 +4,6 @@ Start Date,End Date,Response Type,IP Address,Progress,Duration (in seconds),Fini
2021-03-31 9:50:19,2021-03-31 9:59:01,0,108.7.17.250,100,522,1,2021-03-31T09:59:02,student_survey_response_3,345678,,,,,42.53340149,-70.96530151,anonymous,EN,3,2,1500505,12,4,108,3300,7,1,,,,,,,,,,,,,,2,4,2,1,4,3,3,,,,,3,3,3,3,,,,,NA,,,,,,,,,3,2,3,3,2,1,3,3,4,1,3,3,4,4,2,4,3,3,4,3,3,3,4,3,3,3,3,3,,,,,,,,,,3,4,4,2,3,3,1,,3,,EN,Math teacher,,,,6,888,8,2
2021-03-31 9:50:09,2021-03-31 10:00:16,0,67.186.188.168,100,607,1,2021-03-31T10:00:17,student_survey_response_4,456789,,,,,42.63510132,-71.30139923,anonymous,EN,3,2,1500505,12,18,108,2064,7,1,,2,2,1,,,,,,,,,,,,,,,,,,,,,,,,,3,5,3,3,,,,,,,,,,4,4,3,4,5,1,,1,5,1,3,2,4,4,1,2,1,3,2,3,3,3,4,2,5,3,4,5,5,3,3,4,3,,,,,4,4,4,4,3,5,2,,2,,EN,,,,English teacher,7,888,8,3
2021-03-31 9:51:39,2021-03-31 10:01:36,0,73.47.153.77,100,596,1,2021-03-31T10:01:36,student_survey_response_5,567890,,,,,42.65820313,-71.30580139,anonymous,EN,3,2,1500505,6,15,109,3710,7,1,,2,2,2,,,,,,,,,,3,3,4,3,3,3,3,4,3,4,3,4,4,5,4,3,4,3,5,2,2,3,,,,,,,,,,,,1,,2,5,1,3,3,2,4,3,5,4,,,,,,,,,,,,5,4,3,4,4,4,4,4,4,,,,,,,2,,2,,EN,,,Social Studies teacher,,"1,2,3,4,5,8,6,7",888,7,4
2021-03-31 9:51:39,2021-03-31 10:01:36,0,73.47.153.77,100,596,1,2021-03-31T10:01:36,student_survey_response_6,,,,,,42.65820313,-71.30580139,anonymous,EN,3,2,1500505,6,15,109,3710,7,1,,2,2,2,,,,,,,,,,3,3,4,3,3,3,3,4,3,4,3,4,4,5,4,3,4,3,5,2,2,3,,,,,,,,,,,,1,,2,5,1,3,3,2,4,3,5,4,,,,,,,,,,,,5,4,3,4,4,4,4,4,4,,,,,,,2,,2,,EN,,,Social Studies teacher,,"1,2,3,4,5,8",888,3,NA
2021-03-31 9:51:39,2021-03-31 10:01:36,0,73.47.153.77,100,596,1,2021-03-31T10:01:36,student_survey_response_7,,,,,,42.65820313,-71.30580139,anonymous,EN,3,2,1500505,6,15,109,3710,7,1,,2,2,2,,,,,,,,,,3,3,4,3,3,3,3,4,3,4,3,4,4,5,4,3,4,3,5,2,2,3,,,,,,,,,,,,1,,2,5,1,3,3,2,4,3,5,4,,,,,,,,,,,,5,4,3,4,4,4,4,4,4,,,,,,,2,,2,,EN,,,Social Studies teacher,,,,4,
2021-03-31 9:51:39,2021-03-31 10:01:36,0,73.47.153.77,100,596,1,2021-03-31T10:01:37,student_survey_response_6,,,,,,42.65820313,-71.30580139,anonymous,EN,3,2,1500505,6,15,109,3710,7,1,,2,2,2,,,,,,,,,,3,3,4,3,3,3,3,4,3,4,3,4,4,5,4,3,4,3,5,2,2,3,,,,,,,,,,,,1,,2,5,1,3,3,2,4,3,5,4,,,,,,,,,,,,5,4,3,4,4,4,4,4,4,,,,,,,2,,2,,EN,,,Social Studies teacher,,"1,2,3,4,5,8",888,3,NA
2021-03-31 9:51:39,2021-03-31 10:01:36,0,73.47.153.77,100,596,1,2021-03-31T10:01:38,student_survey_response_7,,,,,,42.65820313,-71.30580139,anonymous,EN,3,2,1500505,6,15,109,3710,7,1,,2,2,2,,,,,,,,,,3,3,4,3,3,3,3,4,3,4,3,4,4,5,4,3,4,3,5,2,2,3,,,,,,,,,,,,1,,2,5,1,3,3,2,4,3,5,4,,,,,,,,,,,,5,4,3,4,4,4,4,4,4,,,,,,,2,,2,,EN,,,Social Studies teacher,,,,4,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"1,2,3,4,5,8",,,

1 Start Date End Date Response Type IP Address Progress Duration (in seconds) Finished RecordedDate ResponseId LASID Recipient Last Name Recipient First Name Recipient Email External Data Reference Location Latitude Location Longitude Distribution Channel User Language district school DESE ID #N/A #N/A #N/A #N/A #N/A #N/A #N/A s-emsa-q1 s-emsa-q2 s-emsa-q3 s-tint-q1 s-tint-q2 #N/A s-tint-q4 s-tint-q5 s-acpr-q1 s-acpr-q2 s-acpr-q3 s-acpr-q4 #N/A #N/A s-cure-q3 s-cure-q4 #N/A s-sten-q2 s-sten-q3 s-sper-q1 s-sper-q2 s-sper-q3 s-sper-q4 s-civp-q1 s-civp-q2 s-civp-q3 s-civp-q4 s-grmi-q1 #N/A #N/A s-grmi-q4 s-appa-q1 s-appa-q2 #N/A s-peff-q1 s-peff-q2 s-peff-q3 s-peff-q4 s-peff-q5 s-peff-q6 s-sbel-q1 s-sbel-q2 s-sbel-q3 s-sbel-q4 s-sbel-q5 s-phys-q1 s-phys-q1-1 s-phys-q2 s-phys-q3 s-phys-q4 s-vale-q1 s-vale-q2 s-vale-q3 s-vale-q4 s-acst-q1 s-acst-q2 s-acst-q3 s-acst-q4 s-acst-q5 s-grit-q1 s-grit-q2 s-grit-q3 s-grit-q4 #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A race What is your race/ethnicity?(Please select all that apply) - Selected Choice grade gender
4 2021-03-31 9:50:19 2021-03-31 9:59:01 0 108.7.17.250 100 522 1 2021-03-31T09:59:02 student_survey_response_3 345678 42.53340149 -70.96530151 anonymous EN 3 2 1500505 12 4 108 3300 7 1 2 4 2 1 4 3 3 3 3 3 3 NA 3 2 3 3 2 1 3 3 4 1 3 3 4 4 2 4 3 3 4 3 3 3 4 3 3 3 3 3 3 4 4 2 3 3 1 3 EN Math teacher 6 888 8 2
5 2021-03-31 9:50:09 2021-03-31 10:00:16 0 67.186.188.168 100 607 1 2021-03-31T10:00:17 student_survey_response_4 456789 42.63510132 -71.30139923 anonymous EN 3 2 1500505 12 18 108 2064 7 1 2 2 1 3 5 3 3 4 4 3 4 5 1 1 5 1 3 2 4 4 1 2 1 3 2 3 3 3 4 2 5 3 4 5 5 3 3 4 3 4 4 4 4 3 5 2 2 EN English teacher 7 888 8 3
6 2021-03-31 9:51:39 2021-03-31 10:01:36 0 73.47.153.77 100 596 1 2021-03-31T10:01:36 student_survey_response_5 567890 42.65820313 -71.30580139 anonymous EN 3 2 1500505 6 15 109 3710 7 1 2 2 2 3 3 4 3 3 3 3 4 3 4 3 4 4 5 4 3 4 3 5 2 2 3 1 2 5 1 3 3 2 4 3 5 4 5 4 3 4 4 4 4 4 4 2 2 EN Social Studies teacher 1,2,3,4,5,8,6,7 888 7 4
7 2021-03-31 9:51:39 2021-03-31 10:01:36 0 73.47.153.77 100 596 1 2021-03-31T10:01:36 2021-03-31T10:01:37 student_survey_response_6 42.65820313 -71.30580139 anonymous EN 3 2 1500505 6 15 109 3710 7 1 2 2 2 3 3 4 3 3 3 3 4 3 4 3 4 4 5 4 3 4 3 5 2 2 3 1 2 5 1 3 3 2 4 3 5 4 5 4 3 4 4 4 4 4 4 2 2 EN Social Studies teacher 1,2,3,4,5,8 888 3 NA
8 2021-03-31 9:51:39 2021-03-31 10:01:36 0 73.47.153.77 100 596 1 2021-03-31T10:01:36 2021-03-31T10:01:38 student_survey_response_7 42.65820313 -71.30580139 anonymous EN 3 2 1500505 6 15 109 3710 7 1 2 2 2 3 3 4 3 3 3 3 4 3 4 3 4 4 5 4 3 4 3 5 2 2 3 1 2 5 1 3 3 2 4 3 5 4 5 4 3 4 4 4 4 4 4 2 2 EN Social Studies teacher 4
9 1,2,3,4,5,8

@ -0,0 +1,160 @@
require 'rails_helper'
describe ResponseRatePresenter do
let(:academic_year) { create(:academic_year, range: '2022-23') }
let(:school) { create(:school, name: 'A school') }
let(:respondents) { create(:respondent, school:, academic_year:, total_students: 40, total_teachers: 40) }
let(:wrong_school) { create(:school, name: 'Wrong school') }
let(:wrong_academic_year) { create(:academic_year) }
let(:wrong_respondents) do
create(:respondent, school: wrong_school, academic_year: wrong_academic_year, total_students: 40,
total_teachers: 40)
end
let(:student_survey_item) { create(:student_survey_item) }
let(:teacher_survey_item) { create(:teacher_survey_item) }
let(:oldest_student_survey_response) do
create(:survey_item_response, school:, academic_year:, survey_item: student_survey_item)
end
let(:newest_student_survey_response) do
create(:survey_item_response, school:, academic_year:, survey_item: student_survey_item)
end
let(:oldest_teacher_survey_response) do
create(:survey_item_response, school:, academic_year:, survey_item: teacher_survey_item)
end
let(:newest_teacher_survey_response) do
create(:survey_item_response, school:, academic_year:, survey_item: teacher_survey_item)
end
let(:wrong_student_survey_response) do
create(:survey_item_response, school: wrong_school, academic_year: wrong_academic_year,
survey_item: student_survey_item)
end
let(:wrong_teacher_survey_response) do
create(:survey_item_response, school: wrong_school, academic_year: wrong_academic_year,
survey_item: teacher_survey_item)
end
context '.date' do
context 'when focus is student' do
before :each do
oldest_student_survey_response
newest_student_survey_response
wrong_student_survey_response
wrong_teacher_survey_response
end
it 'ignores all teacher items and only gets the modified date of the last student item' do
rdate = ResponseRatePresenter.new(focus: :student, academic_year:, school:).date
expect(rdate).to eq(newest_student_survey_response.updated_at)
end
end
context 'when focus is teacher' do
before :each do
oldest_teacher_survey_response
newest_teacher_survey_response
wrong_student_survey_response
wrong_teacher_survey_response
end
it 'ignores all student responses and only gets the modified date of the last teacher item' do
rdate = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).date
expect(rdate).to eq(newest_teacher_survey_response.updated_at)
end
end
end
context '.percentage' do
before :each do
respondents
wrong_respondents
end
context 'when no survey responses are found for a school' do
it 'returns a response rate of 0' do
rdate = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).percentage
expect(rdate).to eq(0)
end
end
context 'when there all possible teacher respondents answered questions' do
before :each do
create_list(:survey_item_response, 40, school:, academic_year:,
survey_item: teacher_survey_item)
end
it 'returns a response rate of 100' do
rdate = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).percentage
expect(rdate).to eq(100)
end
end
context 'when more teachers responded than staff the school' do
before :each do
create_list(:survey_item_response, 80, school:, academic_year:,
survey_item: teacher_survey_item)
end
it 'returns a response rate of 100' do
rdate = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).percentage
expect(rdate).to eq(100)
end
end
context 'when three quarters of the teachers responded to the survey' do
before :each do
create_list(:survey_item_response, 30, school:, academic_year:,
survey_item: teacher_survey_item)
end
it 'returns a response rate of 75' do
rdate = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).percentage
expect(rdate).to eq(75)
end
end
context 'when one quarter of the teachers responded to the survey' do
before :each do
create_list(:survey_item_response, 10, school:, academic_year:,
survey_item: teacher_survey_item)
end
it 'returns a response rate of 25' do
rdate = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).percentage
expect(rdate).to eq(25)
end
end
context 'When the percentage is not a round number' do
before :each do
create_list(:survey_item_response, 9, school:, academic_year:,
survey_item: teacher_survey_item)
end
it 'its rounded to the nearest integer' do
rdate = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).percentage
expect(rdate).to eq(23)
end
end
context 'when there all possible student respondents answered questions' do
before :each do
create_list(:survey_item_response, 40, school:, academic_year:,
survey_item: student_survey_item)
end
it 'returns a response rate of 100' do
rdate = ResponseRatePresenter.new(focus: :student, academic_year:, school:).percentage
expect(rdate).to eq(100)
end
end
context 'when half of all students responded' do
before :each do
create_list(:survey_item_response, 20, school:, academic_year:,
survey_item: student_survey_item)
end
it 'returns a response rate of 50' do
rdate = ResponseRatePresenter.new(focus: :student, academic_year:, school:).percentage
expect(rdate).to eq(50)
end
end
end
end

@ -97,11 +97,18 @@ RSpec.describe SurveyItemValues, type: :model do
context '.school' do
it 'returns the school that maps to the dese id provided' do
attleboro
headers = ['Dese ID']
row = { 'Dese ID' => '1234' }
values = SurveyItemValues.new(row:, headers:, genders:, survey_items:, schools:)
expect(values.school).to eq attleboro
row = { 'DeseID' => '1234' }
headers = ['School']
row = { 'School' => '1234' }
values = SurveyItemValues.new(row:, headers:, genders:, survey_items:, schools:)
expect(values.school).to eq attleboro
headers = ['School- Attleboro']
row = { 'School- Attleboro' => '1234' }
values = SurveyItemValues.new(row:, headers:, genders:, survey_items:, schools:)
expect(values.school).to eq attleboro
end
@ -114,6 +121,7 @@ RSpec.describe SurveyItemValues, type: :model do
expect(values.grade).to eq 1
end
end
context '.gender' do
it 'returns the grade that maps to the grade provided' do
row = { 'Gender' => '1' }
@ -122,18 +130,31 @@ RSpec.describe SurveyItemValues, type: :model do
end
end
context '.respondent_type' do
it 'reads header to find the survey type' do
headers = %w[s-sbel-q5 s-phys-q2 RecordedDate]
values = SurveyItemValues.new(row: {}, headers:, genders:, survey_items:, schools:)
expect(values.respondent_type).to eq :student
headers = %w[t-sbel-q5 t-phys-q2]
values = SurveyItemValues.new(row: {}, headers:, genders:, survey_items:, schools:)
expect(values.respondent_type).to eq :teacher
context '.dese_id' do
it 'returns the dese id for the id provided' do
headers = ['Dese ID']
row = { 'Dese ID' => '11' }
values = SurveyItemValues.new(row:, headers:, genders:, survey_items:, schools:)
expect(values.dese_id).to eq 11
headers = ['School']
row = { 'School' => '22' }
values = SurveyItemValues.new(row:, headers:, genders:, survey_items:, schools:)
expect(values.dese_id).to eq 22
end
end
# context '.survey_type' do
# it 'reads header to find the survey type' do
# headers = %w[s-sbel-q5 s-phys-q2 RecordedDate]
# values = SurveyItemValues.new(row: {}, headers:, genders:, survey_items:, schools:)
# expect(values.respondent_type).to eq :student
# headers = %w[t-sbel-q5 t-phys-q2]
# values = SurveyItemValues.new(row: {}, headers:, genders:, survey_items:, schools:)
# expect(values.respondent_type).to eq :teacher
# end
# end
context '.survey_type' do
context 'when survey type is standard form' do
it 'returns the survey type' do
@ -198,6 +219,20 @@ RSpec.describe SurveyItemValues, type: :model do
headers = short_form_survey_items
values = SurveyItemValues.new(row: { 'Duration (in seconds)' => 'NA' }, headers:, genders:, survey_items:,
schools:)
end
end
end
context '.valid_duration' do
context 'when duration is valid' do
it 'returns true' do
headers = ['s-sbel-q5', 's-phys-q2', 'RecordedDate', 'Duration (in seconds)']
values = SurveyItemValues.new(row: { 'Duration (in seconds)' => '240' }, headers:, genders:, survey_items:,
schools:)
expect(values.valid_duration?).to eq true
headers = ['t-sbel-q5', 't-phys-q2', 'Duration (in seconds)']
values = SurveyItemValues.new(row: { 'Duration (in seconds)' => '300' }, headers:, genders:, survey_items:,
schools:)
expect(values.valid_duration?).to eq true
end
end
@ -205,6 +240,7 @@ RSpec.describe SurveyItemValues, type: :model do
context 'when duration is invalid' do
it 'returns false' do
headers = standard_survey_items
# headers = ['s-sbel-q5', 's-phys-q2', 'RecordedDate', 'Duration (in seconds)']
values = SurveyItemValues.new(row: { 'Duration (in seconds)' => '239' }, headers:, genders:, survey_items:,
schools:)
expect(values.valid_duration?).to eq false

@ -1,34 +1,74 @@
# require 'rails_helper'
# <<<<<<< HEAD
# # require 'rails_helper'
# # include AnalyzeHelper
# # describe 'District Admin', js: true do
# # let(:district) { District.find_by_slug 'winchester' }
# # let(:different_district) { District.find_by_slug 'wareham' }
# # let(:school) { School.find_by_slug 'winchester-high-school' }
# # let(:school_in_same_district) { School.find_by_slug 'muraco-elementary-school' }
# # let(:first_school_in_wareham) { School.find_by_slug 'john-william-decas-elementary-school' }
# # let(:category) { Category.find_by_name('Teachers & Leadership') }
# # let(:different_category) { Category.find_by_name('School Culture') }
# # let(:subcategory) { Subcategory.find_by_name('Teachers & The Teaching Environment') }
# # let(:different_subcategory) { Subcategory.find_by_name('Relationships') }
# # let(:measures_for_subcategory) { Measure.where(subcategory:) }
# # let(:scales_for_subcategory) { Scale.where(measure: measures_for_subcategory) }
# # let(:survey_items_for_subcategory) { SurveyItem.where(scale: scales_for_subcategory) }
# # let(:measure_1A_i) { Measure.find_by_measure_id('1A-i') }
# # let(:measure_2A_i) { Measure.find_by_measure_id('2A-i') }
# # let(:measure_2A_ii) { Measure.find_by_measure_id('2A-ii') }
# # let(:measure_4C_i) { Measure.find_by_measure_id('4C-i') }
# # let(:measure_with_no_survey_responses) { Measure.find_by_measure_id('3A-i') }
# =======
# require "rails_helper"
# include AnalyzeHelper
# describe 'District Admin', js: true do
# let(:district) { District.find_by_slug 'winchester' }
# let(:different_district) { District.find_by_slug 'wareham' }
# let(:school) { School.find_by_slug 'winchester-high-school' }
# let(:school_in_same_district) { School.find_by_slug 'muraco-elementary-school' }
# let(:first_school_in_wareham) { School.find_by_slug 'john-william-decas-elementary-school' }
# let(:category) { Category.find_by_name('Teachers & Leadership') }
# let(:different_category) { Category.find_by_name('School Culture') }
# let(:subcategory) { Subcategory.find_by_name('Teachers & The Teaching Environment') }
# let(:different_subcategory) { Subcategory.find_by_name('Relationships') }
# describe "District Admin", js: true do
# let(:district) { District.find_by_slug "winchester" }
# let(:different_district) { District.find_by_slug "wareham" }
# let(:school) { School.find_by_slug "winchester-high-school" }
# let(:school_in_same_district) { School.find_by_slug "muraco-elementary-school" }
# let(:first_school_in_wareham) { School.find_by_slug "john-william-decas-elementary-school" }
# let(:category) { Category.find_by_name("Teachers & Leadership") }
# let(:different_category) { Category.find_by_name("School Culture") }
# let(:subcategory) { Subcategory.find_by_name("Teachers & The Teaching Environment") }
# let(:different_subcategory) { Subcategory.find_by_name("Relationships") }
# let(:measures_for_subcategory) { Measure.where(subcategory:) }
# let(:scales_for_subcategory) { Scale.where(measure: measures_for_subcategory) }
# let(:survey_items_for_subcategory) { SurveyItem.where(scale: scales_for_subcategory) }
# let(:measure_1A_i) { Measure.find_by_measure_id('1A-i') }
# let(:measure_2A_i) { Measure.find_by_measure_id('2A-i') }
# let(:measure_2A_ii) { Measure.find_by_measure_id('2A-ii') }
# let(:measure_4C_i) { Measure.find_by_measure_id('4C-i') }
# let(:measure_with_no_survey_responses) { Measure.find_by_measure_id('3A-i') }
# # let(:survey_items_for_measure_1A_i) { measure_1A_i.survey_items }
# # let(:survey_items_for_measure_2A_i) { measure_2A_i.survey_items }
# # let(:survey_items_for_measure_2A_ii) { measure_2A_ii.survey_items }
# # let(:survey_items_for_measure_4C_i) { measure_4C_i.survey_items }
# let(:ay_2021_22) { AcademicYear.find_by_range '2021-22' }
# let(:ay_2019_20) { AcademicYear.find_by_range '2019-20' }
# let(:measure_1A_i) { Measure.find_by_measure_id("1A-i") }
# let(:measure_2A_i) { Measure.find_by_measure_id("2A-i") }
# let(:measure_2A_ii) { Measure.find_by_measure_id("2A-ii") }
# let(:measure_4C_i) { Measure.find_by_measure_id("4C-i") }
# let(:measure_with_no_survey_responses) { Measure.find_by_measure_id("3A-i") }
# >>>>>>> a71ebbc (Add Overall Response Rate)
# # # let(:survey_items_for_measure_1A_i) { measure_1A_i.survey_items }
# # # let(:survey_items_for_measure_2A_i) { measure_2A_i.survey_items }
# # # let(:survey_items_for_measure_2A_ii) { measure_2A_ii.survey_items }
# # # let(:survey_items_for_measure_4C_i) { measure_4C_i.survey_items }
# <<<<<<< HEAD
# # let(:ay_2021_22) { AcademicYear.find_by_range '2021-22' }
# # let(:ay_2019_20) { AcademicYear.find_by_range '2019-20' }
# # let(:response_rates) do
# # [ay_2021_22, ay_2019_20].each do |academic_year|
# # [school, school_in_same_district, first_school_in_wareham].each do |school|
# # [subcategory, different_subcategory].each do |subcategory|
# # ResponseRate.create!(subcategory:, school:, academic_year:, student_response_rate: 100, teacher_response_rate: 100,
# # meets_student_threshold: true, meets_teacher_threshold: true)
# # end
# # end
# # end
# # end
# =======
# let(:ay_2021_22) { AcademicYear.find_by_range "2021-22" }
# let(:ay_2019_20) { AcademicYear.find_by_range "2019-20" }
# let(:response_rates) do
# [ay_2021_22, ay_2019_20].each do |academic_year|
# [school, school_in_same_district, first_school_in_wareham].each do |school|
@ -39,205 +79,352 @@
# end
# end
# end
# >>>>>>> a71ebbc (Add Overall Response Rate)
# # let(:username) { 'winchester' }
# # let(:password) { 'winchester!' }
# let(:respondents) do
# respondent = Respondent.find_or_initialize_by(school:, academic_year: ay_2021_22)
# respondent.total_students = 8
# respondent.total_teachers = 8
# respondent.one = 20
# respondent.save
# # respondent = Respondent.find_or_initialize_by(school:, academic_year: ay_2019_20)
# # # let(:username) { 'winchester' }
# # # let(:password) { 'winchester!' }
# # let(:respondents) do
# # respondent = Respondent.find_or_initialize_by(school:, academic_year: ay_2021_22)
# # respondent.total_students = 8
# # respondent.total_teachers = 8
# # respondent.one = 20
# # respondent.save
# # end
# # before :each do
# # Rails.application.load_seed
# # respondents
# # response_rates
# # survey_item_responses = []
# # # respondent = Respondent.find_or_initialize_by(school:, academic_year: ay_2019_20)
# # # respondent.total_students = 8
# # # respondent.total_teachers = 8
# # # respondent.one = 20
# # # respondent.save
# # # end
# # # before :each do
# # # Rails.application.load_seed
# # # respondents
# # # response_rates
# # # survey_item_responses = []
# <<<<<<< HEAD
# # # survey_items_for_measure_1A_i.each do |survey_item|
# # # SurveyItemResponse::TEACHER_RESPONSE_THRESHOLD.times do
# # # survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# # # school:, survey_item:, likert_score: 4)
# # # end
# # # end
# # # survey_items_for_measure_2A_i.each do |survey_item|
# # # SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD.times do
# # # survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# # # school:, survey_item:, likert_score: 5, grade: 1)
# # # end
# # # end
# # # survey_items_for_measure_2A_ii.each do |survey_item|
# # # SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD.times do
# # # survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# # # school:, survey_item:, likert_score: 5, grade: 1)
# # # end
# # # end
# # # survey_items_for_measure_4C_i.each do |survey_item|
# # # SurveyItemResponse::TEACHER_RESPONSE_THRESHOLD.times do
# # # survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# # # school:, survey_item:, likert_score: 1, grade: 1)
# # # end
# # # end
# # # survey_items_for_subcategory.each do |survey_item|
# # # 2.times do
# # # survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# # # school:, survey_item:, likert_score: 4, grade: 1)
# # # end
# # # end
# =======
# survey_items_for_measure_1A_i.each do |survey_item|
# SurveyItemResponse::TEACHER_RESPONSE_THRESHOLD.times do
# survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# school:, survey_item:, likert_score: 4)
# end
# end
# # survey_items_for_measure_1A_i.each do |survey_item|
# # SurveyItemResponse::TEACHER_RESPONSE_THRESHOLD.times do
# # survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# # school:, survey_item:, likert_score: 4)
# # end
# # end
# survey_items_for_measure_2A_i.each do |survey_item|
# SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD.times do
# survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# school:, survey_item:, likert_score: 5, grade: 1)
# end
# end
# # survey_items_for_measure_2A_i.each do |survey_item|
# # SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD.times do
# # survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# # school:, survey_item:, likert_score: 5, grade: 1)
# # end
# # end
# survey_items_for_measure_2A_ii.each do |survey_item|
# SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD.times do
# survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# school:, survey_item:, likert_score: 5, grade: 1)
# end
# end
# # survey_items_for_measure_2A_ii.each do |survey_item|
# # SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD.times do
# # survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# # school:, survey_item:, likert_score: 5, grade: 1)
# # end
# # end
# survey_items_for_measure_4C_i.each do |survey_item|
# SurveyItemResponse::TEACHER_RESPONSE_THRESHOLD.times do
# survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# school:, survey_item:, likert_score: 1, grade: 1)
# end
# end
# # survey_items_for_measure_4C_i.each do |survey_item|
# # SurveyItemResponse::TEACHER_RESPONSE_THRESHOLD.times do
# # survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# # school:, survey_item:, likert_score: 1, grade: 1)
# # end
# # end
# survey_items_for_subcategory.each do |survey_item|
# 2.times do
# survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# school:, survey_item:, likert_score: 4, grade: 1)
# end
# end
# >>>>>>> a71ebbc (Add Overall Response Rate)
# # survey_items_for_subcategory.each do |survey_item|
# # 2.times do
# # survey_item_responses << SurveyItemResponse.new(response_id: rand.to_s, academic_year: ay_2021_22,
# # school:, survey_item:, likert_score: 4, grade: 1)
# # end
# # end
# # # SurveyItemResponse.import survey_item_responses
# # # end
# # SurveyItemResponse.import survey_item_responses
# # after :each do
# # DatabaseCleaner.clean
# # end
# after :each do
# DatabaseCleaner.clean
# end
# <<<<<<< HEAD
# # it 'navigates through the site' do
# # # page.driver.basic_authorize(username, password)
# it 'navigates through the site' do
# # visit '/welcome'
# # expect(page).to have_text('Teachers & Leadership')
# # go_to_school_overview_from_welcome_page(district, school)
# =======
# it "navigates through the site" do
# # page.driver.basic_authorize(username, password)
# visit '/welcome'
# expect(page).to have_text('Teachers & Leadership')
# visit "/welcome"
# expect(page).to have_text("Teachers & Leadership")
# go_to_school_overview_from_welcome_page(district, school)
# >>>>>>> a71ebbc (Add Overall Response Rate)
# # # district_admin_sees_overview_content
# <<<<<<< HEAD
# # click_on 'Teachers & Leadership'
# # district_admin_sees_browse_content
# # click_on 'Overview'
# # district_admin_sees_overview_content
# click_on 'Teachers & Leadership'
# # click_on 'Analyze'
# # district_admin_sees_analyze_content
# =======
# click_on "Teachers & Leadership"
# district_admin_sees_browse_content
# click_on 'Overview'
# click_on "Overview"
# district_admin_sees_overview_content
# click_on 'Analyze'
# click_on "Analyze"
# district_admin_sees_analyze_content
# >>>>>>> a71ebbc (Add Overall Response Rate)
# # go_to_different_category(different_category)
# # district_admin_sees_category_change
# # # go_to_different_category(different_category)
# # # district_admin_sees_category_change
# # go_to_different_subcategory(different_subcategory)
# # district_admin_sees_subcategory_change
# # # go_to_different_subcategory(different_subcategory)
# # # district_admin_sees_subcategory_change
# click_on 'Browse'
# <<<<<<< HEAD
# # click_on 'Browse'
# # district_admin_sees_browse_content
# # click_on 'School Culture'
# # expect(page).to have_text('Measures the degree to which the school environment is safe, caring, and academically-oriented. It considers factors like bullying, student-teacher relationships, and student valuing of learning.')
# =======
# click_on "Browse"
# district_admin_sees_browse_content
# click_on 'School Culture'
# expect(page).to have_text('Measures the degree to which the school environment is safe, caring, and academically-oriented. It considers factors like bullying, student-teacher relationships, and student valuing of learning.')
# click_on "School Culture"
# expect(page).to have_text("Measures the degree to which the school environment is safe, caring, and academically-oriented. It considers factors like bullying, student-teacher relationships, and student valuing of learning.")
# >>>>>>> a71ebbc (Add Overall Response Rate)
# # go_to_different_school_in_same_district(school_in_same_district)
# # district_admin_sees_schools_change
# # # go_to_different_school_in_same_district(school_in_same_district)
# # # district_admin_sees_schools_change
# # go_to_different_district(different_district)
# # district_admin_sees_district_change
# # # go_to_different_district(different_district)
# # # district_admin_sees_district_change
# # go_to_different_year(ay_2019_20)
# # district_admin_sees_year_change
# # end
# # end
# # # go_to_different_year(ay_2019_20)
# # # district_admin_sees_year_change
# # # end
# # # end
# # private
# # # private
# <<<<<<< HEAD
# # def district_admin_sees_professional_qualifications
# # expect(page).to have_text('Professional Qualifications')
# # expect(page).to have_css("[data-for-measure-id='1A-i'][width='2.99%'][x='60%']")
# # end
# =======
# def district_admin_sees_professional_qualifications
# expect(page).to have_text('Professional Qualifications')
# expect(page).to have_css("[data-for-measure-id='1A-i'][width='2.99%'][x='60%']")
# end
# expect(page).to have_text("Professional Qualifications")
# expect(page).to have_css("[data-for-measure-id='1A-i']")
# >>>>>>> a71ebbc (Add Overall Response Rate)
# # def district_admin_sees_student_physical_safety
# # expect(page).to have_text('Student Physical Safety')
# <<<<<<< HEAD
# # # expect(page).to have_css("[data-for-measure-id='2A-i'][width='40.0%'][x='60%']")
# # # end
# =======
# def district_admin_sees_student_physical_safety
# expect(page).to have_text('Student Physical Safety')
# expect(page).to have_text("Student Physical Safety")
# >>>>>>> a71ebbc (Add Overall Response Rate)
# # def district_admin_sees_problem_solving_emphasis
# # expect(page).to have_text('Problem Solving Emphasis')
# # expect(page).to have_css("[data-for-measure-id='4C-i'][width='60.0%'][x='0.0%']")
# # end
# # expect(page).to have_css("[data-for-measure-id='2A-i'][width='40.0%'][x='60%']")
# <<<<<<< HEAD
# # def go_to_school_overview_from_welcome_page(district, school)
# # expect(page).to have_select('district', selected: 'Select a District')
# # select district.name, from: 'district-dropdown'
# # expect(page).to have_select('school', selected: 'Select a School')
# # select school.name, from: 'school-dropdown'
# # expect(page).to have_select('school', selected: 'Winchester High School')
# # expect(page).to have_xpath('//a[@class="mx-4 btn btn-secondary"]')
# # click_on 'Go'
# # end
# # def go_to_different_school_in_same_district(school)
# # select school.name, from: 'select-school'
# # end
# # def go_to_different_district(district)
# # select district.name, from: 'select-district'
# # end
# # def go_to_different_year(year)
# # select year.formatted_range, from: 'select-academic-year'
# # end
# # def got_to_analyze_page; end
# # def district_admin_sees_schools_change
# # expected_path = "/districts/#{school_in_same_district.district.slug}/schools/#{school_in_same_district.slug}/browse/teachers-and-leadership?year=#{ay_2021_22.range}"
# # expect(page).to have_current_path(expected_path)
# # end
# =======
# def district_admin_sees_problem_solving_emphasis
# expect(page).to have_text('Problem Solving Emphasis')
# expect(page).to have_text("Problem Solving")
# expect(page).to have_css("[data-for-measure-id='4C-i'][width='60.0%'][x='0.0%']")
# end
# def go_to_school_overview_from_welcome_page(district, school)
# expect(page).to have_select('district', selected: 'Select a District')
# select district.name, from: 'district-dropdown'
# expect(page).to have_select('school', selected: 'Select a School')
# select school.name, from: 'school-dropdown'
# expect(page).to have_select('school', selected: 'Winchester High School')
# expect(page).to have_select("district", selected: "Select a District")
# select district.name, from: "district-dropdown"
# expect(page).to have_select("school", selected: "Select a School")
# select school.name, from: "school-dropdown"
# expect(page).to have_select("school", selected: "Winchester High School")
# expect(page).to have_xpath('//a[@class="mx-4 btn btn-secondary"]')
# click_on 'Go'
# click_on "Go"
# end
# def go_to_different_school_in_same_district(school)
# select school.name, from: 'select-school'
# select school.name, from: "select-school"
# end
# def go_to_different_district(district)
# select district.name, from: 'select-district'
# select district.name, from: "select-district"
# end
# def go_to_different_year(year)
# select year.formatted_range, from: 'select-academic-year'
# select year.formatted_range, from: "select-academic-year"
# end
# def got_to_analyze_page; end
# def district_admin_sees_schools_change
# expected_path = "/districts/#{school_in_same_district.district.slug}/schools/#{school_in_same_district.slug}/browse/teachers-and-leadership?year=#{ay_2021_22.range}"
# expect(page).to have_current_path(expected_path)
# def got_to_analyze_page
# end
# >>>>>>> a71ebbc (Add Overall Response Rate)
# # # def district_admin_sees_district_change
# # # expected_path = "/districts/#{different_district.slug}/schools/#{different_district.schools.alphabetic.first.slug}/browse/teachers-and-leadership?year=#{ay_2021_22.range}"
# # # expect(page).to have_current_path(expected_path)
# # # end
# # # def district_admin_sees_year_change
# # # expected_path = "/districts/#{different_district.slug}/schools/#{different_district.schools.alphabetic.first.slug}/browse/teachers-and-leadership?year=2019-20"
# # # expect(page).to have_current_path(expected_path)
# # # end
# # def district_admin_sees_overview_content
# # expect(page).to have_select('academic-year', selected: '2021 2022')
# # expect(page).to have_select('district', selected: 'Winchester')
# # expect(page).to have_select('school', selected: 'Winchester High School')
# # expect(page).to have_text(school.name)
# <<<<<<< HEAD
# # # district_admin_sees_professional_qualifications
# # # district_admin_sees_student_physical_safety
# # # district_admin_sees_problem_solving_emphasis
# =======
# def district_admin_sees_overview_content
# expect(page).to have_select("academic-year", selected: "2021 2022")
# expect(page).to have_select("district", selected: "Winchester")
# expect(page).to have_select("school", selected: "Winchester High School")
# expect(page).to have_text(school.name)
# >>>>>>> a71ebbc (Add Overall Response Rate)
# # def district_admin_sees_district_change
# # expected_path = "/districts/#{different_district.slug}/schools/#{different_district.schools.alphabetic.first.slug}/browse/teachers-and-leadership?year=#{ay_2021_22.range}"
# # expect(page).to have_current_path(expected_path)
# # page.assert_selector('.measure-row-bar', count: 6)
# # end
# # def district_admin_sees_year_change
# # expected_path = "/districts/#{different_district.slug}/schools/#{different_district.schools.alphabetic.first.slug}/browse/teachers-and-leadership?year=2019-20"
# # expect(page).to have_current_path(expected_path)
# <<<<<<< HEAD
# # def district_admin_sees_browse_content
# # expect(page).to have_text('Teachers & Leadership')
# # expect(page).to have_text('Approval')
# # end
# def district_admin_sees_overview_content
# expect(page).to have_select('academic-year', selected: '2021 2022')
# expect(page).to have_select('district', selected: 'Winchester')
# expect(page).to have_select('school', selected: 'Winchester High School')
# expect(page).to have_text(school.name)
# # def district_admin_sees_analyze_content
# # expect(page).to have_text('1:Teachers & Leadership > 1A:Teachers & The Teaching Environment')
# # end
# # def go_to_different_category(category)
# # select category.name, from: 'select-category'
# # end
# # district_admin_sees_professional_qualifications
# # district_admin_sees_student_physical_safety
# # district_admin_sees_problem_solving_emphasis
# # def district_admin_sees_category_change
# # expect(page).to have_text '2A:Safety'
# # end
# # def go_to_different_subcategory(subcategory)
# # select subcategory.name, from: 'select-subcategory'
# # end
# page.assert_selector('.measure-row-bar', count: 6)
# # def district_admin_sees_subcategory_change
# # expect(page).to have_text('Relationships')
# # end
# =======
# page.assert_selector(".measure-row-bar", count: 6)
# end
# def district_admin_sees_browse_content
# expect(page).to have_text('Teachers & Leadership')
# expect(page).to have_text('Approval')
# expect(page).to have_text("Teachers & Leadership")
# expect(page).to have_text("Approval")
# end
# def district_admin_sees_analyze_content
# expect(page).to have_text('1:Teachers & Leadership > 1A:Teachers & The Teaching Environment')
# expect(page).to have_text("1:Teachers & Leadership > 1A:Teachers & The Teaching Environment")
# end
# def go_to_different_category(category)
# select category.name, from: 'select-category'
# select category.name, from: "select-category"
# end
# def district_admin_sees_category_change
# expect(page).to have_text '2A:Safety'
# expect(page).to have_text "2A:Safety"
# end
# def go_to_different_subcategory(subcategory)
# select subcategory.name, from: 'select-subcategory'
# select subcategory.name, from: "select-subcategory"
# end
# def district_admin_sees_subcategory_change
# expect(page).to have_text('Relationships')
# expect(page).to have_text("Relationships")
# end
# >>>>>>> a71ebbc (Add Overall Response Rate)

@ -47,7 +47,12 @@ describe 'overview/index' do
assign :academic_years, [@academic_year]
@district = create(:district)
@school = create(:school)
@student_response_rate_presenter = ResponseRatePresenter.new(focus: :student, school: @school,
academic_year: @academic_year)
@teacher_response_rate_presenter = ResponseRatePresenter.new(focus: :teacher, school: @school,
academic_year: @academic_year)
Respondent.create!(school: @school, academic_year: @academic_year, total_students: 40, total_teachers: 40)
ResponseRate.create!(subcategory: Subcategory.first, school: @school, academic_year: @academic_year,
student_response_rate: 100, teacher_response_rate: 100, meets_student_threshold: true, meets_teacher_threshold: true)

Loading…
Cancel
Save