# frozen_string_literal: true
require 'test_helper'

class RecruiterControllerTest < ActionDispatch::IntegrationTest
  include ActiveJob::TestHelper

  test "should get new" do
    auth_recruiter
    get new_candidate_url
    assert_response :success
    assert assigns(:candidate), "@candidate not present"
  end

  test "should get create" do
    auth_recruiter
    get create_candidate_url
    assert_response :success
  end

  test "should create new candidate" do
    auth_recruiter

    assert_enqueued_jobs 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 improper email format" do
    auth_recruiter

    assert_enqueued_jobs 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

  test "should fail creation gracefully with empty email" do
    auth_recruiter

    assert_enqueued_jobs 0 do
      assert_difference("Candidate.count", 0) do
        post create_candidate_path, params: { candidate:
          { name: 'new name', email: "", 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

  test 'should queue up a welcome email [resend]' do
    auth_recruiter

    assert_enqueued_jobs 1 do
      get resend_welcome_path(id: candidates(:peggy)), xhr: true
    end
    assert_response :success
    data = JSON.parse(response.body)
    assert_match 'queued', data["message"]
  end
end
