require 'rails_helper'

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

	let(:atributos_exercicio) { FactoryBot.attributes_for :orcamento_2016 }

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

	let(:atributos_invalidos) { FactoryBot.attributes_for(:irrf_pessoa_juridica_servicos_profissionais).except(:aliquota).merge({aliquota: ''}) }


	describe "GET #index" do
		it "atribui a lista de irrfpessoajuridicas à @irrfpessoajuridicas" do
			irrf_pessoa_juridica = Contabilidade::IrrfPessoaJuridica.create! atributos_validos
			get :index, exercicio: atributos_exercicio[:exercicio]
			expect(assigns(:irrfs_pessoas_juridicas)).to eq([irrf_pessoa_juridica])
		end
	end

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

	describe "GET #new" do
		it "atribui um(a) novo(a) irrfpessoajuridica à @irrfpessoajuridica" do
			get :new, exercicio: atributos_exercicio[:exercicio]
			expect(assigns(:irrf_pessoa_juridica)).to be_a_new(Contabilidade::IrrfPessoaJuridica)
		end
	end

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

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

			it "atribui o(a) irrfpessoajuridica recém criado(a) à @irrfpessoajuridica" do
				post :create, params: {exercicio: atributos_exercicio[:exercicio], contabilidade_irrf_pessoa_juridica: atributos_validos}
				expect(assigns(:irrf_pessoa_juridica)).to be_a(Contabilidade::IrrfPessoaJuridica)
				expect(assigns(:irrf_pessoa_juridica)).to be_persisted
			end

			it "redireciona para o(a) irrfpessoajuridica criado(a)" do
				post :create, params: {exercicio: atributos_exercicio[:exercicio], :contabilidade_irrf_pessoa_juridica => atributos_validos}
				expect(response).to redirect_to(Contabilidade::IrrfPessoaJuridica.last)
			end
		end

		context "com parâmetros inválidos" do
			it "atribui um(a) irrfpessoajuridica recém criado(a), mas não salvo(a), à @irrfpessoajuridica" do
				post :create, params: {exercicio: atributos_exercicio[:exercicio], contabilidade_irrf_pessoa_juridica: atributos_invalidos}
				expect(assigns(:irrf_pessoa_juridica)).to be_a_new(Contabilidade::IrrfPessoaJuridica)
			end

			it "re-renderiza o template 'new'" do
				post :create, params: {exercicio: atributos_exercicio[:exercicio], contabilidade_irrf_pessoa_juridica: 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) {
				{aliquota: 1.0}
			}

			it "atualiza o(a) irrfpessoajuridica requisitado(a)" do
				irrf_pessoa_juridica = Contabilidade::IrrfPessoaJuridica.create! atributos_validos
				post :update, params: {id: irrf_pessoa_juridica.to_param, contabilidade_irrf_pessoa_juridica: novos_atributos}
				irrf_pessoa_juridica.reload
				expect(irrf_pessoa_juridica.aliquota.to_f).to eq 1.0
			end

			it "atribui o(a) irrfpessoajuridica requisitado(a) à @irrfpessoajuridica" do
				irrf_pessoa_juridica = Contabilidade::IrrfPessoaJuridica.create! atributos_validos
				post :update, params: {id: irrf_pessoa_juridica.to_param, contabilidade_irrf_pessoa_juridica: atributos_validos}
				expect(assigns(:irrf_pessoa_juridica)).to eq(irrf_pessoa_juridica)
			end

			it "redireciona para o(a) irrfpessoajuridica" do
				irrf_pessoa_juridica = Contabilidade::IrrfPessoaJuridica.create! atributos_validos
				post :update, params: {id: irrf_pessoa_juridica.to_param, contabilidade_irrf_pessoa_juridica: atributos_validos}
				expect(response).to redirect_to(irrf_pessoa_juridica)
			end
		end

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

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

	describe "DELETE #destroy" do
		it "destrói o(a) irrfpessoajuridica requisitado(a)" do
			irrf_pessoa_juridica = Contabilidade::IrrfPessoaJuridica.create! atributos_validos
			expect {
				delete :destroy, params: {:id => irrf_pessoa_juridica.to_param}
			}.to change(Contabilidade::IrrfPessoaJuridica, :count).by(-1)
		end

		it "redireciona para a lista de irrfpessoajuridicas" do
			irrf_pessoa_juridica = Contabilidade::IrrfPessoaJuridica.create! atributos_validos
			delete :destroy, params: {:id => irrf_pessoa_juridica.to_param}
			expect(response).to redirect_to(contabilidade_irrfs_pessoas_juridicas_path(exercicio: irrf_pessoa_juridica.orcamento.exercicio))
		end
	end
end
