require 'rails_helper'

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

	describe "GET #index" do
		let(:projeto_pendente) { FactoryBot.create( :licitacao_projeto, status: :enviado_para_controladoria ) }
		let(:projeto_confirmado) { FactoryBot.create( :licitacao_projeto, status: :homologado ) }
		before(:each) do
			projeto_pendente
			projeto_confirmado
		end
		context 'quando é passado o parâmetro pendentes' do
			it 'atribui a lista de projetos pendentes à @projetos' do
				get :index, {pendentes: true}
				expect(assigns(:projetos).to_a).to eq([projeto_pendente])
			end
			context 'quando não é passado o parâmetro pendentes' do
				it "atribui à @projetos a lista de projetos que não estão pendentes" do
					get :index
					expect(assigns(:projetos).to_a).to eq([projeto_confirmado])
				end
			end
		end
	end

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

	describe 'PATCH #retornar_para_licitacao' do
		it 'atribui o status solicitado' do
			projeto = FactoryBot.create :licitacao_projeto, status: :enviado_para_controladoria
			_visto = FactoryBot.create :controladoria_visto, vistoriavel_id: projeto.id, aprovado: false, tipo: 0
			patch :retornar_para_licitacao, {id: projeto.to_param}
			expect(projeto.reload.aberto?).to be_truthy
		end
	end


	describe 'PATCH #enviar_para_copfin' do
		it 'atribui o status enviado_para_copfin' do
			projeto = FactoryBot.create :licitacao_projeto, status: :enviado_para_controladoria
			_visto = FactoryBot.create :controladoria_visto, vistoriavel_id: projeto.id, aprovado: true, tipo: 0
			patch :enviar_para_copfin, {id: projeto.to_param}
			expect(projeto.reload.enviado_para_copfin?).to be_truthy
		end
	end

	describe 'PATCH #enviar_para_confirmar_projeto' do
		it 'atribui o status enviar_para_confirmar_projeto' do
			projeto = FactoryBot.create :licitacao_projeto, status: :enviado_para_copfin
			_visto = FactoryBot.create :controladoria_visto, vistoriavel_id: projeto.id, aprovado: true, tipo: 1
			patch :enviar_para_confirmar_projeto, {id: projeto.to_param}
			expect(projeto.reload.aguardando_autorizacao?).to be_truthy
		end
	end
end
