mirror of
https://github.com/edcommonwealth/sqm-dashboards.git
synced 2026-03-07 13:38:18 -08:00
instead of hard coded values. Produce a clean csv and a csv with all the removed values and columns with reason for removal. Add script for running cleaning for each project
194 lines
8.6 KiB
Ruby
194 lines
8.6 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe SurveyItemValues, type: :model do
|
|
let(:headers) do
|
|
["StartDate", "EndDate", "Status", "IPAddress", "Progress", "Duration (in seconds)", "Finished", "RecordedDate",
|
|
"ResponseId", "RecipientLastName", "RecipientFirstName", "RecipientEmail", "ExternalReference", "LocationLatitude", "LocationLongitude", "DistributionChannel", "UserLanguage", "District", "School- Lee", "School- Maynard", "LASID", "Grade", "s-emsa-q1", "s-emsa-q2", "s-emsa-q3", "s-tint-q1", "s-tint-q2", "s-tint-q3", "s-tint-q4", "s-tint-q5", "s-acpr-q1", "s-acpr-q2", "s-acpr-q3", "s-acpr-q4", "s-cure-q1", "s-cure-q2", "s-cure-q3", "s-cure-q4", "s-sten-q1", "s-sten-q2", "s-sten-q3", "s-sper-q1", "s-sper-q2", "s-sper-q3", "s-sper-q4", "s-civp-q1", "s-civp-q2", "s-civp-q3", "s-civp-q4", "s-grmi-q1", "s-grmi-q2", "s-grmi-q3", "s-grmi-q4", "s-appa-q1", "s-appa-q2", "s-appa-q3", "s-peff-q1", "s-peff-q2", "s-peff-q3", "s-peff-q4", "s-peff-q5", "s-peff-q6", "s-sbel-q1", "s-sbel-q2", "s-sbel-q3", "s-sbel-q4", "s-sbel-q5", "s-phys-q1", "s-phys-q2", "s-phys-q3", "s-phys-q4", "s-vale-q1", "s-vale-q2", "s-vale-q3", "s-vale-q4", "s-acst-q1", "s-acst-q2", "s-acst-q3", "s-sust-q1", "s-sust-q2", "s-grit-q1", "s-grit-q2", "s-grit-q3", "s-grit-q4", "s-expa-q1", "s-poaf-q1", "s-poaf-q2", "s-poaf-q3", "s-poaf-q4", "s-tint-q1-1", "s-tint-q2-1", "s-tint-q3-1", "s-tint-q4-1", "s-tint-q5-1", "s-acpr-q1-1", "s-acpr-q2-1", "s-acpr-q3-1", "s-acpr-q4-1", "s-peff-q1-1", "s-peff-q2-1", "s-peff-q3-1", "s-peff-q4-1", "s-peff-q5-1", "s-peff-q6-1", "Gender", "Race"]
|
|
end
|
|
let(:genders) do
|
|
create(:gender, qualtrics_code: 1)
|
|
gender_hash = {}
|
|
|
|
Gender.all.each do |gender|
|
|
gender_hash[gender.qualtrics_code] = gender
|
|
end
|
|
gender_hash
|
|
end
|
|
let(:survey_items) { [] }
|
|
let(:attleboro) do
|
|
create(:school, name: "Attleboro", dese_id: 1234)
|
|
end
|
|
let(:attleboro_respondents) do
|
|
create(:respondent, school: attleboro, academic_year: ay_2022_23, nine: 40, ten: 40, eleven: 40, twelve: 40)
|
|
end
|
|
let(:schools) { School.school_hash }
|
|
let(:recorded_date) { "2023-04-01" }
|
|
let(:ay_2022_23) do
|
|
create(:academic_year, range: "2022-23")
|
|
end
|
|
|
|
context ".response_date" do
|
|
it "returns the recorded date" do
|
|
row = {"RecordedDate" => "2017-01-01"}
|
|
values = SurveyItemValues.new(row:, headers:, genders:, survey_items:, schools:)
|
|
expect(values.response_date).to eq Date.parse("2017-01-01")
|
|
end
|
|
end
|
|
|
|
context ".school" do
|
|
it "returns the school that maps to the dese id provided" do
|
|
attleboro
|
|
row = {"Dese ID" => "1234"}
|
|
values = SurveyItemValues.new(row:, headers:, genders:, survey_items:, schools:)
|
|
expect(values.school).to eq attleboro
|
|
|
|
row = {"DeseID" => "1234"}
|
|
values = SurveyItemValues.new(row:, headers:, genders:, survey_items:, schools:)
|
|
expect(values.school).to eq attleboro
|
|
end
|
|
end
|
|
|
|
context ".grade" do
|
|
it "returns the grade that maps to the grade provided" do
|
|
row = {"Grade" => "1"}
|
|
values = SurveyItemValues.new(row:, headers:, genders:, survey_items:, schools:)
|
|
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"}
|
|
values = SurveyItemValues.new(row:, headers:, genders:, survey_items:, schools:)
|
|
expect(values.gender.qualtrics_code).to eq 1
|
|
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.survey_type).to eq :student
|
|
|
|
headers = %w[t-sbel-q5 t-phys-q2]
|
|
values = SurveyItemValues.new(row: {}, headers:, genders:, survey_items:, schools:)
|
|
expect(values.survey_type).to eq :teacher
|
|
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
|
|
|
|
context "when duration is invalid" do
|
|
it "returns false" do
|
|
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
|
|
|
|
headers = ["t-sbel-q5", "t-phys-q2", "Duration (in seconds)"]
|
|
values = SurveyItemValues.new(row: {"Duration (in seconds)" => "299"}, headers:, genders:, survey_items:,
|
|
schools:)
|
|
expect(values.valid_duration?).to eq false
|
|
end
|
|
end
|
|
end
|
|
|
|
context ".valid_progress" do
|
|
context "when progress is valid" do
|
|
it "returns true" do
|
|
headers = %w[s-sbel-q5 s-phys-q2 RecordedDate]
|
|
values = SurveyItemValues.new(row: {"Progress" => "25"}, headers:, genders:, survey_items:,
|
|
schools:)
|
|
expect(values.valid_progress?).to eq true
|
|
end
|
|
end
|
|
|
|
context "when progress is invalid" do
|
|
it "returns false" do
|
|
headers = %w[s-sbel-q5 s-phys-q2 RecordedDate]
|
|
values = SurveyItemValues.new(row: {"Progress" => "24"}, headers:, genders:, survey_items:,
|
|
schools:)
|
|
expect(values.valid_progress?).to eq false
|
|
end
|
|
end
|
|
end
|
|
|
|
context ".valid_grade?" do
|
|
context "when grade is valid" do
|
|
before :each do
|
|
attleboro
|
|
attleboro_respondents
|
|
end
|
|
it "returns true for students" do
|
|
headers = %w[s-sbel-q5 s-phys-q2 grade RecordedDate]
|
|
values = SurveyItemValues.new(row: {"grade" => "9", "RecordedDate" => recorded_date, "Dese ID" => "1234"}, headers:, genders:, survey_items:,
|
|
schools:)
|
|
|
|
expect(values.valid_grade?).to eq true
|
|
end
|
|
it "returns true for teachers" do
|
|
headers = %w[t-sbel-q5 t-phys-q2 grade RecordedDate]
|
|
values = SurveyItemValues.new(row: {"RecordedDate" => recorded_date, "Dese ID" => "1234"}, headers:, genders:, survey_items:,
|
|
schools:)
|
|
expect(values.valid_grade?).to eq true
|
|
end
|
|
end
|
|
|
|
context "when grade is invalid" do
|
|
before :each do
|
|
attleboro
|
|
attleboro_respondents
|
|
end
|
|
it "returns false" do
|
|
headers = %w[s-sbel-q5 s-phys-q2 grade RecordedDate]
|
|
values = SurveyItemValues.new(row: {"grade" => "2", "RecordedDate" => recorded_date, "Dese ID" => "1234"}, headers:, genders:, survey_items:,
|
|
schools: School.school_hash)
|
|
expect(values.valid_grade?).to eq false
|
|
end
|
|
end
|
|
end
|
|
|
|
context ".valid_sd?" do
|
|
context "when the standard deviation is valid" do
|
|
it "returns true for student questions" do
|
|
headers = %w[s-sbel-q5 s-phys-q1 s-phys-q2 RecordedDate]
|
|
values = SurveyItemValues.new(row: {"RecordedDate" => recorded_date, "Dese ID" => "1234", "s-sbel-q5" => "1", "s-phys-q1" => "", "s-phys-q2" => "5"}, headers:, genders:, survey_items:,
|
|
schools: School.school_hash)
|
|
expect(values.valid_sd?).to eq true
|
|
end
|
|
it "returns true for teacher questions" do
|
|
headers = %w[t-sbel-q5 t-phys-q2]
|
|
values = SurveyItemValues.new(row: {"RecordedDate" => recorded_date, "Dese ID" => "1234", "t-sbel-q5" => "1", "t-phys-q2" => "5"}, headers:, genders:, survey_items:,
|
|
schools: School.school_hash)
|
|
expect(values.valid_sd?).to eq true
|
|
end
|
|
end
|
|
|
|
context "when the standard deviation is invalid" do
|
|
it "returns false for student questions" do
|
|
headers = %w[s-sbel-q5 s-phys-q1 s-phys-q2 RecordedDate]
|
|
values = SurveyItemValues.new(row: {"RecordedDate" => recorded_date, "Dese ID" => "1234", "s-sbel-q5" => "1", "s-phys-q2" => "", "s-phys-q2" => "1"}, headers:, genders:, survey_items:,
|
|
schools: School.school_hash)
|
|
expect(values.valid_sd?).to eq false
|
|
end
|
|
it "returns false for teacher questions" do
|
|
headers = %w[t-sbel-q5 t-phys-q1 t-phys-q2 RecordedDate]
|
|
values = SurveyItemValues.new(row: {"RecordedDate" => recorded_date, "Dese ID" => "1234", "t-sbel-q5" => "1", "t-phys-q2" => "", "t-phys-q2" => "1"}, headers:, genders:, survey_items:,
|
|
schools: School.school_hash)
|
|
expect(values.valid_sd?).to eq false
|
|
end
|
|
end
|
|
end
|
|
end
|