require 'rails_helper'

RSpec.describe ConsolidacaoPolicy do
  subject { described_class }

  let(:consolidacao)            { build(:consolidacao, status: :rascunho) }
  let(:consolidacao_finalizada) { build(:consolidacao, status: :finalizada) }

  permissions :index?, :show?, :create?, :new? do
    it 'libera para admin, gerente e operador' do
      %i[admin gerente operador].each do |papel|
        expect(subject).to permit(build(papel), Consolidacao)
      end
    end

    it 'nega para motorista' do
      expect(subject).not_to permit(build(:motorista), Consolidacao)
    end
  end

  permissions :update? do
    it 'permite operador editar rascunho' do
      expect(subject).to permit(build(:operador), consolidacao)
    end

    it 'impede operador de editar consolidação finalizada' do
      expect(subject).not_to permit(build(:operador), consolidacao_finalizada)
    end

    it 'permite gerente editar consolidação finalizada' do
      expect(subject).to permit(build(:gerente), consolidacao_finalizada)
    end
  end

  permissions :destroy? do
    it 'só permite admin e gerente' do
      expect(subject).to permit(build(:admin), consolidacao)
      expect(subject).to permit(build(:gerente), consolidacao)
      expect(subject).not_to permit(build(:operador), consolidacao)
    end
  end
end
