require 'rails_helper'

RSpec.describe Contabilidade::AnulacaoDoTalaoDeReceita, type: :model do
	cria_configuracao_default

	it{ is_expected.to belong_to( :talao_de_receita ).required }

	#it_behaves_like "reverte eventos contábeis", "Anular", Contabilidade::AnulacaoDoTalaoDeReceita, :contabilidade_talao_de_receita, :anulacao_do_talao_de_receita

	[:data_da_anulacao, :historico, :valor, :tipo_de_anulacao].each do |atributo|
		it{ is_expected.to validate_presence_of atributo }
	end

	# it{ is_expected.to validate_numericality_of( :valor ).is_other_than(0) }

	it { is_expected.to allow_value('01/01/2016').for(:data_da_anulacao) }
	it { is_expected.to_not allow_value('').for(:data_da_anulacao) }
	it { is_expected.to_not allow_value('00/').for(:data_da_anulacao) }

	it "atualiza saldo do talao" do
		anulacao_do_talao_de_receita = Contabilidade::AnulacaoDoTalaoDeReceita.find_or_create_by!( FactoryBot.attributes_for(:anulacao_do_talao_de_receita) )
		expect(anulacao_do_talao_de_receita.talao_de_receita.saldo).to eq 0
	end

	it "atualiza tipo de anulacao parcial" do
		talao_de_receita = Contabilidade::TalaoDeReceita.find_or_create_by!( FactoryBot.attributes_for(:contabilidade_talao_de_receita) )
		anulacao_do_talao_de_receita = Contabilidade::AnulacaoDoTalaoDeReceita.create(talao_de_receita: talao_de_receita, valor: 2.00, historico: "...", data_da_anulacao: Date.today, tipo_de_anulacao: :parcial)
		expect(anulacao_do_talao_de_receita.tipo_de_anulacao).to eq "parcial"
	end

	it "atualiza tipo de anulacao total" do
		talao_de_receita = Contabilidade::TalaoDeReceita.find_or_create_by!( FactoryBot.attributes_for(:contabilidade_talao_de_receita) )
		anulacao_do_talao_de_receita = Contabilidade::AnulacaoDoTalaoDeReceita.create(talao_de_receita: talao_de_receita, valor: 9.99, historico: "...", data_da_anulacao: Date.today, tipo_de_anulacao: :total)
		expect(anulacao_do_talao_de_receita.tipo_de_anulacao).to eq "total"
	end

	it "valor maior que saldo" do
		talao_de_receita = Contabilidade::TalaoDeReceita.find_or_create_by!( FactoryBot.attributes_for(:contabilidade_talao_de_receita) )
		anulacao_do_talao_de_receita = Contabilidade::AnulacaoDoTalaoDeReceita.create(talao_de_receita: talao_de_receita, valor: 10.00, historico: "...", data_da_anulacao: Date.today, tipo_de_anulacao: :parcial)
		expect(anulacao_do_talao_de_receita.errors[:valor]).to include("não pode ser maior que o saldo do talão")
	end

	describe '#lancar_na_conta_bancaria' do
		it "atualiza o saldo anulado, na conta bancária" do
			conta_bancaria = FactoryBot.create(:conta_bancaria, saldo_inicial: 100)
			unidade_orcamentaria_1 = Loa::UnidadeOrcamentaria.find_or_create_by!( FactoryBot.attributes_for(:loa_seduc, :orcamento_2016) )
			conta_bancaria_por_unidade_orcamentaria = Base::ContaBancariaPorUnidadeOrcamentaria.create!(FactoryBot.attributes_for(:conta_bancaria_por_unidade_orcamentaria, conta_bancaria: conta_bancaria, unidade_orcamentaria: unidade_orcamentaria_1, principal: true))
			conta_bancaria.reload
			saldo_inicial_da_conta_bancaria = conta_bancaria.saldo_inicial.to_f
			talao_de_receita = FactoryBot.create(:contabilidade_talao_de_receita, unidade_orcamentaria: unidade_orcamentaria_1, conta_bancaria_por_unidade_orcamentaria: conta_bancaria_por_unidade_orcamentaria, valor: 100)

			anulacao_do_talao_de_receita = FactoryBot.create(:anulacao_do_talao_de_receita, talao_de_receita: talao_de_receita, tipo_de_anulacao: :total, valor: 100)
			conta_bancaria.reload

			expect( conta_bancaria.saldo_atual.to_f ).to eq saldo_inicial_da_conta_bancaria
		end
	end

	describe 'valida saldo do orcamento da receita' do

		it "quando lanca movimento orcamentario" do
			pending("Implementar - Houve Mudança")
			fail

			# talao_de_receita = Contabilidade::TalaoDeReceita.create!(FactoryBot.attributes_for(:contabilidade_talao_de_receita))
			# anulacao_do_talao_de_receita = Contabilidade::AnulacaoDoTalaoDeReceita.find_or_create_by!( FactoryBot.attributes_for(:anulacao_do_talao_de_receita, talao_de_receita: talao_de_receita, valor: talao_de_receita.valor) )
			# expect( anulacao_do_talao_de_receita.talao_de_receita.orcamentos_da_receita.first.valor_arrecadado.to_f ).to eq 0
		end

		it "quando apaga movimento orcamentario" do
			pending("Implementar - Houve Mudança")
			fail

			# talao_de_receita = FactoryBot.build(:contabilidade_talao_de_receita)
			# talao_de_receita.save(validate: false)
			# anulacao_do_talao_de_receita = FactoryBot.build(:anulacao_do_talao_de_receita, valor: 9.99, talao_de_receita: talao_de_receita)
			# anulacao_do_talao_de_receita.save(validate: false)
			# anulacao_do_talao_de_receita.destroy
			# expect( talao_de_receita.orcamentos_da_receita.first.reload.valor_arrecadado.to_f ).to eq talao_de_receita.valor.to_f
		end
	end
end
