# frozen_string_literal: true require 'test_helper' class QuizControllerTest < ActionDispatch::IntegrationTest test "should redirect to saved on save" do auth_candidate candidates(:dawn) qid = questions(:fed5).id post post_answer_path, params: { save: 'Save', answer: { question_id: qid, answer: 'an option' } } assert_redirected_to saved_path assert session[:test_id].present? end test "should get flash message on bad radio response" do auth_candidate candidates(:dawn) qid = questions(:fed5).id post post_answer_path, params: { answer: { question_id: qid, answer: nil } } assert_response :success assert session[:test_id].present? assert_equal qid, flash[:error] assert assigns(:question), '@question not present' assert assigns(:answer), '@answer not present' end test "should get flash message on bad text response" do auth_candidate candidates(:dawn) qid = questions(:fed4).id post post_answer_path, params: { answer: { question_id: qid, answer: nil } } assert_response :success assert session[:test_id].present? assert_equal qid, flash[:error] assert assigns(:question), '@question not present' assert assigns(:answer), '@answer not present' end test "should process checkbox" do auth_candidate candidates(:dawn) qid = questions(:fed10).id post post_answer_path, params: { answer: { question_id: qid, answer_array: 'an-option' } } assert_response :success assert session[:test_id].present? assert assigns(:question), '@question not present' assert assigns(:answer), '@answer not present' end test 'should handle XHR update and complete progress' do auth_candidate candidates(:peggy) qid = questions(:fed10).id post post_answer_path, xhr: true, params: { answer: { question_id: qid, answer_array: ['an-option'] } } assert_response :success assert_match(/updated successfully/, JSON.parse(@response.body)['message']) assert_equal 100, JSON.parse(@response.body)['progress'] assert assigns(:question), '@question not present' assert assigns(:answer), '@answer not present' end test 'should handle XHR fail' do auth_candidate candidates(:peggy) qid = questions(:fed10).id post post_answer_path, xhr: true, params: { answer: { question_id: qid, answer_array: [nil] } } assert_response 400 assert_match(/select.*answer/i, JSON.parse(@response.body).join) assert assigns(:question), '@question not present' assert assigns(:answer), '@answer not present' end end