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 %> +
+

Distance From Benchmark

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)