require 'rails_helper'


RSpec.describe Contabilidade::ConfiguracoesDoEventoContabilController, type: :controller do
	sign_in_admin
	cria_configuracao_default
	set_orcamento_na_sessao

	# Isso deve retornar o mínimo de atributos obrigatórios para criar um
	# Contabilidade::ConfiguracaoDoEventoContabil válido.

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

	let(:atributos_invalidos) {
		{ evento_contabil_id: nil }
	}

	describe "GET #new" do
		it "atribui um(a) novo(a) configuracao_do_evento_contabil à @configuracao_do_evento_contabil" do
			evento_contabil = FactoryBot.create(:evento_contabil, :empenhar)
			get :new, params: { evento_contabil_id: evento_contabil.id }
			expect(assigns(:configuracao_do_evento_contabil)).to be_a_new(Contabilidade::ConfiguracaoDoEventoContabil)
		end
	end

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

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

			it "atribui o(a) configuracao_do_evento_contabil recém criado(a) à @configuracao_do_evento_contabil" do
				post :create, params: {contabilidade_configuracao_do_evento_contabil: atributos_validos}
				expect(assigns(:configuracao_do_evento_contabil)).to be_a(Contabilidade::ConfiguracaoDoEventoContabil)
				expect(assigns(:configuracao_do_evento_contabil)).to be_persisted
			end

			it "redireciona para o(a) configuracao_do_evento_contabil criado(a)" do
				post :create, params: {:contabilidade_configuracao_do_evento_contabil => atributos_validos}
				expect(response).to redirect_to(Contabilidade::ConfiguracaoDoEventoContabil.last.evento_contabil)
			end
		end

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

			it "re-renderiza o template 'new'" do
				post :create, params: {contabilidade_configuracao_do_evento_contabil: atributos_invalidos}
				expect(response).to render_template("new")
			end
		end
	end

	describe "PUT #update" do
		context "com parâmetros válidos" do
			let(:novos_atributos) {
				{ tipo_de_pessoa: "pessoa_juridica" }
			}

			it "atualiza o(a) configuracao_do_evento_contabil requisitado(a)" do
				configuracao_do_evento_contabil = Contabilidade::ConfiguracaoDoEventoContabil.create! atributos_validos
				put :update, params: {id: configuracao_do_evento_contabil.to_param, contabilidade_configuracao_do_evento_contabil: novos_atributos}
				configuracao_do_evento_contabil.reload
			end

			it "atribui o(a) configuracao_do_evento_contabil requisitado(a) à @configuracao_do_evento_contabil" do
				configuracao_do_evento_contabil = Contabilidade::ConfiguracaoDoEventoContabil.create! atributos_validos
				put :update, params: {id: configuracao_do_evento_contabil.to_param, contabilidade_configuracao_do_evento_contabil: atributos_validos}
				expect(assigns(:configuracao_do_evento_contabil)).to eq(configuracao_do_evento_contabil)
			end

			it "redireciona para o(a) configuracao_do_evento_contabil" do
				configuracao_do_evento_contabil = Contabilidade::ConfiguracaoDoEventoContabil.create! atributos_validos
				put :update, params: {id: configuracao_do_evento_contabil.to_param, contabilidade_configuracao_do_evento_contabil: atributos_validos}
				expect(response).to redirect_to(configuracao_do_evento_contabil.evento_contabil)
			end
		end

		context "com parâmetros inválidos" do
			it "atribui o(a) configuracao_do_evento_contabil à @configuracao_do_evento_contabil" do
				configuracao_do_evento_contabil = Contabilidade::ConfiguracaoDoEventoContabil.create! atributos_validos
				put :update, params: {id: configuracao_do_evento_contabil.to_param, contabilidade_configuracao_do_evento_contabil: atributos_invalidos}
				expect(assigns(:configuracao_do_evento_contabil)).to eq(configuracao_do_evento_contabil)
			end

			it "re-renderiza o template 'edit'" do
				configuracao_do_evento_contabil = Contabilidade::ConfiguracaoDoEventoContabil.create! atributos_validos
				put :update, params: {id: configuracao_do_evento_contabil.to_param, contabilidade_configuracao_do_evento_contabil: atributos_invalidos}
				expect(response).to render_template("edit")
			end
		end
	end
end

