# frozen_string_literal: true require 'test_helper' class RecruiterControllerTest < ActionDispatch::IntegrationTest def setup_auth post recruiter_auth_url, params: { auth: { email: 'pdr.recruiter@mailinator.com', password: 'password' } } end test "should get login" do get recruiter_login_url assert_response :success end test 'should logout and reset session' do setup_auth get recruiter_logout_path assert :success assert session[:user].nil? end test "should require auth or redirect" do get recruiter_url assert_redirected_to recruiter_login_path get new_candidate_url assert_redirected_to recruiter_login_path post create_candidate_url, params: { candidate: { name: 'foo', email: 'bar', experience: 'baz' } } assert_redirected_to recruiter_login_path end test "should auth to index" do setup_auth assert_redirected_to recruiter_path assert session[:user].present? end test "should fail auth with flash" do post recruiter_auth_url, params: { auth: { email: 'pdr.recruiter@mailinator.com', password: 'bad-password' } } assert_redirected_to recruiter_login_path assert flash[:error] end test "should get candidate list" do setup_auth get recruiter_url assert_response :success assert assigns(:candidates), "@candidates not present" end test "should get new" do setup_auth get new_candidate_url assert_response :success assert assigns(:candidate), "@candidate not present" end test "should get create" do setup_auth get create_candidate_url assert_response :success end test "should create new candidate" do setup_auth assert_difference("ActionMailer::Base.deliveries.size", 2) do assert_difference("Candidate.count") do post create_candidate_path, params: { candidate: { name: 'new name', email: 'test@mailinator.com', experience: '0-3', quiz_id: quizzes(:fed).id } } end end assert_redirected_to recruiter_path assert flash[:success] end test "should fail creation with message" do setup_auth assert_difference("ActionMailer::Base.deliveries.size", 0) do assert_difference("Candidate.count", 0) do post create_candidate_path, params: { candidate: { name: 'new name', email: 'test@mailinatorcom', experience: '0-3', quiz_id: quizzes(:fed).id } } end end assert :success assert assigns(:candidate), "@candidate not present" assert_match(/failed.*save/i, flash[:error]) end end