require 'rails_helper'

RSpec.describe Controladoria::LiquidacoesController, type: :controller do
	sign_in_admin
	cria_configuracao_default
	set_controladoria_na_sessao

	before :all do
		DatabaseCleaner.strategy = :transaction
		DatabaseCleaner.start

		FactoryBot.create(:empenho, status: Contabilidade::Empenho.status[:confirmado])
	end

	after :all do
		DatabaseCleaner.clean
	end

	describe "GET #index" do
		let(:liquidacao_pendente) { liquidacao = FactoryBot.create( :liquidacao_001, status: :enviado_para_controladoria ) }
		let(:liquidacao_confirmada) { liquidacao = FactoryBot.create( :liquidacao_001, status: :confirmado ) }
		before do
			liquidacao_pendente
			liquidacao_confirmada
		end
		context 'quando é passado o parâmetro pendentes' do
			it 'atribui a lista de liquidações pendentes à @liquidacoes' do
				get :index, {pendentes: true}
				expect(assigns(:liquidacoes).to_a).to eq([liquidacao_pendente])
			end
			context 'quando não é passado o parâmetro pendentes' do
				it "atribui à @liquidacoes a lista de liquidações que não estão pendentes" do
					get :index
					expect(assigns(:liquidacoes).to_a).to eq([liquidacao_confirmada])
				end
			end
		end
	end

	describe "GET #show" do
		context 'quando liquidacao está em fase de solicitação' do
			it 'atribui a liquidacao requisitadoa à @liquidacao' do
				liquidacao = FactoryBot.create( :liquidacao_001, status: :enviado_para_controladoria )
				get :show, params: {id: liquidacao.to_param}
				expect(assigns(:liquidacao)).to eq(liquidacao)
			end
		end
	end

	describe 'PATCH #retornar_para_administrativo' do
		it 'atribui o status solicitado' do
			liquidacao = FactoryBot.create :liquidacao_001, status: :enviado_para_controladoria
			_visto = FactoryBot.create :controladoria_visto, vistoriavel: liquidacao, aprovado: false, tipo: 'controladoria'
			patch :retornar_para_administrativo, {id: liquidacao.to_param}
			expect(liquidacao.reload.solicitado?).to be_truthy
		end
	end

	describe 'PATCH #confirmar' do
		it 'atribui o status confirmado' do
			liquidacao = FactoryBot.create :liquidacao_001, status: :enviado_para_controladoria
			_visto = FactoryBot.create :controladoria_visto, vistoriavel: liquidacao, aprovado: true, tipo: 'controladoria'
			patch :confirmar, {id: liquidacao.to_param}
			expect(liquidacao.reload.confirmado?).to be_truthy
		end
	end
end
