diff --git a/Gemfile b/Gemfile
index af288c7b..71093832 100644
--- a/Gemfile
+++ b/Gemfile
@@ -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
diff --git a/Gemfile.lock b/Gemfile.lock
index 6c15bf0a..c436e309 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -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
diff --git a/app/assets/stylesheets/partials/_overview.scss b/app/assets/stylesheets/partials/_overview.scss
index d9659843..8a9156ec 100644
--- a/app/assets/stylesheets/partials/_overview.scss
+++ b/app/assets/stylesheets/partials/_overview.scss
@@ -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;
diff --git a/app/controllers/overview_controller.rb b/app/controllers/overview_controller.rb
index 0ba335ca..bc7a17e5 100644
--- a/app/controllers/overview_controller.rb
+++ b/app/controllers/overview_controller.rb
@@ -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
diff --git a/app/presenters/response_rate_presenter.rb b/app/presenters/response_rate_presenter.rb
new file mode 100644
index 00000000..aa45a234
--- /dev/null
+++ b/app/presenters/response_rate_presenter.rb
@@ -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
diff --git a/app/views/overview/_response_rate.html.erb b/app/views/overview/_response_rate.html.erb
new file mode 100644
index 00000000..5ec1c145
--- /dev/null
+++ b/app/views/overview/_response_rate.html.erb
@@ -0,0 +1,8 @@
+
+
Response Rates as of <%= response_rate_presenter.date.to_date.strftime("%m/%d/%y") %>
+
+
<%= response_rate_presenter.focus.capitalize %>
+ <%= render partial: "response_rate_graphic", locals: {response_rate_presenter: response_rate_presenter}, cached: true %>
+
<%= response_rate_presenter.percentage %>%
+
+
diff --git a/app/views/overview/_response_rate_graphic.html.erb b/app/views/overview/_response_rate_graphic.html.erb
new file mode 100644
index 00000000..34798ec8
--- /dev/null
+++ b/app/views/overview/_response_rate_graphic.html.erb
@@ -0,0 +1,35 @@
+
+
+
diff --git a/app/views/overview/index.html.erb b/app/views/overview/index.html.erb
index 97c869cb..b1c062c0 100644
--- a/app/views/overview/index.html.erb
+++ b/app/views/overview/index.html.erb
@@ -81,6 +81,12 @@
<%= render partial: "quality_framework_indicators", locals: { category_presenters: @category_presenters }, cached: true %>
+
+
+ <%= 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 %>
+
+
diff --git a/spec/fixtures/test_2020-21_student_survey_responses.csv b/spec/fixtures/test_2020-21_student_survey_responses.csv
index f270ba33..bfd808ca 100644
--- a/spec/fixtures/test_2020-21_student_survey_responses.csv
+++ b/spec/fixtures/test_2020-21_student_survey_responses.csv
@@ -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",,,
diff --git a/spec/presenters/response_rate_presenter_spec.rb b/spec/presenters/response_rate_presenter_spec.rb
new file mode 100644
index 00000000..12ac726c
--- /dev/null
+++ b/spec/presenters/response_rate_presenter_spec.rb
@@ -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
diff --git a/spec/services/cleaner_spec.rb b/spec/services/cleaner_spec.rb
index b01fb4e9..c34f213c 100644
--- a/spec/services/cleaner_spec.rb
+++ b/spec/services/cleaner_spec.rb
@@ -23,7 +23,7 @@ RSpec.describe Cleaner do
end
let(:common_headers) do
- ['Recorded Date', 'DeseID', 'ResponseID']
+ ['Recorded Date', 'Dese ID', 'ResponseID']
end
let(:standard_survey_items) do
diff --git a/spec/services/survey_item_values_spec.rb b/spec/services/survey_item_values_spec.rb
index 8cde5ad9..a11084a0 100644
--- a/spec/services/survey_item_values_spec.rb
+++ b/spec/services/survey_item_values_spec.rb
@@ -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
diff --git a/spec/system/journey_spec.rb b/spec/system/journey_spec.rb
index 5f100657..4fc10ce7 100644
--- a/spec/system/journey_spec.rb
+++ b/spec/system/journey_spec.rb
@@ -1,243 +1,430 @@
-# 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|
# [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)
+# meets_student_threshold: true, meets_teacher_threshold: true)
# end
# 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
+# <<<<<<< HEAD
+# # click_on 'Browse'
+# # district_admin_sees_browse_content
-# click_on 'Browse'
+# # 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
+
+# <<<<<<< 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_css("[data-for-measure-id='2A-i'][width='40.0%'][x='60%']")
+# # 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_xpath('//a[@class="mx-4 btn btn-secondary"]')
-# click_on 'Go'
+# 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")
+
+# 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)
diff --git a/spec/views/overview/index.html.erb_spec.rb b/spec/views/overview/index.html.erb_spec.rb
index 81fb7577..c469aef4 100644
--- a/spec/views/overview/index.html.erb_spec.rb
+++ b/spec/views/overview/index.html.erb_spec.rb
@@ -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)