require 'rails_helper'

RSpec.describe Contabilidade::MovimentacaoDaContaBancaria, type: :model do

	it{ is_expected.to belong_to(:modulo).required(true) }
	it{ is_expected.to belong_to( :conta_bancaria_por_unidade_orcamentaria ) }

	it{ is_expected.to validate_presence_of :modulo_id }
	it{ is_expected.to validate_presence_of :modulo_type }


	it "#atualiza_saldo" do
		conta_bancaria_por_unidade_orcamentaria = Base::ContaBancariaPorUnidadeOrcamentaria.find_or_create_by!( FactoryBot.attributes_for(:conta_bancaria_por_unidade_orcamentaria) )
		saldo_anterior = conta_bancaria_por_unidade_orcamentaria.saldo_atual.to_f

		talao_de_receita = Contabilidade::TalaoDeReceita.new(FactoryBot.attributes_for(:contabilidade_talao_de_receita))
		talao_de_receita.save
		movimentacao_da_conta_bancaria = Contabilidade::MovimentacaoDaContaBancaria.where(conta_bancaria_por_unidade_orcamentaria: talao_de_receita.conta_bancaria_por_unidade_orcamentaria).last

		conta_bancaria_por_unidade_orcamentaria = Base::ContaBancariaPorUnidadeOrcamentaria.find_or_create_by!( FactoryBot.attributes_for(:conta_bancaria_por_unidade_orcamentaria) )
		movimentacao_da_conta_bancaria.save
		saldo_atual = conta_bancaria_por_unidade_orcamentaria.reload.saldo_atual.to_f

		expect(saldo_atual.to_f).to eq saldo_anterior.to_f + movimentacao_da_conta_bancaria.valor.to_f
	end

	it "#desconsidera_saldo" do
		conta_bancaria_por_unidade_orcamentaria = Base::ContaBancariaPorUnidadeOrcamentaria.find_or_create_by!( FactoryBot.attributes_for(:conta_bancaria_por_unidade_orcamentaria) )
		saldo_anterior = conta_bancaria_por_unidade_orcamentaria.saldo_atual.to_f

		talao_de_receita = Contabilidade::TalaoDeReceita.new(FactoryBot.attributes_for(:contabilidade_talao_de_receita))
		talao_de_receita.save
		movimentacao_da_conta_bancaria = Contabilidade::MovimentacaoDaContaBancaria.where(conta_bancaria_por_unidade_orcamentaria: talao_de_receita.conta_bancaria_por_unidade_orcamentaria).last
		movimentacao_da_conta_bancaria.save

		conta_bancaria_por_unidade_orcamentaria = Base::ContaBancariaPorUnidadeOrcamentaria.find_or_create_by!( FactoryBot.attributes_for(:conta_bancaria_por_unidade_orcamentaria) )

		movimentacao_da_conta_bancaria.destroy
		conta_bancaria_por_unidade_orcamentaria.reload
		saldo_atual = conta_bancaria_por_unidade_orcamentaria.saldo_atual.to_f

		expect(saldo_atual.to_f).to eq saldo_anterior.to_f
	end
end
