@ -1,7 +1,6 @@
require 'rails_helper'
describe SurveyItemResponse , type : :model do
describe '.sufficient_data?' do
let ( :measure ) { create ( :measure ) }
let ( :school ) { create ( :school ) }
@ -9,16 +8,22 @@ describe SurveyItemResponse, type: :model do
context 'when the measure includes only teacher data' do
let ( :teacher_survey_item_1 ) { create ( :survey_item , survey_item_id : 't-question-1' , measure : measure ) }
let ( :teacher_survey_item_2 ) { create ( :survey_item , survey_item_id : 't-question-2' , measure : measure ) }
let ( :teacher_survey_item_3 ) { create ( :survey_item , survey_item_id : 't-question-3' , measure : measure ) }
context 'and there is sufficient teacher data' do
before :each do
SurveyItemResponse :: TEACHER_RESPONSE_THRESHOLD . times do
create ( :survey_item_response , survey_item : teacher_survey_item_1 , academic_year : ay , school : school )
4 . times do
create ( :survey_item_response , survey_item : teacher_survey_item_1 , academic_year : ay , school : school , likert_score : 3 )
create ( :survey_item_response , survey_item : teacher_survey_item_1 , academic_year : ay , school : school , likert_score : 5 )
create ( :survey_item_response , survey_item : teacher_survey_item_2 , academic_year : ay , school : school , likert_score : 3 )
create ( :survey_item_response , survey_item : teacher_survey_item_2 , academic_year : ay , school : school , likert_score : 5 )
end
create ( :survey_item_response , survey_item : teacher_survey_item_2 , academic_year : ay , school : school , likert_score : 4 )
end
it ' is truthy ' do
expect ( SurveyItemResponse . s ufficient_data?( measure : measure , academic_year : ay , school : school ) ) . to be_truthy
it ' returns the average of the likert scores of the survey items ' do
expect ( SurveyItemResponse . s core( measure : measure , school : school , academic_year : ay ) ) . to eq 4
end
end
@ -29,24 +34,28 @@ describe SurveyItemResponse, type: :model do
end
end
it ' is falsey ' do
expect ( SurveyItemResponse . s ufficient_data?( measure : measure , academic_year : ay , school : school ) ) . to be_falsey
it ' returns nil ' do
expect ( SurveyItemResponse . s core( measure : measure , school : school , academic_year : ay ) ) . to be_nil
end
end
end
context 'when the measure includes only student data' do
let ( :student_survey_item_1 ) { create ( :survey_item , survey_item_id : 's-question-1' , measure : measure ) }
let ( :student_survey_item_2 ) { create ( :survey_item , survey_item_id : 's-question-2' , measure : measure ) }
context 'and there is sufficient student data' do
before :each do
SurveyItemResponse :: STUDENT_RESPONSE_THRESHOLD . times do
create ( :survey_item_response , survey_item : student_survey_item_1 , academic_year : ay , school : school )
( SurveyItemResponse :: STUDENT_RESPONSE_THRESHOLD / 4 ) . times do
create ( :survey_item_response , survey_item : student_survey_item_1 , academic_year : ay , school : school , likert_score : 1 )
create ( :survey_item_response , survey_item : student_survey_item_1 , academic_year : ay , school : school , likert_score : 5 )
create ( :survey_item_response , survey_item : student_survey_item_2 , academic_year : ay , school : school , likert_score : 1 )
create ( :survey_item_response , survey_item : student_survey_item_2 , academic_year : ay , school : school , likert_score : 5 )
end
end
it ' is truthy ' do
expect ( SurveyItemResponse . s ufficient_data?( measure : measure , academic_year : ay , school : school ) ) . to be_truthy
it ' returns the average of the likert scores of the survey items ' do
expect ( SurveyItemResponse . s core( measure : measure , school : school , academic_year : ay ) ) . to eq 3
end
end
@ -57,8 +66,8 @@ describe SurveyItemResponse, type: :model do
end
end
it ' is falsey ' do
expect ( SurveyItemResponse . s ufficient_data?( measure : measure , academic_year : ay , school : school ) ) . to be_falsey
it ' returns nil ' do
expect ( SurveyItemResponse . s core( measure : measure , school : school , academic_year : ay ) ) . to be_nil
end
end
end
@ -70,15 +79,15 @@ describe SurveyItemResponse, type: :model do
context 'and there is sufficient teacher data and sufficient student data' do
before :each do
SurveyItemResponse :: TEACHER_RESPONSE_THRESHOLD . times do
create ( :survey_item_response , survey_item : teacher_survey_item_1 , academic_year : ay , school : school )
create ( :survey_item_response , survey_item : teacher_survey_item_1 , academic_year : ay , school : school , likert_score : 5 )
end
SurveyItemResponse :: STUDENT_RESPONSE_THRESHOLD . times do
create ( :survey_item_response , survey_item : student_survey_item_1 , academic_year : ay , school : school )
create ( :survey_item_response , survey_item : student_survey_item_1 , academic_year : ay , school : school , likert_score : 5 )
end
end
it ' is truthy ' do
expect ( SurveyItemResponse . s ufficient_data?( measure : measure , academic_year : ay , school : school ) ) . to be_truthy
it ' returns the average of the likert scores of the survey items ' do
expect ( SurveyItemResponse . s core( measure : measure , school : school , academic_year : ay ) ) . to eq 5
end
end
@ -92,8 +101,8 @@ describe SurveyItemResponse, type: :model do
end
end
it ' is falsey ' do
expect ( SurveyItemResponse . s ufficient_data?( measure : measure , academic_year : ay , school : school ) ) . to be_falsey
it ' returns nil ' do
expect ( SurveyItemResponse . s core( measure : measure , school : school , academic_year : ay ) ) . to be_nil
end
end
@ -107,8 +116,8 @@ describe SurveyItemResponse, type: :model do
end
end
it ' is falsey ' do
expect ( SurveyItemResponse . s ufficient_data?( measure : measure , academic_year : ay , school : school ) ) . to be_falsey
it ' returns nil ' do
expect ( SurveyItemResponse . s core( measure : measure , school : school , academic_year : ay ) ) . to be_nil
end
end
@ -122,8 +131,8 @@ describe SurveyItemResponse, type: :model do
end
end
it ' is falsey ' do
expect ( SurveyItemResponse . s ufficient_data?( measure : measure , academic_year : ay , school : school ) ) . to be_falsey
it ' returns nil ' do
expect ( SurveyItemResponse . s core( measure : measure , school : school , academic_year : ay ) ) . to be_nil
end
end
end