You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
3.6 KiB
116 lines
3.6 KiB
require 'rails_helper'
|
|
|
|
module Legacy
|
|
describe Attempt, type: :model do
|
|
let!(:school) { School.create!(name: 'School') }
|
|
|
|
let!(:recipient) { school.recipients.create(name: 'name', phone: '1' * 9) }
|
|
let!(:recipient_list) do
|
|
school.recipient_lists.create!(name: 'Parents', recipient_ids: recipient.id.to_s)
|
|
end
|
|
|
|
let!(:category) { Category.create(name: 'Category') }
|
|
let!(:question) { create_questions(1, category).first }
|
|
let!(:question_list) do
|
|
QuestionList.create!(name: 'Parent Questions', question_ids: question.id.to_s)
|
|
end
|
|
|
|
let(:schedule) do
|
|
Schedule.create!(name: 'Parent Schedule', recipient_list_id: recipient_list.id, question_list: question_list)
|
|
end
|
|
|
|
let(:recipient_schedule) do
|
|
RecipientSchedule.create!(
|
|
recipient: recipient,
|
|
schedule: schedule,
|
|
upcoming_question_ids: "#{question.id},3",
|
|
attempted_question_ids: '2',
|
|
last_attempt_at: 2.weeks.ago,
|
|
next_attempt_at: Time.new
|
|
)
|
|
end
|
|
|
|
let!(:attempt) do
|
|
recipient.attempts.create(
|
|
schedule: schedule,
|
|
recipient_schedule: recipient_schedule,
|
|
question: question
|
|
)
|
|
end
|
|
|
|
describe 'after_save' do
|
|
let!(:school_categories) { SchoolCategory.for(attempt.recipient.school, attempt.question.category) }
|
|
|
|
xit 'creates the associated school_category' do
|
|
expect(school_categories.count).to eq(1)
|
|
expect(school_categories.first.attempt_count).to eq(1)
|
|
expect(school_categories.first.response_count).to eq(0)
|
|
expect(school_categories.first.answer_index_total).to eq(0)
|
|
end
|
|
|
|
describe 'after_update' do
|
|
before :each do
|
|
attempt.update(answer_index: 4)
|
|
end
|
|
|
|
xit 'updates associated school_categories' do
|
|
expect(school_categories.count).to eq(1)
|
|
expect(school_categories.first.attempt_count).to eq(1)
|
|
expect(school_categories.first.response_count).to eq(1)
|
|
expect(school_categories.first.answer_index_total).to eq(4)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'counters' do
|
|
it 'are updated when an attempt is created' do
|
|
expect(recipient.attempts_count).to eq(1)
|
|
expect(recipient.responses_count).to eq(0)
|
|
end
|
|
|
|
it 'are updated when an attempt is destroyed' do
|
|
attempt.destroy
|
|
expect(recipient.attempts_count).to eq(0)
|
|
expect(recipient.responses_count).to eq(0)
|
|
end
|
|
|
|
it 'are updated when an attempt is responded to' do
|
|
attempt.update(answer_index: 2)
|
|
expect(recipient.attempts_count).to eq(1)
|
|
expect(recipient.responses_count).to eq(1)
|
|
end
|
|
|
|
it 'are updated when an attempt is responded to with an open-ended response' do
|
|
attempt.update(open_response_id: 1)
|
|
expect(recipient.attempts_count).to eq(1)
|
|
expect(recipient.responses_count).to eq(1)
|
|
end
|
|
end
|
|
|
|
describe 'send_message' do
|
|
before :each do
|
|
Timecop.freeze
|
|
attempt.send_message
|
|
end
|
|
|
|
it 'should contact the Twilio API' do
|
|
expect(FakeSMS.messages.length).to eq(2)
|
|
|
|
expect(FakeSMS.messages.first.to).to eq('111111111')
|
|
expect(FakeSMS.messages.first.body).to eq('Question 0:1')
|
|
|
|
expect(FakeSMS.messages.last.to).to eq('111111111')
|
|
expect(FakeSMS.messages.last.body).to eq("Option 0:1 A: Reply 1\nOption 0:1 B: 2\nOption 0:1 C: 3\nOption 0:1 D: 4\nOption 0:1 E: 5")
|
|
end
|
|
|
|
xit 'should update sent_at' do
|
|
expect(attempt.sent_at).to eq(Time.new)
|
|
end
|
|
|
|
it 'should update the recipient phone number' do
|
|
expect(attempt.recipient.reload.phone).to eq('+1111111111')
|
|
end
|
|
end
|
|
end
|
|
end
|