# frozen_string_literal: true
require 'test_helper'

class QuestionPolicyTest < PolicyAssertions::Test
  test 'should require current_user' do
    assert_raise Pundit::NotAuthorizedError do
      QuestionPolicy.new(nil, Question.first).view?
    end
  end

  test 'should allow admin to scope' do
    scope = QuestionPolicy::Scope.new(users(:admin), Question).resolve
    assert_equal Question.count, scope.count
  end

  test 'should allow manager to scope' do
    scope = QuestionPolicy::Scope.new(users(:manager), Question).resolve
    assert_equal Question.count, scope.count
  end

  test 'should allow reviewer to scope' do
    quiz_ids = users(:reviewer).quizzes.map(&:id)

    scope = QuestionPolicy::Scope.new(users(:reviewer), Question).resolve
    assert_equal Question.where(quiz_id: quiz_ids).count, scope.count
  end

  test 'should NOT allow recruiter to scope' do
    assert_raise Pundit::NotAuthorizedError do
      QuestionPolicy::Scope.new(users(:recruiter), Question).resolve
    end
  end

  def test_view_and_options
    assert_permit users(:admin), questions(:fed1)
    assert_permit users(:manager), questions(:fed1)
    assert_permit users(:reviewer), questions(:fed1)

    refute_permit users(:reviewer), questions(:admin1)
    refute_permit users(:recruiter), questions(:fed1)
  end

  def test_create_and_update
    assert_permit users(:admin), Question
    assert_permit users(:manager), Question

    refute_permit users(:recruiter), Question
    refute_permit users(:reviewer), Question
  end
end
