Add academic years as an ActiveRecord object

pull/1/head
Alex Basson 4 years ago
parent a7de5b9ac2
commit e222edc7e7

@ -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

@ -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

@ -0,0 +1,3 @@
class AcademicYear < ActiveRecord::Base
end

@ -1,4 +1,5 @@
class SurveyItemResponse < ActiveRecord::Base
belongs_to :academic_year
belongs_to :school
belongs_to :survey_item
end

@ -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

@ -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

@ -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"

@ -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']

@ -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')

@ -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' }

Loading…
Cancel
Save