require 'rails_helper'

RSpec.describe Tcm::Lote, type: :model do
	cria_configuracao_default

	it{ is_expected.to belong_to(:orcamento).required }
	it{ is_expected.to have_many(:arquivos).dependent(:destroy) }

	it{ is_expected.to validate_presence_of :orcamento_id }
	it{ is_expected.to validate_presence_of :tipo }

	it 'gera arquivos de orgaos' do
		@orgao = FactoryBot.build(:loa_secretaria_de_saude, :orcamento_2016)
		@orgao.save
		@lote = FactoryBot.build(:tcm_lote, orcamento: @orgao.orcamento)
		@lote.save

		expect(@lote.arquivos.size).to eq 2
	end

	it 'gera_arquivo_de_orcamento' do
		@orcamento = FactoryBot.build(:orcamento_2016)
		@orcamento.save
		@lote = FactoryBot.build(:tcm_lote, orcamento: @orcamento)
		@lote.save

		expect(@lote.arquivos.size).to eq 1
	end

	it 'gera_arquivo_de_orcamentos_das_receitas' do
		@orcamento_da_receita = FactoryBot.build(:orcamento_da_receita_saude)
		@orcamento_da_receita.save
		@lote = FactoryBot.build(:tcm_lote, orcamento: @orcamento_da_receita.unidade_orcamentaria_por_natureza_da_receita.unidade_orcamentaria.orgao.orcamento)
		@lote.save

		expect(@lote.arquivos.size).to eq 4
	end

	it 'gera_arquivo_de_programas_de_governo' do
		@programa = FactoryBot.build(:programa_bolsa_familia, :orcamento_2016)
		@programa.save
		@lote = FactoryBot.build(:tcm_lote, orcamento: @programa.orcamento)
		@lote.save

		expect(@lote.arquivos.size).to eq 2
	end

	it 'gera_arquivo_de_orcamentos_da_despesa_e_elementos_da_despesa_e_despesas_por_projetos' do
		@orcamento_da_despesa = FactoryBot.build(:orcamento_da_despesa_saude)
		@orcamento_da_despesa.save
		@lote = FactoryBot.build(:tcm_lote, orcamento: @orcamento_da_despesa.elemento_de_despesa_por_subacao.subacao.unidade_orcamentaria.orgao.orcamento)
		@lote.save

		expect(@lote.arquivos.size).to eq 7
	end

	it 'gera_arquivo_de_orcamento_das_despesas_por_projetos' do

		@subacao = FactoryBot.build(:subacao_1005_0001, :com_tipo_de_orcamento, :orcamento_2016)
		@subacao.save
		@lote = FactoryBot.build(:tcm_lote, orcamento: @subacao.unidade_orcamentaria.orgao.orcamento)
		@lote.save

		expect(@lote.arquivos.size).to eq 5
	end

	it 'gerar_arquivo_de_unidades_orcamentarias' do
		@unidade_orcamentaria = FactoryBot.build(:loa_hgf, :orcamento_2016)
		@unidade_orcamentaria.save
		@lote = FactoryBot.build(:tcm_lote, orcamento: @unidade_orcamentaria.orgao.orcamento)
		@lote.save

		expect(@lote.arquivos.size).to eq 3
	end

	describe 'limpa arquivos' do
		it 'dos órgãos' do
			@orgao = FactoryBot.build(:loa_secretaria_de_saude, :orcamento_2016)
			@orgao.save
			@lote = FactoryBot.build(:tcm_lote, orcamento: @orgao.orcamento)
			@lote.save
			@lote.limpa_arquivos

			expect(@orgao.reload.arquivo_id).to eq nil
		end

		it 'do orçamento' do
			@orcamento = FactoryBot.build(:orcamento_2016)
			@orcamento.save
			@lote = FactoryBot.build(:tcm_lote, orcamento: @orcamento)
			@lote.save
			@lote.limpa_arquivos

			expect(@orcamento.reload.arquivo_id).to eq nil
		end

		it 'dos orcamentos_das_receitas' do
			@orcamento_da_receita = FactoryBot.build(:orcamento_da_receita_saude)
			@orcamento_da_receita.save
			@lote = FactoryBot.build(:tcm_lote, orcamento: @orcamento_da_receita.unidade_orcamentaria_por_natureza_da_receita.unidade_orcamentaria.orgao.orcamento)
			@lote.save
			@lote.limpa_arquivos

			expect(@orcamento_da_receita.reload.arquivo_id).to eq nil
		end

		it 'dos programas_de_governo' do
			@programa = FactoryBot.build(:programa_bolsa_familia, :orcamento_2016)
			@programa.save
			@lote = FactoryBot.build(:tcm_lote, orcamento: @programa.orcamento)
			@lote.save
			@lote.limpa_arquivos

			expect(@programa.reload.arquivo_id).to eq nil
		end

		it 'dos orcamentos_da_despesa_e_elementos_da_despesa_e_despesas_por_projetos' do
			@orcamento_da_despesa = FactoryBot.build(:orcamento_da_despesa_saude)
			@orcamento_da_despesa.save
			@lote = FactoryBot.build(:tcm_lote, orcamento: @orcamento_da_despesa.elemento_de_despesa_por_subacao.subacao.unidade_orcamentaria.orgao.orcamento)
			@lote.save
			@lote.limpa_arquivos

			expect(@orcamento_da_despesa.reload.arquivo_id).to eq nil
		end

		it 'das unidades_orcamentarias' do
			@unidade_orcamentaria = FactoryBot.build(:loa_hgf, :orcamento_2016)
			@unidade_orcamentaria.save
			@lote = FactoryBot.build(:tcm_lote, orcamento: @unidade_orcamentaria.orgao.orcamento)
			@lote.save
			@lote.limpa_arquivos

			expect(@unidade_orcamentaria.reload.arquivo_id).to eq nil
		end
	end

	describe 'existem_dados_do_orcamento_a_serem_enviados' do
		it 'existem dados para o tipo orcamento' do
			@orcamento = FactoryBot.build(:orcamento_2016)
			@orcamento.save
			@lote = FactoryBot.build(:tcm_lote, orcamento: @orcamento, tipo: :orcamento)
			@lote.validate

			expect( @lote.errors[:tipo] ).to_not include "no momento não existem dados a enviar para o tipo selecionado."
		end

		it 'não existem para o tipo orcamento' do
			@orcamento = FactoryBot.build(:orcamento_2016, arquivo_id: 1)
			@orcamento.save

			@lote = FactoryBot.build(:tcm_lote, orcamento: @orcamento, tipo: :orcamento)
			@lote.validate

			expect( @lote.errors[:tipo] ).to include "no momento não existem dados a enviar para o tipo selecionado."
		end
	end
end
