require 'rails_helper'


RSpec.describe Loa::OrdenadoresDeDespesaController, type: :controller do
	sign_in_admin

	let(:atributos_validos) {
		FactoryBot.attributes_for(:ordenador_de_despesa)
	}

	let(:atributos_invalidos) {
		{unidade_orcamentaria_id: ""}
	}



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

	describe "GET #new" do
		it "atribui um(a) novo(a) ordenadordedespesa à @ordenadordedespesa" do
			unidade_orcamentaria =  Loa::UnidadeOrcamentaria.find_or_create_by!( FactoryBot.attributes_for( :loa_hgf,:orcamento_2016 ))
			get :new, params: {id: unidade_orcamentaria.id}
			expect(assigns(:ordenador_de_despesa)).to be_a_new(Loa::OrdenadorDeDespesa)
		end
	end

	describe "GET #edit" do
		it "atribui o(a) ordenadordedespesa requisitado à @ordenadordedespesa" do
			ordenador_de_despesa = Loa::OrdenadorDeDespesa.create! atributos_validos
			get :edit, params: {id: ordenador_de_despesa.to_param}
			expect(assigns(:ordenador_de_despesa)).to eq(ordenador_de_despesa)
		end
	end

	describe "POST #create" do
		context "com parâmetros válidos" do
			it "cria um(a) novo(a) Loa::OrdenadorDeDespesa" do
				expect {
					unidade_orcamentaria =  Loa::UnidadeOrcamentaria.find_or_create_by!( FactoryBot.attributes_for( :loa_hgf,:orcamento_2016 ))
					agente_publico =  Base::AgentePublicoMunicipal.find_or_create_by!( FactoryBot.attributes_for( :agente_publico))
					post :create, params: {loa_ordenador_de_despesa: atributos_validos, id:unidade_orcamentaria.id, agente_publico_id: agente_publico.id}
				}.to change(Loa::OrdenadorDeDespesa, :count).by(1)
			end

			it "redireciona para o(a) ordenadordedespesa criado(a)" do
				unidade_orcamentaria =  Loa::UnidadeOrcamentaria.find_or_create_by!( FactoryBot.attributes_for( :loa_hgf,:orcamento_2016 ))
				post :create, params: {loa_ordenador_de_despesa: atributos_validos, id:unidade_orcamentaria.id}
				expect(response).to redirect_to(Loa::OrdenadorDeDespesa.last)
			end
		end

		context "com parâmetros inválidos" do
			it "atribui um(a) ordenadordedespesa recém criado(a), mas não salvo(a), à @ordenadordedespesa" do
				unidade_orcamentaria =  Loa::UnidadeOrcamentaria.find_or_create_by!( FactoryBot.attributes_for( :loa_hgf,:orcamento_2016 ))
				post :create, params: {loa_ordenador_de_despesa: atributos_invalidos, id:unidade_orcamentaria.id}
				expect(assigns(:ordenador_de_despesa)).to be_a_new(Loa::OrdenadorDeDespesa)
			end

			it "re-renderiza o template 'new'" do
				unidade_orcamentaria =  Loa::UnidadeOrcamentaria.find_or_create_by!( FactoryBot.attributes_for( :loa_hgf,:orcamento_2016 ))
				post :create, params: {loa_ordenador_de_despesa: atributos_invalidos, id:unidade_orcamentaria.id}
				expect(response).to render_template("new")
			end
		end
	end

	describe "PUT #update" do
		context "com parâmetros inválidos" do
			it "atribui o(a) ordenadordedespesa à @ordenadordedespesa" do
				ordenador_de_despesa = Loa::OrdenadorDeDespesa.create! atributos_validos
				post :update, params: {id: ordenador_de_despesa.to_param, loa_ordenador_de_despesa: atributos_invalidos}
				expect(assigns(:ordenador_de_despesa)).to eq(ordenador_de_despesa)
			end

			it "re-renderiza o template 'edit'" do
				ordenador_de_despesa = Loa::OrdenadorDeDespesa.create! atributos_validos
				post :update, params: {id: ordenador_de_despesa.to_param, loa_ordenador_de_despesa: atributos_invalidos}
				expect(response).to render_template("edit")
			end
		end
	end

	describe "DELETE #destroy" do
		it "destrói o(a) ordenadordedespesa requisitado(a)" do

			ordenador_de_despesa = Loa::OrdenadorDeDespesa.create! atributos_validos
			expect {
				delete :destroy, params: {:id => ordenador_de_despesa.to_param}
			}.to change(Loa::OrdenadorDeDespesa, :count).by(-1)
		end

		it "redireciona para a lista de ordenadordedespesas" do
			ordenador_de_despesa = Loa::OrdenadorDeDespesa.create! atributos_validos
			delete :destroy, params: {:id => ordenador_de_despesa.to_param}
			expect(response).to redirect_to(ordenador_de_despesa.unidade_orcamentaria)
		end
	end
end
