require 'rails_helper'

RSpec.describe ImportacaoTcm::LoaDespesa, type: :model do

	let(:dados_orcamentos_da_despesa) {
		[
			{
				"codigo_municipio" => "057",
				"exercicio_orcamento" => "201600",
				"codigo_orgao" => "18",
				"codigo_unidade" => "101",
				"codigo_funcao" => "04",
				"codigo_subfuncao" => "126",
				"codigo_programa" => "0001",
				"codigo_projeto_atividade" => "1",
				"numero_projeto_atividade" => "065",
				"numero_subprojeto_atividade" => "0001",
				"codigo_elemento_despesa" => "33903000",
				"valor_atual_categoria_economica" => "0.0000",
				"valor_orcado_categoria_economica" => "50000.0000",
				"tipo_fonte" => "1",
				"codigo_fonte" => "01"
			},
			{
				"codigo_municipio" => "057",
				"exercicio_orcamento" => "201600",
				"codigo_orgao" => "18",
				"codigo_unidade" => "101",
				"codigo_funcao" => "04",
				"codigo_subfuncao" => "126",
				"codigo_programa" => "0001",
				"codigo_projeto_atividade" => "1",
				"numero_projeto_atividade" => "065",
				"numero_subprojeto_atividade" => "0001",
				"codigo_elemento_despesa" => "33903500",
				"valor_atual_categoria_economica" => "0.0000",
				"valor_orcado_categoria_economica" => "10000.0000",
				"tipo_fonte" => "1",
				"codigo_fonte" => "01"
			},
			{
				"codigo_municipio" => "057",
				"exercicio_orcamento" => "201600",
				"codigo_orgao" => "18",
				"codigo_unidade" => "101",
				"codigo_funcao" => "04",
				"codigo_subfuncao" => "126",
				"codigo_programa" => "0001",
				"codigo_projeto_atividade" => "1",
				"numero_projeto_atividade" => "065",
				"numero_subprojeto_atividade" => "0001",
				"codigo_elemento_despesa" => "33903900",
				"valor_atual_categoria_economica" => "0.0000",
				"valor_orcado_categoria_economica" => "100000.0000",
				"tipo_fonte" => "1",
				"codigo_fonte" => "01"
			},
			{
				"codigo_municipio" => "057",
				"exercicio_orcamento" => "201600",
				"codigo_orgao" => "18",
				"codigo_unidade" => "101",
				"codigo_funcao" => "04",
				"codigo_subfuncao" => "126",
				"codigo_programa" => "0001",
				"codigo_projeto_atividade" => "1",
				"numero_projeto_atividade" => "065",
				"numero_subprojeto_atividade" => "0001",
				"codigo_elemento_despesa" => "44903500",
				"valor_atual_categoria_economica" => "0.0000",
				"valor_orcado_categoria_economica" => "29000.0000",
				"tipo_fonte" => "1",
				"codigo_fonte" => "01"
			},
			{
				"codigo_municipio" => "057",
				"exercicio_orcamento" => "201600",
				"codigo_orgao" => "18",
				"codigo_unidade" => "101",
				"codigo_funcao" => "04",
				"codigo_subfuncao" => "126",
				"codigo_programa" => "0001",
				"codigo_projeto_atividade" => "1",
				"numero_projeto_atividade" => "065",
				"numero_subprojeto_atividade" => "0001",
				"codigo_elemento_despesa" => "44903500",
				"valor_atual_categoria_economica" => "0.0000",
				"valor_orcado_categoria_economica" => "18000.0000",
				"tipo_fonte" => "2",
				"codigo_fonte" => "31"
			},
			{
				"codigo_municipio" => "057",
				"exercicio_orcamento" => "201600",
				"codigo_orgao" => "18",
				"codigo_unidade" => "101",
				"codigo_funcao" => "04",
				"codigo_subfuncao" => "126",
				"codigo_programa" => "0001",
				"codigo_projeto_atividade" => "1",
				"numero_projeto_atividade" => "065",
				"numero_subprojeto_atividade" => "0001",
				"codigo_elemento_despesa" => "44903600",
				"valor_atual_categoria_economica" => "0.0000",
				"valor_orcado_categoria_economica" => "21000.0000",
				"tipo_fonte" => "1",
				"codigo_fonte" => "01"
			},
			{
				"codigo_municipio" => "057",
				"exercicio_orcamento" => "201600",
				"codigo_orgao" => "18",
				"codigo_unidade" => "101",
				"codigo_funcao" => "04",
				"codigo_subfuncao" => "126",
				"codigo_programa" => "0001",
				"codigo_projeto_atividade" => "1",
				"numero_projeto_atividade" => "065",
				"numero_subprojeto_atividade" => "0001",
				"codigo_elemento_despesa" => "44903600",
				"valor_atual_categoria_economica" => "0.0000",
				"valor_orcado_categoria_economica" => "9000.0000",
				"tipo_fonte" => "2",
				"codigo_fonte" => "31"
			},
			{
				"codigo_municipio" => "057",
				"exercicio_orcamento" => "201600",
				"codigo_orgao" => "18",
				"codigo_unidade" => "101",
				"codigo_funcao" => "04",
				"codigo_subfuncao" => "126",
				"codigo_programa" => "0001",
				"codigo_projeto_atividade" => "1",
				"numero_projeto_atividade" => "065",
				"numero_subprojeto_atividade" => "0001",
				"codigo_elemento_despesa" => "44903900",
				"valor_atual_categoria_economica" => "0.0000",
				"valor_orcado_categoria_economica" => "30000.0000",
				"tipo_fonte" => "1",
				"codigo_fonte" => "01"
			},
			{
				"codigo_municipio" => "057",
				"exercicio_orcamento" => "201600",
				"codigo_orgao" => "18",
				"codigo_unidade" => "101",
				"codigo_funcao" => "04",
				"codigo_subfuncao" => "126",
				"codigo_programa" => "0001",
				"codigo_projeto_atividade" => "1",
				"numero_projeto_atividade" => "065",
				"numero_subprojeto_atividade" => "0001",
				"codigo_elemento_despesa" => "44903900",
				"valor_atual_categoria_economica" => "0.0000",
				"valor_orcado_categoria_economica" => "270000.0000",
				"tipo_fonte" => "2",
				"codigo_fonte" => "31"
			},
			{
				"codigo_municipio" => "057",
				"exercicio_orcamento" => "201600",
				"codigo_orgao" => "18",
				"codigo_unidade" => "101",
				"codigo_funcao" => "04",
				"codigo_subfuncao" => "126",
				"codigo_programa" => "0001",
				"codigo_projeto_atividade" => "1",
				"numero_projeto_atividade" => "065",
				"numero_subprojeto_atividade" => "0001",
				"codigo_elemento_despesa" => "44904700",
				"valor_atual_categoria_economica" => "0.0000",
				"valor_orcado_categoria_economica" => "1000.0000",
				"tipo_fonte" => "1",
				"codigo_fonte" => "01"
			},
			{
				"codigo_municipio" => "057",
				"exercicio_orcamento" => "201600",
				"codigo_orgao" => "18",
				"codigo_unidade" => "101",
				"codigo_funcao" => "04",
				"codigo_subfuncao" => "126",
				"codigo_programa" => "0001",
				"codigo_projeto_atividade" => "1",
				"numero_projeto_atividade" => "065",
				"numero_subprojeto_atividade" => "0001",
				"codigo_elemento_despesa" => "44905200",
				"valor_atual_categoria_economica" => "0.0000",
				"valor_orcado_categoria_economica" => "130000.0000",
				"tipo_fonte" => "1",
				"codigo_fonte" => "01"
			},
			{
				"codigo_municipio" => "057",
				"exercicio_orcamento" => "201600",
				"codigo_orgao" => "18",
				"codigo_unidade" => "101",
				"codigo_funcao" => "04",
				"codigo_subfuncao" => "126",
				"codigo_programa" => "0001",
				"codigo_projeto_atividade" => "1",
				"numero_projeto_atividade" => "065",
				"numero_subprojeto_atividade" => "0001",
				"codigo_elemento_despesa" => "44905200",
				"valor_atual_categoria_economica" => "0.0000",
				"valor_orcado_categoria_economica" => "270000.0000",
				"tipo_fonte" => "2",
				"codigo_fonte" => "31"
			}
		]
	}

	let(:carrega_dependencias) {
		Rails.application.load_seed
		allow(Rails.env).to receive(:test?).and_return( false )
		ImportacaoTcm::Loa.importar('057', '2016')
	}

	describe "Importa os dados de orçamento de despesa da API do TCM" do
		# it ".importar" do
		# 	carrega_dependencias
		#
		# 	ImportacaoTcm::LoaDespesa.stub(:criar_orcamentos_da_despesa).and_call_original
		#
		# 	expect( ImportacaoTcm::LoaDespesa ).to receive(:criar_orcamentos_da_despesa)
		#
		# 	ImportacaoTcm::LoaDespesa.importar("057", "2016")
		# end

		xit ".criar_orcamentos_da_despesa" do
			carrega_dependencias
			orcamento = Orcamento.find_by(exercicio: '2016')

			ImportacaoTcm::LoaDespesa.criar_orcamentos_da_despesa(dados_orcamentos_da_despesa, orcamento)
			dados_orcamentos_da_despesa.each do |dados_orcamentos_da_despesa|
				natureza_da_acao = orcamento.naturezas_da_acao.find_by(codigo: dados_orcamentos_da_despesa['codigo_projeto_atividade'])
				unidade_orcamentaria = orcamento.orgaos.find_by(codigo: dados_orcamentos_da_despesa['codigo_orgao']).unidades_orcamentarias.find_by(codigo: dados_orcamentos_da_despesa['codigo_unidade'].strip)
				subacao = orcamento.programas_de_governo.find_by(codigo: dados_orcamentos_da_despesa['codigo_programa']).acoes.find_by(natureza_da_acao_id: natureza_da_acao.id,codigo: dados_orcamentos_da_despesa['numero_projeto_atividade']).subacoes.find_by(unidade_orcamentaria_id: unidade_orcamentaria.id)
				elemento_de_despesa = orcamento.elementos_de_despesa.find_by(codigo: dados_orcamentos_da_despesa['codigo_elemento_despesa'])
				fonte_de_recurso = orcamento.fontes_de_recursos.find_by(codigo: dados_orcamentos_da_despesa['codigo_fonte'].strip)

				expect(
				subacao.elementos_de_despesa_por_subacao.find_by(
					elemento_de_despesa_id: elemento_de_despesa.id)
				).not_to be_nil

				expect(
				subacao.orcamentos_da_despesa.find_by(
					fonte_de_recursos_id: fonte_de_recurso.id)
				).not_to be_nil
			end
		end
	end
end
