require 'rails_helper'


RSpec.describe Contabilidade::DespesasExtraOrcamentariasController, type: :controller do
	sign_in_admin
	cria_configuracao_default
	set_contabilidade_na_sessao

	let(:atributos_validos) {
		FactoryBot.attributes_for(
			:despesa_extra_orcamentaria,
			conta_bancaria_id: Base::ContaBancaria.find_or_create_by!( FactoryBot.attributes_for(:conta_bancaria) ).id,
			unidade_orcamentaria_id: Loa::UnidadeOrcamentaria.find_or_create_by!(FactoryBot.attributes_for(:loa_hgf, :orcamento_2016)).id
		)
	}

	let(:atributos_invalidos) {
		{valor_da_despesa: 0.0}
	}


	describe "GET #index" do
		it "atribui a lista de despesasExtraOrcamentarias à @despesasExtraOrcamentarias" do
			despesa_extra_orcamentaria = Contabilidade::DespesaExtraOrcamentaria.create! atributos_validos
			get :index, exercicio: @contabilidade.exercicio
			expect(assigns(:despesas_extra_orcamentarias)).to eq([despesa_extra_orcamentaria])
		end
	end

	describe "GET #show" do
		it "atribui a despesaextraorcamentaria requisitado(a) à @despesaextraorcamentaria" do
			despesa_extra_orcamentaria = Contabilidade::DespesaExtraOrcamentaria.create! atributos_validos
			get :show, params: {id: despesa_extra_orcamentaria.to_param}
			expect(assigns(:despesa_extra_orcamentaria)).to eq(despesa_extra_orcamentaria)
		end
	end

	describe "GET #new" do
		it "atribui um(a) novo(a) despesaextraorcamentaria à @despesaextraorcamentaria" do
			get :new, exercicio: @contabilidade.exercicio
			expect(assigns(:despesa_extra_orcamentaria)).to be_a_new(Contabilidade::DespesaExtraOrcamentaria)
		end
	end

	describe "POST #create" do
		context "com parâmetros válidos" do
			it "cria um(a) novo(a) Contabilidade::DespesaExtraOrcamentaria" do
				expect {
					post :create, params: {contabilidade_despesa_extra_orcamentaria: atributos_validos, exercicio: @contabilidade.exercicio}
				}.to change(Contabilidade::DespesaExtraOrcamentaria, :count).by(1)
			end

			it "atribui o(a) despesaextraorcamentaria recém criado(a) à @despesaextraorcamentaria" do
				post :create, params: {contabilidade_despesa_extra_orcamentaria: atributos_validos, exercicio: @contabilidade.exercicio}
				expect(assigns(:despesa_extra_orcamentaria)).to be_a(Contabilidade::DespesaExtraOrcamentaria)
				expect(assigns(:despesa_extra_orcamentaria)).to be_persisted
			end

			it "redireciona para o(a) despesaextraorcamentaria criado(a)" do
				post :create, params: {:contabilidade_despesa_extra_orcamentaria => atributos_validos, exercicio: @contabilidade.exercicio}
				expect(response).to redirect_to(Contabilidade::DespesaExtraOrcamentaria.last)
			end
		end

		context "com parâmetros inválidos" do
			it "atribui um(a) despesaextraorcamentaria recém criado(a), mas não salvo(a), à @despesaextraorcamentaria" do
				post :create, params: {contabilidade_despesa_extra_orcamentaria: atributos_invalidos, exercicio: @contabilidade.exercicio}
				expect(assigns(:despesa_extra_orcamentaria)).to be_a_new(Contabilidade::DespesaExtraOrcamentaria)
			end

			it "re-renderiza para lista de despesas orçamentárias" do
				post :create, params: {contabilidade_despesa_extra_orcamentaria: atributos_invalidos, exercicio: @contabilidade.exercicio}
				expect(response).to render_template("new")
			end
		end
	end
end

