diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index d815ba1d..d682d7ee 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -28,7 +28,7 @@ class DashboardController < ApplicationController end def academic_year - @academic_year ||= params[:year] + @academic_year ||= AcademicYear.find_by_range params[:year] end end diff --git a/app/helpers/dashboard_helper.rb b/app/helpers/dashboard_helper.rb index eb720a1b..51414b5c 100644 --- a/app/helpers/dashboard_helper.rb +++ b/app/helpers/dashboard_helper.rb @@ -1,6 +1,6 @@ module DashboardHelper def format_academic_year(ay) - years = ay.split('-') + years = ay.range.split('-') "#{years.first} – 20#{years.second}" end end diff --git a/app/models/academic_year.rb b/app/models/academic_year.rb new file mode 100644 index 00000000..482beb33 --- /dev/null +++ b/app/models/academic_year.rb @@ -0,0 +1,3 @@ +class AcademicYear < ActiveRecord::Base + +end diff --git a/app/models/survey_item_response.rb b/app/models/survey_item_response.rb index cebd20f0..9776a2d1 100644 --- a/app/models/survey_item_response.rb +++ b/app/models/survey_item_response.rb @@ -1,4 +1,5 @@ class SurveyItemResponse < ActiveRecord::Base + belongs_to :academic_year belongs_to :school belongs_to :survey_item end diff --git a/db/migrate/20210921154637_create_academic_years.rb b/db/migrate/20210921154637_create_academic_years.rb new file mode 100644 index 00000000..5a434cd8 --- /dev/null +++ b/db/migrate/20210921154637_create_academic_years.rb @@ -0,0 +1,8 @@ +class CreateAcademicYears < ActiveRecord::Migration[5.0] + def change + create_table :academic_years do |t| + t.string :range, null: false, unique: true + t.index :range, unique: true + end + end +end diff --git a/db/migrate/20210921155142_add_foreign_key_from_survey_item_responses_to_academic_year.rb b/db/migrate/20210921155142_add_foreign_key_from_survey_item_responses_to_academic_year.rb new file mode 100644 index 00000000..288669e0 --- /dev/null +++ b/db/migrate/20210921155142_add_foreign_key_from_survey_item_responses_to_academic_year.rb @@ -0,0 +1,13 @@ +class AddForeignKeyFromSurveyItemResponsesToAcademicYear < ActiveRecord::Migration[5.0] + def up + remove_column :survey_item_responses, :academic_year + add_column :survey_item_responses, :academic_year_id, :integer, null: false + add_foreign_key :survey_item_responses, :academic_years + end + + def down + remove_foreign_key :survey_item_responses, :academic_years + remove_column :survey_item_responses, :academic_year_id + add_column :survey_item_responses, :academic_year, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 4ee45291..e0109ed3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,11 +10,16 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20210921133545) do +ActiveRecord::Schema.define(version: 20210921155142) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "academic_years", force: :cascade do |t| + t.string "range", null: false + t.index ["range"], name: "index_academic_years_on_range", unique: true, using: :btree + end + create_table "attempts", force: :cascade do |t| t.integer "recipient_id" t.integer "schedule_id" @@ -218,11 +223,11 @@ ActiveRecord::Schema.define(version: 20210921133545) do end create_table "survey_item_responses", force: :cascade do |t| - t.string "academic_year" t.integer "likert_score" - t.integer "school_id", null: false - t.integer "survey_item_id", null: false - t.string "response_id", null: false + t.integer "school_id", null: false + t.integer "survey_item_id", null: false + t.string "response_id", null: false + t.integer "academic_year_id", null: false end create_table "survey_items", force: :cascade do |t| @@ -262,6 +267,7 @@ ActiveRecord::Schema.define(version: 20210921133545) do add_foreign_key "school_categories", "categories" add_foreign_key "school_categories", "schools" add_foreign_key "subcategories", "sqm_categories" + add_foreign_key "survey_item_responses", "academic_years" add_foreign_key "survey_item_responses", "schools" add_foreign_key "survey_item_responses", "survey_items" add_foreign_key "survey_items", "measures" diff --git a/db/seeds.rb b/db/seeds.rb index 57b1b122..b12be982 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,5 +1,10 @@ require 'csv' +academic_year_ranges = ['2020-21', '2021-22'] +academic_year_ranges.each do |range| + AcademicYear.create range: range if AcademicYear.find_by_range(range).nil? +end + qualtrics_district_and_school_code_key = File.read(Rails.root.join('data', 'qualtrics_district_and_school_code_key.csv')) CSV.parse(qualtrics_district_and_school_code_key, headers: true).each do |row| district_name = row['District'] diff --git a/spec/features/school_dashboard_feature_spec.rb b/spec/features/school_dashboard_feature_spec.rb index d20cb04b..a61f19ae 100644 --- a/spec/features/school_dashboard_feature_spec.rb +++ b/spec/features/school_dashboard_feature_spec.rb @@ -11,7 +11,7 @@ feature "School dashboard", type: feature do let(:measure_row_bars) { page.all('rect.measure-row-bar') } - let(:ay_2020_21) { '2020-21' } + let(:ay_2020_21) { AcademicYear.find_by_range '2020-21' } before :each do SurveyItemResponse.create response_id: '123abc', academic_year: ay_2020_21, school: school, survey_item: survey_item_1_for_measure, likert_score: 4 @@ -29,7 +29,7 @@ feature "School dashboard", type: feature do scenario "User views a school dashboard" do page.driver.browser.basic_authorize(username, password) - visit "/districts/winchester/schools/#{school.slug}/dashboard?year=#{ay_2020_21}" + visit "/districts/#{district.slug}/schools/#{school.slug}/dashboard?year=#{ay_2020_21.range}" expect(page).to have_select('academic-year', selected: '2020 – 2021') expect(page).to have_select('district', selected: 'Winchester') diff --git a/spec/models/survey_response_aggregator_spec.rb b/spec/models/survey_response_aggregator_spec.rb index 83cede54..ca7a6fc6 100644 --- a/spec/models/survey_response_aggregator_spec.rb +++ b/spec/models/survey_response_aggregator_spec.rb @@ -4,8 +4,8 @@ describe SurveyResponseAggregator, type: :model do let(:category) { SqmCategory.create } let(:subcategory) { Subcategory.create sqm_category: category } - let(:ay_2020_21) { '2020-21' } - let(:ay_2021_22) { '2021-22' } + let(:ay_2020_21) { AcademicYear.find_by_range '2020-21' } + let(:ay_2021_22) { AcademicYear.find_by_range '2021-22' } let(:school_a) { School.create name: 'School A' } let(:school_b) { School.create name: 'School A' }